Differences

This shows you the differences between two versions of the page.

Link to this comparison view

tsc:laboratoare:laborator-08 [2025/04/23 14:57]
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|}}
  
 Se începe cu modulele low-level și se urcă treptat. De exemplu: de la „tricouri” → „haine bărbați” → „îmbrăcăminte”. Se începe cu modulele low-level și se urcă treptat. De exemplu: de la „tricouri” → „haine bărbați” → „îmbrăcăminte”.
Line 97: 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|}}
  
 Se pornește de la modulele high-level către cele low-level. Oferă o imagine de ansamblu devreme în proiect. Se pornește de la modulele high-level către cele low-level. Oferă o imagine de ansamblu devreme în proiect.
Line 107: 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 121: 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 126: Line 146:
  
 <​code>​ <​code>​
 +pip install pytest
 pip install requests pip install requests
 </​code>​ </​code>​
Line 142: 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 ​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>​
tsc/laboratoare/laborator-08.1745409431.txt.gz · Last modified: 2025/04/23 14:57 by ionut_vladut.pasat
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0