run test cases parallel generate reports using karate tool
Acest tutorial explică cum să efectuați câteva operații de bază pe API, să executați cazuri de testare în paralel și să generați rapoarte cu Karate Framework:
Am învățat cum să creăm un script de test de bază în tutorialul nostru anterior, acum putem continua să învățăm câteva operații de bază care pot fi efectuate în timp ce lucram cu API-ul și Karate Framework. Există multe astfel de operații și vom discuta câteva dintre cele utilizate în mod obișnuit în acest tutorial.
De asemenea, vom aprofunda procesul de rulare a cazurilor de testare în paralel, urmând o abordare pas cu pas. De asemenea, vom discuta raportul curent care este generat automat și îl vom compara cu raportul Castravete pe care îl putem genera prin integrarea unui plugin.
Ce veți învăța:
- Lucrul cu instrumentul de testare API și karate
- Rulați cazuri de testare în paralel
- Integrarea pluginului Castravete pentru raportare
- Concluzie
Lucrul cu instrumentul de testare API și karate
După cum sa discutat în tutorialul anterior, în .caracteristică fișierul pe care l-am creat, am putea folosi cuvinte cheie diferite pentru a efectua operațiuni diferite pe API. Karate framework ne oferă mai multe cuvinte cheie care pot fi utilizate pentru a efectua diferite acțiuni.
=> Citire recomandată: Testarea API cu Karate Framework
Efectuarea diferitelor operațiuni
# 1) Imprimarea răspunsului în consolă
Imprimare este un cuvânt cheie oferit de Karate Framework pentru a imprima rezultatul în consolă sau fișier. Una dintre cele mai frecvente utilizări este imprimarea răspunsului API-ului. Acest lucru poate fi foarte util pentru utilizator.
Putem face acest lucru folosind următoarele linii de cod:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword# Then print response
Liniile de cod de mai sus vor da următorul rezultat:
18:15:44.495 (main) INFO com.intuit.karate - (print) { 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
Acesta este modul în care putem imprima răspunsul API-ului în consolă în scopul citirii, care poate fi utilizat în momentul depanării.
# 2) Declararea variabilelor
Putem declara variabilele folosind cuvântul cheie def în cadrul Karate și apoi utilizați variabilele declarate în cod ori de câte ori este necesar.
În exemplul de mai jos, am adăugat câteva linii de cod la cele existente userDetails.feature fișier pentru a ajuta la declararea variabilelor din script.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #We are printing the Response of the API using the print keyword Then print response # Declaring and assigning a string value: Given def varName = 'value' # using a variable Then print varName
# 3) Afirmarea răspunsului efectiv la răspunsul așteptat
Karate Framework ajută la efectuarea operațiunilor legate de afirmare folosind Meci cuvânt cheie. Meci este inteligent deoarece spațiul alb nu contează pentru el și ordinea tastelor nu este importantă.
Pentru utilizare potrivire cuvânt cheie, trebuie să folosim semnul dublu-egal „==” care reprezintă o comparație.
Acum vom încerca să dezvoltăm câteva utilizări ale Meci cuvânt cheie.
a) Când întregul răspuns așteptat este menționat în fișierul .feature în sine.
În anumite momente avem câteva date pe care am dori să le validăm imediat în fișierul în sine. De obicei, astfel de tipuri de date sunt menționate în timpul depanării codului.
Am putea face același lucru în fișierul .feature în sine, așa cum se arată mai jos:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Asserting the reponse #response variable is holding the Actual response from API #Right hand side value is holding the expected Response And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name':'Janet', 'email':'janet.weaver@reqres.in'}}
Dacă trimiteți o solicitare la adresa URL „Https://reqres.in/api/users/2” apoi în browser veți primi următorul răspuns:
{ 'ad': { 'company': 'StatusCode Weekly', 'text': 'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url': 'http://statuscode.org/' }, 'data': { 'last_name': 'Weaver', 'id': 2, 'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name': 'Janet', 'email': 'janet.weaver@reqres.in' } }
Încercăm să validăm răspunsul menționat mai sus folosind fișierul * .feature.
Am folosit Meci cuvânt cheie oferit de Karate Framework, care ajută la efectuarea diferitelor tipuri de Afirmații în răspunsul API.
Notă : Ar trebui să transformăm răspunsul API într-o singură linie pentru a efectua pasul de mai sus. Puteți utiliza oricare dintre instrumentele disponibile pe net.
b) Când ieșirea așteptată este păstrată într-un fișier JSON extern.
În exemplul de mai sus, am discutat un scenariu în care aveam date limitate și același răspuns ușor de gestionat, dar în scenariile reale, vom avea seturi gigantice de răspunsuri JSON pe care ar trebui să le evaluăm.
Deci, în aceste cazuri, este mai bine să păstrați răspunsul în fișierul extern și apoi să verificați același lucru.
În exemplul de mai jos vom discuta în continuare despre același lucru:
- Trebuie să creați un ExpectedOutput.json în dosarul nostru Proiect așa cum se arată în imaginea de mai jos.
Creați o nouă resursă de pachet -> Creați un fișier nou ExpectedOutput.json
Și stocați răspunsul JSON în acest fișier și salvați-l.
Trebuie să scrieți următorul cod în userDetails.feature fişier:
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly','text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.','url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg','first_name': 'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult
În exemplul de mai sus, citim mai întâi fișierul ExpectedOutput.json și stocarea răspunsului acestuia în variabilă rezultat asteptat folosind următoarele linii de cod:
Given expectedResult=read('./resources/ExpectedOutput.json')
Apoi, punem Aserția folosind următoarele linii de cod, unde potrivim Răspunsul real cu rezultat asteptat răspuns cu „ == ' operator.
And match response == expectedResult
c) Potrivirea / verificarea anumitor valori din răspuns
Până acum am verificat întregul răspuns al API-ului, dar de fiecare dată nu ați dori să verificați întregul răspuns. Uneori, doriți să evaluați doar o parte din răspuns. De obicei, facem același lucru atunci când folosim celelalte instrumente pentru testarea API sau în timp ce creăm un cadru.
Pentru a o înțelege mai departe, să luăm ca exemplu următorul răspuns JSON:
{ 'ad': { 'company': 'StatusCode Weekly' } }
Dacă vrem să verificăm dacă parametrul companie ar trebui să aibă valoarea ca StatusCode săptămânal, atunci va trebui să creăm o cale JSON. Acest lucru se poate face prin parcurgerea fișierului JSON și folosirea „.” (Operator punct)
Calea JSON pentru răspunsul de mai sus va fi:
ad.company == „StatusCode Weekly”
Mai jos este fragmentul de cod care ne va ajuta în evaluarea valorilor pentru parametrul respectiv. Acest cod aparține fișierului .caracteristică fişier.
Feature: fetching User Details Scenario: testing the get call for User Details Given url 'https://reqres.in/api/users/2' When method GET Then status 200 #Verifying the JSON response by providing same in feature file And match response == {'ad':{'company':'StatusCode Weekly', 'text':'A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things.', 'url':'http://statuscode.org/'},'data':{'last_name':'Weaver','id':2,'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg', 'first_name':'Janet','email':'janet.weaver@reqres.in'}} #Reading the file ExpectedOutput.json and storing same response in variable expectedResult Given expectedResult=read('./resources/ExpectedOutput.json') #Asserting the Actual Response with the Expected Response And match response == expectedResult ##Creating JSON path to verify the values of particular parameters## And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
Mai jos este linia de cod, care efectuează afirmațiile parametrice.
And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
Folosind calea JSON, evaluăm valorile parametrilor.
Efectuarea de operațiuni post
Până acum am acoperit scenariile de bază ale testării unui API atunci când metoda era „ OBȚINE'. Dar când lucrăm în mediul real, trebuie să trimitem multe informații către server, așa că, în acest caz, folosim „ POST' metodă .
Această secțiune vă va oferi o perspectivă despre lucrul cu cererea de bază POST.
Să primim câteva idei scurte despre parametrii de care avem nevoie pentru trimiterea cererii POST.
# 1) Crearea unei cereri POST, când corpul JSON este menționat în fișierul * .feature
- Creați un userDetailsPost.feature utilizând pașii similari menționați în tutorialul anterior.
- Scrieți următoarele linii de cod:
Feature: Posting User Details Scenario: testing the POST call for User Creation Given url 'https://reqres.in/api/users' And request '{'name': 'morpheus','job': 'leader'}' When method POST Then status 201
Deoarece este o cerere POST, care trebuie întotdeauna să fie însoțită de un corp care trebuie trimis la server pentru un anumit răspuns, am menționat că sub următoarea componentă:
cerere: Este nevoie de un corp JSON ca cerere care este necesară cu metoda POST.
# 2) Crearea unei cereri POST, atunci când corpul JSON este menționat într-un fișier extern
De obicei, vom avea un corp imens de solicitare, ceea ce ar fi dificil de menționat în *.caracteristică fişier. Deci, este mai bine să îl păstrați în fișierul extern.
- Trebuie să creați un fișier PostBody.json în folderul nostru Project așa cum se arată mai jos. Creați o nouă resursă de pachet -> Creați un fișier nou PostBody.json și stocați corpul JSON în acest fișier și salvați-l.
Notă: Am menționat Corpul metodei POST în fișierul JSON de mai sus.
- Trebuie să scrieți următorul cod în userDetailsPost .caracteristică fişier:
Feature: Posting User Details Scenario: testing the POST call for User Creation using External File Given url 'https://reqres.in/api/users' Given postBody=read('./resources/PostBody.json') And request postBody When method POST Then status 201
Citim corpul JSON din PostBody.json folosind următoarele linii de cod:
Given postBody=read('./resources/PostBody.json')
Notă: Toate userDeatils.feature fișierele pe care le-am creat până acum vor necesita elementele de bază TestRunner.java pentru a le executa, pe care le-am creat în tutorialul nostru Basic Test Script, după cum se arată mai jos:
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
Rulați cazuri de testare în paralel
Acum, deoarece am învățat pașii pentru a crea un script de test de bază și am efectuat câteva operații de bază pe API, este timpul să începem să lucrăm în mediul real.
De obicei, trebuie să rulăm cazurile de test în paralel, pentru a face execuția mai rapidă. Practic, ideea este de a obține mai multe rezultate în mai puțin timp.
Aceasta este o caracteristică de bază a cadrului și nu depinde de JUnit, Maven sau Grade. Ne permite:
- Alegeți cu ușurință caracteristicile și etichetele pentru a rula suitele de testare într-un mod simplu.
- Vizualizați rezultatele paralele în folderul surefire-plugin.
- Putem chiar să integrăm rapoartele JSON Cucumber pentru o mai bună interfață (despre care vom discuta în scurt timp).
În Karate Framework, nu este nevoie să efectuăm mulți pași, pentru a începe executarea în paralel a cazurilor noastre de testare. Trebuie doar să parcurgem următorii pași:
1) Acum trebuie să schimbăm TestRunner.java fișier pe care l-am folosit până acum. Codul pentru execuția paralelă trebuie scris în fișierul de mai sus.
Rețineți următoarea linie, în timp ce executați codul în paralel:
companii de dezvoltare web de top din India
** Nu putem folosi adnotarea @RunWith (Karate.class) atunci când încercăm să lucrăm într-un mediu paralel.
Deschideți originalul TestRunner.java fișier și utilizați următorul cod acum:
import com.intuit.karate.Results; import com.intuit.karate.Runner; import org.junit.Test; // important: do not use @RunWith(Karate.class) ! public class TestRunner { @Test public void testParallel() { Results results = Runner.parallel(getClass(),5); } }
** Următorul cod va fi aplicabil pentru Dependența JUnit 4 Maven
În fragmentul de cod de mai sus, am inclus linia de cod de mai jos-
Rezultate rezultate = Runner.parallel (getClass (), 5);
Această linie instruiește să ruleze instanța cazurilor de testare în paralel prin preluarea dinamică a claselor la Runtime.
2) Creați un duplicat userDetails.feature după cum se menționează mai jos în src / test / java pliant.
Acum suntem cu toții pregătiți pentru execuția paralelă cu Două . Caracteristici fişier.
3) Mergi la TestRunner.java fișier creat în pasul de mai sus și rulați-l ca JUnit Test. Cu aceasta, vom executa cazurile noastre de testare în format paralel.
Pentru o ușurință lizibilitate, unele informații sunt prezentate de Karate Framework în consolă, ori de câte ori este finalizată executarea testului.
Rezultatul seamănă cu următorul:
Odată cu execuția paralelă, toate caracteristicile se vor executa în paralel și scenariile vor rula într-un format paralel.
Urmând pașii de mai sus, veți putea începe Executarea paralelă de bază a testului API, folosind Karate Framework.
** Puteți studia despre testarea paralelă parcurgând diferitele filtre de pe pagină Execuție paralelă
Integrarea pluginului Castravete pentru raportare
Pe măsură ce folosim Alergător JUnit pentru executarea diferitelor scenarii care au fost menționate în diferite *.caracteristică , creează automat un raport pentru fiecare dintre fișierele de caracteristici care sunt stocate în cale target / surefire-reports.
Generează un Raport formatat de UI de bază pentru prezentarea cazurilor de testare care au fost executate.
Dar, rapoartele care sunt generate nu sunt foarte plăcute în ceea ce privește interfața de utilizare și, pentru a partaja rapoarte cu părțile interesate, avem nevoie de ceva care să fie mai ușor de utilizat și ușor de înțeles.
Pentru a realiza un astfel de format de raportare, Karate Framework oferă o opțiune de integrare Plugin de raportare a castraveților ceea ce ne va ajuta să generăm un raport formatat grafic, care va fi mai prezentabil.
Următorii pași pentru integrarea aceluiași:
# 1) Adăugați următoarele Castravete-Raportare dependență de POM.xml
net.masterthought cucumber-reporting 3.8.0 test
#Două) Editați fișierul TestRunner.java atunci când există doar un singur *.caracteristică fișier în proiect.
Trebuie să ne actualizăm fișierul TestRunner.java, cu următoarea metodă generateReport () pentru pluginul Castravete.
public class TestRunner { @Test public void testParallel() { generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String() {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
În codul menționat mai sus, efectuăm următoarele acțiuni:
- Crearea unei noi instanțe de fișier
- Furnizarea căii de stocare a fișierelor sub folderul țintă
- Crearea unui obiect ReportBuilder care va crea un nou raport Castravete
Notă : Codul de mai sus funcționează bine atunci când avem single *. caracteristică fișier în proiectul nostru.
# 3) Editați fișierul TestRunner.java când există multiple * .funcție fișiere din proiect.
Ar trebui să adăugăm o linie de cod (evidențiată cu caractere aldine mai jos) pentru a ne asigura că executarea paralelă este asigurată, în timp ce scenariile sunt executate pentru generarea raportului.
public class TestRunner { @Test public void testParallel() { System.setProperty('karate.env', 'demo'); // ensure reset if other tests (e.g. mock) had set env in CI Results results = Runner.parallel(getClass(),5); generateReport(results.getReportDir()); assertTrue(results.getErrorMessages(), results.getFailCount() == 0); } public static void generateReport(String karateOutputPath) { Collection jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String() {'json'}, true); final List jsonPaths = new ArrayList(jsonFiles.size()); jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath())); Configuration config = new Configuration(new File('target'), 'demo'); ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config); reportBuilder.generateReports(); } }
După efectuarea pașilor menționați mai sus, vom putea crea cu succes un raport UI grafic bine reprezentat folosind Castravete - raportare conecteaza.
Raportul îl putem găsi la următoarea cale din proiectul nostru, așa cum se arată în imaginea de mai jos:
Următorul raport a fost generat pentru proiectul nostru, pentru toate operațiunile pe care le-am efectuat până acum în acest tutorial cadru Karate:
Concluzie
Pentru a rezuma, în acest tutorial am discutat despre operațiunile de bază care sunt utile în fiecare zi în timp ce lucrăm cu Cadrul Karate și cum să executați mai multe fișiere cu caracteristici în paralel. De asemenea, am învățat să creăm un raport grafic pentru utilizatorii care utilizează Raportarea castravetilor conecteaza.
În primul rând, am discutat despre operațiunile de bază care pot fi efectuate pe API. Am discutat despre modul în care putem trimite corpul / cererea POST către server, fie menționând corpul în fișierul * .feature în sine (care de obicei nu este o practică recomandată), fie folosind un fișier extern (o practică recomandată, pentru a mențineți un cod curat).
În al doilea rând, după ce am urmat câțiva pași de bază, am putea executa cu succes rezultatul testului pentru doi *.caracteristică fișiere care au fost executate în paralel, doar prin adăugarea câtorva linii de cod în TestRunner.java fișier care permite inițierea executării paralele.
În plus, am învățat cum să transformăm raportul nativ Test JUnit într-un raport de Castravete prin integrarea Raportarea castravetilor conecteaza. Pluginul ne permite să generăm rapoarte care au o interfață de utilizare mai bună, sunt mult mai ușor de înțeles pentru utilizator și, prin urmare, oferă o experiență de utilizare mai bună pentru părțile interesate cu care aceste rapoarte sunt partajate.
Până acum, ar trebui să puteți efectua unele operațiuni de bază, să rulați cazurile de testare în paralel și să generați un raport ușor de citit pentru utilizatori.
Lectură recomandată
- Tutorial Karate Framework: Testare API automată cu Karate
- Cele mai bune 10 instrumente de testare API în 2021 (SOAP și REST API Testing Tools)
- Cum să rulați castravete cu Jenkins: tutorial cu exemple
- Ghid pentru generarea de rapoarte de extindere în Selenium WebDriver
- Raportare Specflow: Cum se generează rapoarte de testare și se execută teste selective
- Cum să gestionați cerințele, să executați cazuri de testare și să generați rapoarte folosind TestLink - Tutorialul nr. 2
- Rularea testelor Appium în paralel utilizând Appium Studio pentru Eclipse
- Cum se execută executarea pe scară largă a testelor Appium în paralel