V této složce se nachází rozsáhlé testy API i UI (E2E) tvořící základ aplikace. Testy se automaticky spouští na CI a lze je spustit i na lokálním prostředí.
Testování je postaveno na BDD frameworku behave – testové scénáře jsou psány přirozeným jazykem, podle nich se spouští konkrétní testy. Pro pokročilejší integraci behave s Djangem je použité behave-django.
Pro testování UI se používá Selenium, konkrétně
oficiální binding pro Python. Pro
jednoduchý přístup k elementům stránky je zaveden jednotný vlastní HTML atribut data-qa (ve
výjimečných případech toto nelze a používá se přímo id elementu – např. komponenty s
React Select používají React props inputId a
classNamePrefix). Testuje se v prohlížeči Mozilla Firefox s využitím
geckodriver.
├── api_steps ........ testovací kroky pro API
├── common_steps ..... společné testovací kroky pro API a UI
├── features ......... popsané funkce a scénáře pro API i UI
└── ui_steps ......... testovací kroky pro UIVe složkách api_steps a ui_steps jsou soubory s názvy
<testovana_cast>.py – ty pokrývají danou testovanou část aplikace popsanou v souboru
features/<testovana_cast>.feature (např. skupiny, klienty...). Dále je v obou složkách vždy soubor
helpers.py, který obsahuje pomocné funkce používané v rámci dané složky.
Složka common_steps obsahuje kroky, které jsou používané pro API i UI testy
dané části <testovana_cast>.py.
Soubor common_helpers.py obsahuje pomocné funkce, které jsou používány
pro API i UI testy. Soubory api_environment.py a
ui_environment.py obsahují obecné nastavení prostředí pro dané API/UI testy
(např. nastavení prohlížeče, klienta...).
Pro fungování UI testů je třeba mít nainstalovaný geckodriver a prohlížeč Mozilla Firefox. Způsob instalace geckodriver lze najít v tomto skriptu.
K dispozici jsou dvě různé sady testů (tzv. stage): testy UI a testy API. Pro spuštění konkrétní sady tedy stačí tyto příkazy:
- spuštění UI testů:
python manage.py behave --stage=ui, - spuštění API testů:
python manage.py behave --stage=api.
Tip pro UI testy: ve výchozím nastavení běží UI testy v tzv. headless módu prohlížeče, tedy bez GUI (prohlížeč není vidět), pokud chcete průběh UI testů (postupné proklikávání a psaní v aplikaci) vidět, stačí upravit v souboru .env řádek s
TESTS_HEADLESSna:TESTS_HEADLESS=False.
Testování lze ještě dále zúžit na konkrétní testovanou část či operaci (označené tzv. tagem) z
dané sady testů (stage). Pro jednoduchost jsou tagy pro testované části totožné s názvy souborů
testových scénářů (features/*.features) i implementací testů (api_steps/*.py a ui_steps/*.py).
Tagem lze, jak bylo řečeno, také zúžit testy na prováděné operace s danou entitou, konkrétně jsou
k dispozici tagy pro CRUD operace (add, delete a edit) a také pro přihlášení/odhlášení
(login a logout).
Tabulka s jednotlivými testovanými částmi:
| testovaná část | název tagu i souborů s testy |
|---|---|
| zájemci o kurzy | applications |
| stavy účasti | attendancestates |
| klienti | clients |
| kurzy | courses |
| skupiny | groups |
| lekce | lectures |
| přihlášení/odhlášení | login_logout |
Příklad spuštění testů API pro klienty a lekce – tedy testů ze stage (sady testů) API s tagy
(testovanými částmi) clients:
python manage.py behave --stage=api --tags=clients,lecturesPříklad spuštění testů UI jen pro skupiny:
python manage.py behave --stage=ui --tags=groupsTip pro spouštění velkého množství testů: pro jednodušší a přehlednější výpis informací o průběhu testů v konzoli je vhodné k příkazu pro spuštění testů přidat argument
--format=progress3(viz dokumentace behave).
- Společné kroky pro behave testy se klasicky importují, např.
from tests.common_steps import groups, IDE tento import ale vzhledem ke způsobu fungování behave označí jako nepoužitý a při optimalizacích jej může odstranit. Proto je u těchto importů direktiva# noinspection PyUnresolvedReferences, která tomuto zamezí a zároveň umožní automatickou optimalizaci importů nad celým projektem bez výjimek. - Vzhledem k časové náročnosti UI testů je připraven pro rychlé (smoke) testování tag
fast.row1.1– od každé funkcionality se vyzkouší jeden nejdůležitější příklad reprezentující nejčastější použití. Tyto testy se hodí zejména pro rychlý lokální test před zapsáním změn do repozitáře. - V souboru MANUAL_TESTS je seznam oblastí a průchodů v aplikaci, které nejsou pokryty automatizovanými testy.
Jednotkové testy frontendu se nachází ve složce s frontendem), postupně přibývají
pro kritické části aplikace. Soubory s testy se vždy nacházejí vedle testovaného souboru a
respektují klíč názvu nazev_testovaneho_souboru.test.(ts|tsx).
Unit testy jsou postaveny na frameworku Jest a nástrojích React Testing Library (jednoduché utility pro testování Reactu), jest-dom (custom DOM element matchers pro Jest) a MSW (mockování API).