2. diel - Testovacie prípady
V predchádzajúcej lekcii, Úvod do automatizovaného testovania softvéru, sme si ukázali prínosy automatizácie a predstavili si projekt, s ktorým budeme pracovať.
V tomto tutoriáli kurzu praktického testovania projektov si pripomenieme, ako pracovať s nástrojom Jira a zoznámime sa s konkrétnymi testovacími prípadmi, na ktoré sa v priebehu kurzu zameriame.
Testovacie prípady v Jire
Základy práce s nástrojom Jira sme si popísali v lekcii Plánovanie testov v Jira - Tvorba testovacích scenárov, kde sme tiež vytvorili prvý testovací prípad (test case) na manuálne testovanie, TC1 – Pridanie osoby.
Následne sme v lekciách Plánovanie testov v Jira - Testovacie prípady pre front-end a Plánovanie testov v Jira - Testovacie prípady pre back-end doplnili ďalšie TC a všetko rozdelili do troch šprintov:

TC pre automatizované testovanie
V nasledujúcich tutoriáloch sa zameriame na automatizáciu testovacích prípadov. Ukážeme si, ako testovať obe vrstvy našej aplikácie pomocou bežne používaných nástrojov v Pythone. K tomu si vytvoríme ďalšie testovacie prípady v Jira, ktoré zaradíme do nového – štvrtého šprintu, aby sme tak mali automatizované testovanie oddelené.
Ak ste neabsolvovali kurz manuálneho testovania, vytvorte si v Jira nový projekt s názvom "Billing system". V tomto projekte si následne vytvoríme nový šprint a testovacie prípady pre automatizované testovanie.
Očakávame, že účastníci už majú skúsenosti s návrhom testovacích prípadov, orientujú sa v Jire a rozumejú základom testovacieho procesu, na ktoré v tomto kurze priamo nadväzujeme a ďalej ich rozvíjame smerom k automatizácii. Ak tieto znalosti nemáte, odporúčame najskôr absolvovať kurz Praktické testovanie projektov - Manuálne testovanie.
Vytvorenie nového šprintu
V sekcii Backlog si vytvoríme nový šprint. Kliknite na tlačidlo Create sprint:

Šprint premenujeme. Klikneme na ... a zvolíme Edit sprint:

Ako nový názov zadáme Sprint 4 - Automation. Môžeme tu
tiež nastaviť dobu trvania šprintu, obvykle to bývajú
1–2 týždne. Alternatívne môžeme nastaviť počiatočný a
konečný dátum šprintu. Nás bude teraz najviac zaujímať posledné
pole, v ktorom definujeme cieľ šprintu (Sprint
goal). Tu teda vyplníme krátky popis našej testovacej úlohy - "Test the
basic functionality of the application, including CRUD operations (create, read,
update, delete), with an emphasis on input validation and display in the user
interface." a potvrdíme tlačidlom Update:

Výsledok bude vyzerať takto:

Testovanie front-endu pomocou Selenia
Na automatizované testovanie webového rozhrania využijeme nástroj Selenium, ktorý umožňuje programovo ovládať webový prehliadač (napr. Chrome alebo Firefox), ako by s ním pracoval bežný používateľ. Počas tohto testovania Selenium kliká na prvky stránky, vypĺňa formuláre alebo overuje prítomnosť konkrétnych dát.
Na testovanie front-endu si vytvoríme tieto testovacie prípady:
- TC11 – Adding an invoice - Overíme, že po vyplnení formulára a jeho odoslaní sa nová faktúra správne uloží a zobrazí v zozname.
- TC12 - Deleting an invoice - Otestujeme, že po kliknutí na tlačidlo Zmazať pri konkrétnej faktúre dôjde k jej odstráneniu z databázy a že ju užívateľ už neuvidí v zozname. Vďaka tomuto testu bude odstránená faktúra, ktorú sme vytvorili v predchádzajúcom automatickom teste (TC11 – Adding an invoice).
Oba testy tak tvoria uzavretý celok, ktorý overuje správnu funkčnosť systému pri práci so záznamami od ich vytvorenia až po ich odstránenie. Tieto scenáre zároveň pokrývajú základné funkcie, s ktorými sa používateľ najčastejšie stretáva (vytváranie a mazanie záznamov).
TC11 – Adding an invoice
Ako prvé si pripravíme a otestujeme TC11 - Adding an invoice - Selenium. V backlogu zvolíme pri štvrtom šprinte + Create:

Ďalej vyberieme typ Task (obrázok fajky v modrom štvorčeku), je možné, že tento typ tu bude automaticky prednastavený, ak nie, rozklikneme si ikonku a vyberieme správny typ:

Pomenujeme ho TC11 - Adding an invoice - Selenium a stlačíme
Enter:

Kliknutím na názov prípadu sa nám v pravej časti stránky otvorí možnosť editácie:

Kliknutím na ID testovacieho prípadu v hlavičke ho môžeme otvoriť v samostatnom okne:

Pripravené polia vyplníme podľa tabuľky:
| Názov poľa | Text, ktorý budeme vkladať |
|---|---|
| Description | The test case verifies whether the user can successfully add a new invoice in the application and whether it is correctly displayed in the list. |
| Preconditions | • The user is on the "Invoices" screen. |
| • The application is running at http://localhost:3000. | |
| Test Steps | 1. The user clicks on the "Invoices" tab in the top menu. |
| 2. Clicks the "New Invoice" button. | |
| 3. Waits for the form to appear. | |
| 4. Fills in the "Invoice Number" field (e.g., 12345). | |
| 5. Selects the first item in the "Supplier" dropdown. | |
| 6. Selects the second item in the "Customer" dropdown. | |
| 7. Fills in the issue date, due date, product, price, VAT, and note. | |
| 8. Clicks the "Save" button. | |
| 9. After submission, verifies that the new invoice appears in the invoice list. | |
| 10. Verifies that the invoice price matches the expected value. | |
| Expected Results | • After clicking the "Save" button, the new invoice is saved. |
| • The invoice is immediately displayed in the invoice list with the filled-in data including the correct price. | |
| Acceptance Criteria | • The user must be able to add an invoice when all required fields are filled in. |
| • After successful saving, the new invoice appears in the invoice list with correct data. |
V testovacom prípade sme najskôr vyplnili popis, aby tester vedel, ktorú časť kódu testuje a čo presne má byť overené. Pomocou Preconditions zaistíme, že test začína v správnom kontexte a nie je potrebné vykonávať zbytočné prechody v aplikácii. Testovacími krokmi overujeme, že aplikácia funguje podľa očakávania, keď používateľ zadá platné údaje. Tento scenár simuluje bežné použitie aplikácie.
Body uvedené v časti Expected Results slúžia na vymedzenie správneho fungovania systému a zabezpečenie predvídateľného správania pri rôznych scenároch. V poslednom poli máme stanovené jasné podmienky, ktoré musia byť splnené, aby bol testovací prípad úspešne dokončený. Tým zaisťujeme, že vývojový tím aj tester majú jednotné porozumenie tomu, čo sa testuje a aké sú požiadavky na funkčnosť.
Negatívne scenáre sme si už vyskúšali v manuálnom testovaní. Tu sa v rámci automatizácie zameriame iba na overenie pozitívneho scenára.
Výsledok bude vyzerať takto:

TC12 - Deleting an invoice
V ďalšom testovacom prípade budeme kontrolovať funkčnosť zmazania
faktúry. Vytvoríme si nový testovací prípad a pomenujeme ho
TC12 - Deleting an invoice - Selenium.
Než sa pozriete na riešenie, skúste si testovací prípad najprv navrhnúť sami. Riešenie testovacieho prípadu nájdete skryté pod šípkou, ktorú si môžete rozkliknúť v prípade, že si nebudete vedieť rady. Slúži iba ako pomocník, nie na priame opisovanie.
| Názov poľa | Text, ktorý budeme vkladať |
|---|---|
| Description | The test case verifies whether the user can successfully delete an existing invoice in the application and whether the deletion is reflected in the invoice list. |
| Preconditions | • The user is on the "Invoices" screen. |
| • At least one invoice exists in the system and is ready for deletion. | |
| Test Steps | 1. The user clicks on "Invoices" in the top menu. |
| 2. Searches for the invoice by number (e.g., 12345). | |
| 3. Clicks the "Delete" button for the corresponding invoice. | |
| 4. Confirms any confirmation dialog (if displayed). | |
| 5. Verifies that the invoice has been removed from the list. | |
| Expected Results | • The invoice is successfully deleted after clicking "Delete". |
| • The invoice is no longer displayed in the invoice list. | |
| Acceptance Criteria | • The user must be able to delete an existing invoice. |
| • After deletion, the invoice disappears from the list and is no longer available for viewing or editing. |
Výsledok bude vyzerať takto:

Testovanie back-endu pomocou pytestu
Serverovú časť aplikácie budeme testovať pomocou frameworku pytest, ktorý je široko používaný na automatizované testovanie v Pythone. Umožňuje prehľadne organizovať testy, hromadne ich spúšťať a vyhodnocovať ich výsledky.
Na rozdiel od testovania front-endu sa tu zameriame na overenie logiky a funkčnosti API, teda na to, či server správne reaguje na požiadavky typu editácie, mazania, získania dát a pod. Namiesto simulácie používateľa pracujeme priamo s požiadavkami HTTP.
Vybrané testovacie scenáre:
- TC13 – Editing a person - Overíme, či server umožní upraviť údaje u existujúcej osoby a či sa zmeny správne uložia.
- TC14 – Deleting a person - Otestujeme, že po odoslaní požiadavky na zmazanie určitej osoby server záznam skutočne odstráni a nebude ho vracať v zozname.
Zmazanie osoby je v našej aplikácii odlišné od zmazania faktúry. V skutočnosti sa "zmazaná" osoba, ktorá môže figurovať v už vystavených faktúrach, v databáze iba skryje. Vďaka použitiu frameworku pytest sa po vykonaní týchto testovacích prípadov dáta v databáze automaticky vrátia do pôvodného stavu, takže testovanie nijako neovplyvní reálny obsah aplikácie.
Oba prípady pokrývajú dôležité akcie nad entitou osoby a zároveň
overujú rôzne HTTP metódy (v našom prípade PUT a
DELETE), čím si precvičíme prácu s REST API a testovanie
rôznych typov požiadaviek.
Zvolená štvorica testovacích prípadov dobre reprezentuje základné funkcie oboch častí systému a umožní nám vytvoriť zmysluplný základ pre budúce rozšírenie automatizácie. Zameriavame sa na CRUD operácie (Create, Read, Update, Delete), ktoré sú jadrom väčšiny moderných aplikácií.
Výsledkom bude nielen vykonanie konkrétnych testov, ale aj vytvorenie základného testovacieho rámca, na ktorý bude možné ďalej nadviazať.
TC13 – Editing a person
V ďalšom testovacom prípade budeme kontrolovať funkčnosť editácie
osoby. Vytvoríme si nový testovací prípad a pomenujeme ho
TC13 – Editing a person - pytest.
Na testovanie back-endu budeme potrebovať URL adresu (endpoint) a JSON kód, ktorý môžeme zistiť v API dokumentácii k nášmu projektu. V API dokumentácii si nájdeme endpoint na editáciu osoby a pomocou týchto údajov vyplníme v Jira príslušné polia:
| Názov poľa | Text, ktorý budeme vkladať |
|---|---|
| Description | The test case verifies whether the API allows editing an existing person record and whether the logic of hiding the original record and creating a new one is correctly executed. |
| Preconditions | • At least one person with all required fields exists in the database. |
| • The API is available at http://localhost:8000/api/persons/{id}/. | |
| Test Steps | 1. Send a PUT request to the endpoint /api/persons/{id}/ with a new identification number, keeping other data unchanged. |
| 2. Verify that the API returns status code 200 OK. | |
3. Verify that the original person record has the
attribute hidden set to True. |
|
| 4. Verify that a new person record exists with the updated identification number. | |
| Expected Results | • The API returns a 200 OK status response. |
• The original record is marked as hidden
(hidden = True). |
|
| • A new person record exists with the new identification number. | |
| Acceptance Criteria | • Editing a person via the API is successful and complies with application rules: the original record is hidden, a new record is created, and the data matches the request. |
Výsledok bude vyzerať takto:

TC14 – Deleting a person
V ďalšom testovacom prípade budeme kontrolovať funkčnosť zmazania
osoby. Vytvoríme si nový testovací prípad a pomenujeme ho
TC14 – Deleting a person - pytest.
Než sa pozriete na riešenie, skúste si testovací prípad najprv navrhnúť sami. Riešenie testovacieho prípadu nájdete skryté pod šípkou, ktorú si môžete rozkliknúť v prípade, že si nebudete vedieť rady. Slúži iba ako pomocník, nie na priame opisovanie.
| Názov poľa | Text, ktorý budeme vkladať |
|---|---|
| Description | The test case verifies whether the API allows
"deleting" a person and whether this operation correctly changes the person's
status to "hidden" (hidden = True) instead of physically deleting
the record from the database. |
| Preconditions | • At least one person with all required fields exists in the database. |
| • The API is available at http://localhost:8000/api/persons/{id}/. | |
| Test Steps | 1. Send a DELETE request to the endpoint /api/persons/{id}/. |
| 2. Verify that the API returns status code 204 No Content. | |
3. Verify that the person record has the attribute
hidden set to True. |
|
| Expected Results | • The API returns a 204 No Content status response. |
• The original person record is not physically
deleted but is marked as hidden (hidden = True). |
|
| Acceptance Criteria | • The API must allow "logical deletion" of a person. |
| • After successful deletion, the person must no longer appear in the list of active persons. | |
• The hidden attribute must be
correctly set. |
Výsledok bude vyzerať takto:

V nasledujúcej lekcii, Automatizované testovanie front-endu - Príprava prostredia, prejdeme k automatickému testovaniu projektu a pripravíme si prostredie pre automatizované testy front-endu.
