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 UI
Ve 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_HEADLESS
na: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,lectures
Příklad spuštění testů UI jen pro skupiny:
python manage.py behave --stage=ui --tags=groups
Tip 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).