This shows you the differences between two versions of the page.
tsc:laboratoare:laborator-08 [2025/04/23 16:02] ionut_vladut.pasat |
tsc:laboratoare:laborator-08 [2025/05/05 12:04] (current) giorgiana.vlasceanu [Exerciții] |
||
---|---|---|---|
Line 11: | Line 11: | ||
Piramida de Testare este un framework popular care ilustrează proporția diferitelor tipuri de teste într-o strategie de testare software. Ideea este să se concentreze resursele pe automatizarea testelor la niveluri inferioare (teste unitare și de integrare) și să se minimizeze testele E2E (end-to-end), care sunt mai costisitoare. | Piramida de Testare este un framework popular care ilustrează proporția diferitelor tipuri de teste într-o strategie de testare software. Ideea este să se concentreze resursele pe automatizarea testelor la niveluri inferioare (teste unitare și de integrare) și să se minimizeze testele E2E (end-to-end), care sunt mai costisitoare. | ||
- | {{:tsc:laboratoare:it2.png?600|}} | + | {{:tsc:laboratoare:it2.png?599|}} |
Cele 3 niveluri ale piramidei sunt: | Cele 3 niveluri ale piramidei sunt: | ||
- | * | ||
* Testarea Unitară: Baza piramidei. Se concentrează pe componente individuale. Sunt rapide și de obicei automatizate. | * Testarea Unitară: Baza piramidei. Se concentrează pe componente individuale. Sunt rapide și de obicei automatizate. | ||
- | * | ||
* Testarea de Integrare: Nivelul intermediar. Verifică interacțiunile dintre componentele integrate. | * Testarea de Integrare: Nivelul intermediar. Verifică interacțiunile dintre componentele integrate. | ||
- | * | ||
* Testarea E2E: Vârful piramidei. Verifică întregul sistem din perspectiva utilizatorului. Sunt mai puține la număr, mai lente și mai fragile. | * Testarea E2E: Vârful piramidei. Verifică întregul sistem din perspectiva utilizatorului. Sunt mai puține la număr, mai lente și mai fragile. | ||
Line 27: | Line 24: | ||
- Abordarea Incrementală | - Abordarea Incrementală | ||
- | **1. Testarea de Integrare Big Bang** | + | === 1. Testarea de Integrare Big Bang === |
{{:tsc:laboratoare:itbigbang.png?300|}} | {{:tsc:laboratoare:itbigbang.png?300|}} | ||
Line 53: | Line 50: | ||
* Util pentru aplicații simple | * Util pentru aplicații simple | ||
- | ** 2. Testarea de Integrare Incrementală** | + | === 2. Testarea de Integrare Incrementală === |
{{:tsc:laboratoare:itincremental.png?500|}} | {{:tsc:laboratoare:itincremental.png?500|}} | ||
Line 80: | Line 77: | ||
- Hibrid: Se combină cele două abordări | - Hibrid: Se combină cele două abordări | ||
- | Componente low-level: funcții simple, structuri de date. | + | * Componente low-level: funcții simple, structuri de date |
- | Componente de high-level: management utilizatori, procesare comenzi, mecanisme de securitate. | + | * Componente de high-level: management utilizatori, procesare comenzi, mecanisme de securitate |
Exemplu comparativ (site eCommerce): | Exemplu comparativ (site eCommerce): | ||
Line 87: | Line 84: | ||
{{:tsc:laboratoare:ittabel1.png?600|}} | {{:tsc:laboratoare:ittabel1.png?600|}} | ||
- | **1. Testarea Bottom-up** | + | == 1. Testarea Bottom-up == |
{{:tsc:laboratoare:itbottomup.png?600|}} | {{:tsc:laboratoare:itbottomup.png?600|}} | ||
Line 99: | Line 96: | ||
* Componentele high-level nu sunt încă dezvoltate | * Componentele high-level nu sunt încă dezvoltate | ||
- | **2. Testarea Top-down** | + | == 2. Testarea Top-down == |
{{:tsc:laboratoare:ittopdown.png?600|}} | {{:tsc:laboratoare:ittopdown.png?600|}} | ||
Line 111: | Line 108: | ||
* Se dorește validarea rapidă a funcționalităților vizibile | * Se dorește validarea rapidă a funcționalităților vizibile | ||
- | **3. Testarea Hibridă (Sandwich)** | + | == 3. Testarea Hibridă (Sandwich) == |
Se combină top-down și bottom-up. | Se combină top-down și bottom-up. | ||
Line 125: | Line 122: | ||
| | ||
==== Exerciții ==== | ==== Exerciții ==== | ||
+ | |||
+ | Pentru a clona [[https://github.com/cs-pub-ro/systems-testing | repo-ul]] și a accesa resursele aferente laboratorului: | ||
+ | |||
+ | <code bash> | ||
+ | student@tsc:~$ git clone git@github.com:cs-pub-ro/systems-testing.git | ||
+ | student@tsc:~$ cd systems-testing/laboratories | ||
+ | student@tsc:~/laboratories$ cd integration-testing | ||
+ | </code> | ||
+ | |||
+ | Dacă aveți local [[https://github.com/cs-pub-ro/systems-testing | repo-ul]], asigurați-vă că aveți ultima versiune. | ||
+ | |||
+ | <code bash> | ||
+ | student@tsc:~$ cd systems-testing | ||
+ | student@tsc:~$ git pull | ||
+ | </code> | ||
+ | |||
+ | Dacă folosiți un fork al repo-ului, asigurați-vă că este sincronizat cu repo-ul principal. | ||
+ | |||
+ | |||
<note warning> | <note warning> | ||
Line 130: | Line 146: | ||
<code> | <code> | ||
+ | pip install pytest | ||
pip install requests | pip install requests | ||
</code> | </code> | ||
Line 146: | Line 163: | ||
După ce a fost realizată testarea unitara a modulelor aplicației (endpoints, baze de date, s.a.), trebuie să fie validată interacțiunea dintre acestea. Astfel, se dorește să se testeze ca operațiile pe task-uri descrise mai sus se execută cu succes. | După ce a fost realizată testarea unitara a modulelor aplicației (endpoints, baze de date, s.a.), trebuie să fie validată interacțiunea dintre acestea. Astfel, se dorește să se testeze ca operațiile pe task-uri descrise mai sus se execută cu succes. | ||
- | * Implementați un test de integrare pentru operația de creare a unui task. | + | * 1. Implementați un test de integrare pentru operația de creare a unui task. |
- | <note tip>**Hint**: validarea creării unui task presupune 2 request-uri, unul de **PUT** și altul de **GET**, testând interacțiunea dintre clientul web, endpoint-ul web și baza de date în care se stochează task-urile.</note> | + | <note tip>**Hint**: Validarea creării unui task presupune 2 request-uri, unul de **PUT** și altul de **GET**. |
- | <note tip>**Verificare**: validați că request-urile întorc codurile de status **HTTP** corecte (**200** în cazul lui **PUT** și **GET**) și că body-ul răspunsului primit este cel așteptat (în cazul lui **GET**, json-ul din body-ul primit ca răspuns trebuie să conțină task-ul introdus prin acțiunea **PUT**: //content//, //user_id//, //is_done//). </note> | + | |
- | <note tip> **Atenție**: task_id-ul este generat random server-side, astfel că task-id-ul trimis prin operația de **PUT** in create_task este irelevant, iar răspunsul request-ului create_task va conține task-id-ul generat.</note> | + | |
- | * Implementați un test de integrare pentru operația de modificare a unui task. | + | Validați că request-urile întorc codurile de status **HTTP** corecte (**200** în cazul lui **PUT** și **GET**) și că body-ul răspunsului primit este cel așteptat (în cazul lui **GET**, json-ul din body-ul primit ca răspuns trebuie să conțină task-ul introdus prin acțiunea **PUT**: //content//, //user_id//, //is_done//). |
- | * Implementați un test de integrare pentru operația de listare a 3 task-uri. | + | Task_id-ul este generat random server-side, astfel că task-id-ul trimis prin operația de **PUT** in create_task este irelevant, iar răspunsul request-ului create_task va conține task-id-ul generat.</note> |
- | <note tip>**Hint**: Creați 3 task-uri sub același user_id, apoi validați că operația de listare întoarce 3 task-uri.</note> | + | * 2. Implementați un test de integrare pentru operația de modificare a unui task. |
- | <note tip>**Sugestie**: Încercați să generați user_id-uri unice, altfel există șansa ca operația de listare să vă întoarcă task-uri create de colegii voștri. Pentru a genera id-uri unice, puteți folosi modulul de python **uuid**. </note> | + | |
+ | * 3. Implementați un test de integrare pentru operația de listare a 3 task-uri. | ||
+ | <note tip>**Hint**: Creați 3 task-uri sub același user_id, apoi validați că operația de listare întoarce 3 task-uri. | ||
+ | |||
+ | Încercați să generați user_id-uri unice, altfel există șansa ca operația de listare să vă întoarcă task-uri.</note> | ||
+ | |||
+ | * 4. Implementați un test de integrare pentru operația de ștergere a unui task | ||
- | * Implementați un test de integrare pentru operația de ștergere a unui task. | ||
<note tip>**Hint**: Trebuie să validați că după operația de ștergere, un task nu poate fi obținut prin **GET**.</note> | <note tip>**Hint**: Trebuie să validați că după operația de ștergere, un task nu poate fi obținut prin **GET**.</note> | ||
+ | |||
+ | * 5. Implementați câte un test care verifică comportamentul API-ului atunci când se încearcă accesarea (**GET**), modificarea (**UPDATE**) sau ștergerea (**DELETE**) unui task inexistent. | ||
+ | <note tip>**Hint**: Pentru fiecare operație folosiți un task id generat unic pentru a simula un task inexistent. | ||
+ | |||
+ | Pentru **UPDATE** API-ul răspunde cu 200 și creează task-ul dacă nu există deja, puteți verifica ulterior cu **GET**.</note> | ||
+ | |||
+ | |||
+ | * 6. Implementați un test care verifică comportamentul API-ului **create_task** cu date invalide. | ||
+ | <note tip>**Hint**: Puteți folosi un string pentru completarea câmpului is_done. Folosiți-vă de documentație pentru a valida codul de eroare.</note> |