0%

Slotproject: een hulpmiddel voor oefenrapporten · eindproject

Eindproject: Slotproject: maak het hulpmiddel af en toon aan dat het werkt

Dit is het laatste stuk bouwen. Alles hierna gaat over het project overdragen.

Maak practice_report.py af zodat alle onderdelen verbonden zijn: de cache met zijn contract, actualiteit vanuit een meegegeven tijd, de selectietabel met zes rijen, de samenvatting en het rapport, en de CLI-grens die bepaalt wat er wordt geschreven en in welke volgorde.

Voer daarna beide suites uit:

python -m pytest -q

Beide modules horen verzameld te worden en te slagen. tests/test_api_catalog.py kwam mee uit hoofdstuk 12 en hoort niet te zijn veranderd; tests/test_practice_report.py heb je zelf geschreven.

Toon aan dat verplaatsen geen probleem is

Deze les heeft geen netwerktoegang. De siteomgeving bevat de vastgezette versies van Requests en pytest al. Gebruik daarom haar python om een gekopieerde bronstructuur te controleren zonder packages te installeren. Hoofdstuk 12 leerde je een nieuwe omgeving op te bouwen; de volgende les herhaalt dat op je eigen computer.

Kopieer de tien geschreven bestanden naar een nieuwe map met een spatie en niet-ASCII-tekst in de naam. Voer daar de tests en offlinemodus uit:

mkdir -p "/tmp/Fresh Café Report Project/tests"
mkdir -p "/tmp/Fresh Café Report Project/data"
cp API_CONTRACT.md README.md api_catalog.py practice_report.py pl_check.py \
   requirements.txt requirements-dev.txt "/tmp/Fresh Café Report Project/"
cp data/offline-page.json "/tmp/Fresh Café Report Project/data/"
cp tests/test_api_catalog.py tests/test_practice_report.py "/tmp/Fresh Café Report Project/tests/"
cd "/tmp/Fresh Café Report Project"
python -m pytest -q
python practice_report.py report.txt --offline-source data/offline-page.json
cd /workspace

Die commando’s voeren de suite opnieuw uit en maken een offlinerapport vanuit de gekopieerde hoofdmap. Beide horen zich precies te gedragen als op de oorspronkelijke plek. Zo niet, dan hangt iets in je code af van waar die staat. Dat ontdek je liever nu dan nadat je het project naar iemand hebt gestuurd.

Probeer de routes die makkelijk misgaan

Voer de offlineroute uit in deze sessie zonder netwerk:

python practice_report.py report.txt --offline-source data/offline-page.json
cat report.txt

Het rapport hoort source: offline en fetched_at: none te zeggen. Het commando mag geen cachebestand maken of wijzigen. Een bestaande cache uit eerder werk blijft zoals die was.

Gebruik je tests met nagebootste HTTP voor de overige rijen van de selectietabel. Een actuele cache hoort nul aanroepen vast te leggen; een ontbrekende cache één; een verouderde cache mag alleen bij de gedocumenteerde fouten terugvallen; en --refresh moet één keer ophalen zonder terugval. Geef now_epoch mee zodat de uitkomst van de actualiteitscontrole tijdens een test niet kan veranderen. Live vernieuwen kan niet slagen in de sessie zonder netwerk van deze les.

Ruim op voordat je inlevert

Verwijder gegenereerde cache- en rapportbestanden uit de opgeslagen werkruimte. De gekopieerde hoofdmap staat onder /tmp en verdwijnt met de sessie; .venv, __pycache__ en .pytest_cache zijn afgeleide toestand en horen niet bij de geschreven bestanden.

Het opgeslagen project hoort precies tien geschreven bestanden te bevatten en verder niets:

API_CONTRACT.md
README.md
api_catalog.py
practice_report.py
pl_check.py
requirements.txt
requirements-dev.txt
data/offline-page.json
tests/test_api_catalog.py
tests/test_practice_report.py

Een gegenereerde cache is geen bewijs dat het hulpmiddel werkt. Het is een overblijfsel. De tien bestanden hierboven vormen het project; al het andere is iets wat het project maakt.

Klik op Check my work wanneer de suites groen zijn en de bestandsstructuur schoon is.

Als een test faalt en je niet ziet waarom, vraag Monty dan de falende assertie te lezen en te vertellen welke van de zes selectierijen die controleert. De rij benoemen benoemt meestal ook de fout.

Opdracht

Voltooi het exacte contract voor cache/tijd/bron/rapport/CLI en laat de volledige suite met nagebootste HTTP vanuit een schone hoofdmap slagen zonder gegenereerde uitvoer te bewaren.