run test cases parallel generate reports using karate tool
Tento tutoriál vysvetľuje, ako vykonávať niektoré základné operácie s API, paralelne spúšťať testovacie prípady a generovať správy pomocou Karate Framework:
Ako sme vytvorili základný testovací skript sme sa naučili v našom predchádzajúcom tutoriáli, teraz môžeme napredovať v učení sa niektorých základných operácií, ktoré je možné vykonať pri práci s API a Karate Framework. Existuje veľa takýchto operácií a v tomto tutoriále si povieme o niekoľkých bežne používaných.
Taktiež sa ponoríme do procesu súbežného spustenia testovacích prípadov pomocou postupného prístupu. Budeme tiež diskutovať o aktuálnom prehľade, ktorý sa generuje automaticky, a porovnáme ho s prehľadom Okurka, ktorý môžeme vygenerovať integráciou doplnku.
Čo sa dozviete:
- Práca s API a nástrojom na testovanie karate
- Spustite testovacie prípady paralelne
- Integrujte doplnok na uhorky na vykazovanie
- Záver
Práca s API a nástrojom na testovanie karate
Ako už bolo spomenuté v predchádzajúcom návode, v .funkcia súbor, ktorý sme vytvorili, mohli sme použiť rôzne kľúčové slová na vykonávanie rôznych operácií s API. Karate framework nám poskytuje niekoľko kľúčových slov, ktoré možno použiť na vykonávanie rôznych akcií.
=> Odporúčané čítanie: Testovanie API s Karate Framework
Vykonávanie rôznych operácií
# 1) Tlač odpovede v konzole
Tlač je kľúčové slovo, ktoré poskytuje Karate Framework na vytlačenie výsledku v konzole alebo v súbore. Jedným z najbežnejších použití je tlač odpovede API. To môže byť pre používateľa veľmi užitočné.
Môžeme to urobiť pomocou nasledujúcich riadkov kódu:
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
Vyššie uvedené riadky kódu poskytnú nasledujúci výstup:
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' } }
Takto môžeme vytlačiť odpoveď API v konzole na účely čítania, ktorú je možné použiť v čase ladenia.
# 2) Deklarovanie premenných
Premenné môžeme deklarovať pomocou kľúčového slova def v rámci Karate a potom kedykoľvek použiť deklarované premenné v kóde.
V nasledujúcom príklade sme k existujúcim pridali niekoľko ďalších riadkov kódu userDetails.feature súbor, ktorý pomáha deklarovať premenné v skripte.
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) Uplatnenie skutočnej odpovede na očakávanú odpoveď
Karate Framework pomáha pri vykonávaní operácií súvisiacich s tvrdením pomocou zápas kľúčové slovo. The zápas je inteligentný, pretože na ňom nezáleží na prázdnom priestore a poradie klávesov nie je dôležité.
Na použitie zhodné kľúčové slovo, musíme použiť znamienko dvojitej rovnosti „==“, ktoré predstavuje porovnanie.
Teraz sa pokúsime rozvinúť niektoré použitia zápas kľúčové slovo.
a) Keď je celá očakávaná odpoveď uvedená v samotnom súbore .feature.
V určitých obdobiach máme niektoré údaje, ktoré by sme chceli okamžite overiť, v samotnom súbore. Takéto typy údajov sa zvyčajne spomínajú pri ladení kódu.
To isté by sme mohli urobiť v samotnom súbore .feature, ako je uvedené nižšie:
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'}}
Ak pošlete žiadosť na adresu URL „Https://reqres.in/api/users/2“ v prehliadači dostanete nasledujúcu odpoveď:
{ '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' } }
Pokúšame sa overiť vyššie uvedenú odpoveď pomocou súboru * .feature.
Použili sme zápas kľúčové slovo poskytované rámcom Karate, ktoré pomáha pri vykonávaní rôznych druhov súborov Tvrdenia v odpovedi API.
Poznámka : Na vykonanie vyššie uvedeného kroku by sme potrebovali transformovať odpoveď API do jedného riadku. Môžete použiť ktorýkoľvek z dostupných nástrojov online.
b) Keď sa očakávaný výstup uchováva v externom súbore JSON.
Vo vyššie uvedenom príklade sme diskutovali o scenári, kde sme mali obmedzené údaje a rovnakú odpoveď, s ktorou sa dalo ľahko manipulovať, ale v skutočných scenároch budeme mať gigantické množiny odpovedí JSON, ktoré budeme musieť vyhodnotiť.
V týchto prípadoch je lepšie ponechať odpoveď v externom súbore a potom ich overiť.
V nasledujúcom príklade si ďalej povieme to isté:
- Je potrebné vytvoriť ExpectedOutput.json súbor v našom priečinku Project, ako je znázornené na nasledujúcom obrázku.
Vytvoriť nový zdroj balíka -> Vytvoriť nový súbor ExpectedOutput.json
Uložte odpoveď JSON do tohto súboru a uložte ju.
Budete musieť napísať nasledujúci kód do vášho userDetails.feature spis:
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
Vo vyššie uvedenom príklade najskôr čítame súbor ExpectedOutput.json a uloženie jeho odpovede do premennej ocakavane vysledky pomocou nasledujúce riadky kódu:
Given expectedResult=read('./resources/ExpectedOutput.json')
Potom vložíme tvrdenie pomocou nasledujúcich riadkov kódu, kde sa zhodujeme s Skutočná odpoveď s ocakavane vysledky odpoveď s „ == ' operátor.
And match response == expectedResult
c) Priraďovanie / overovanie určitých hodnôt z odpovede
Doteraz sme overili celú odpoveď rozhrania API, ale zakaždým, keď nebudete chcieť overiť celú odpoveď. Niekedy by ste chceli vyhodnotiť iba časť odpovede. To isté zvyčajne robíme, keď používame ďalšie nástroje na testovanie API alebo pri vytváraní rámca.
Aby sme tomu porozumeli ďalej, vezmime si ako príklad nasledujúcu odpoveď JSON:
{ 'ad': { 'company': 'StatusCode Weekly' } }
Ak chceme overiť, či je parameter spoločnosti by mala mať hodnotu ako StatusCode týždenne, potom budeme musieť vytvoriť cestu JSON. To je možné vykonať prechádzaním súboru JSON a použitím znaku „.“ (Operátor bodky)
Cesta JSON pre vyššie uvedenú odpoveď bude:
ad.company == “StatusCode týždenne”
Ďalej je uvedený útržok kódu, ktorý nám pomôže pri hodnotení hodnôt pre konkrétny parameter. Tento kód patrí do .funkcia spis.
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'
Nižšie je uvedený riadok kódu, ktorý vykonáva parametrické tvrdenia.
And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
Pomocou cesty JSON vyhodnocujeme hodnoty parametrov.
Vykonávanie operácií po operácii
Doteraz sme pokryli základné scenáre testovania API, keď bola metóda „ ZÍSKAŤ “. Ale keď pracujeme v skutočnom prostredí, musíme na server poslať veľa informácií, takže v takom prípade použijeme „ POST ” metóda .
V tejto časti nájdete prehľad práce so základnou požiadavkou POST.
Poďme si stručne predstaviť parametre, ktoré potrebujeme na odoslanie žiadosti POST.
# 1) Vytvorenie požiadavky POST, keď je telo JSON uvedené v súbore * .feature
- Vytvorte userDetailsPost.feature pomocou podobných krokov uvedených v predchádzajúcom tutoriáli.
- Napíšte nasledujúce riadky kódu:
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
Pretože sa jedná o požiadavku POST, ktorú vždy musí sprevádzať telo, ktoré je potrebné na určitú odpoveď poslať na server, spomenuli sme to v rámci nasledujúcej súčasti:
požiadavka: Berie telo JSON ako požiadavku, ktorá sa vyžaduje pri metóde POST.
# 2) Vytvorenie požiadavky POST, keď je telo JSON uvedené v externom súbore
Zvyčajne budeme mať obrovský orgán žiadostí, čo by bolo ťažké spomenúť v dokumente * .funkcia spis. Je preto lepšie ponechať ho v externom súbore.
- Je potrebné vytvoriť súbor PostBody.json v našom priečinku Project, ako je uvedené nižšie. Vytvorte nový zdroj balíka -> Vytvorte nový súbor PostBody.json a uložte telo JSON do tohto súboru a uložte ho.
Poznámka: Vo vyššie uvedenom súbore JSON sme spomenuli telo metódy POST.
- Nasledujúci kód by ste museli napísať do svojho userDetailsPost .funkcia spis:
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
Čítame telo JSON z PostBody.json pomocou nasledujúcich riadkov kódu:
Given postBody=read('./resources/PostBody.json')
Poznámka: Všetko userDeatils.feature súbory, ktoré sme doteraz vytvorili, budú vyžadovať základné TestRunner.java súbor na ich vykonanie, ktorý sme vytvorili v našom výučbe základného testovacieho skriptu, ako je uvedené nižšie:
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
Spustite testovacie prípady paralelne
Teraz, keď sme sa naučili kroky na vytvorenie základného testovacieho skriptu a vykonali sme niektoré základné operácie s API, je čas začať s prácou v skutočnom prostredí.
Zvyčajne musíme testovacie prípady spustiť paralelne, aby sa vykonanie zrýchlilo. V zásade ide o to, získať väčší výkon za kratší čas.
Toto je základná vlastnosť rámca a nezávisí od JUnit, Maven alebo Grade. Umožňuje nám to:
- Ľahko si vyberte funkcie a značky na spustenie testovacích balíkov jednoduchým spôsobom.
- Zobrazte paralelné výsledky v priečinku surefire-plugin.
- Môžeme dokonca integrovať správy JSON Cucumber pre lepšie užívateľské rozhranie (o ktorých sa bude čoskoro rozprávať).
V Karate Framework nemusíme robiť veľa krokov, aby sme spustili paralelné vykonávanie našich testovacích prípadov. Potrebujeme len prejsť nasledujúcimi krokmi:
1) Teraz musíme zmeniť TestRunner.java súbor, ktorý sme doteraz používali. Kód pre paralelné vykonávanie je potrebné zapísať do vyššie uvedeného súboru.
Pri paralelnom vykonávaní kódu nezabudnite na nasledujúci riadok:
otázky a odpovede na pohovor s podporou pre počítač na úrovni l1
** Keď sa snažíme pracovať v paralelnom prostredí, nemôžeme použiť anotáciu @RunWith (Karate.class).
Otvorte originál TestRunner.java súbor a teraz použite nasledujúci kód:
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); } }
** Nasledujúci kód sa bude vzťahovať na Závislosť JUnit 4 Maven
Vo vyššie uvedenom útržku kódu sme zahrnuli riadok kódu uvedený nižšie.
Výsledky výsledkov = Runner.parallel (getClass (), 5);
Tento riadok dáva pokyn na spustenie inštancie testovacích prípadov paralelne dynamickým načítaním tried za behu.
dva) Vytvorte duplikát userDetails.feature súbor, ako je uvedené nižšie pod src / test / java priečinok.
Teraz sme všetci pripravení na paralelné vykonávanie s dva . Vlastnosti spis.
3) Ísť do TestRunner.java súbor vytvorený v kroku vyššie a spustiť ako Test JUnit. Týmto vykonáme naše testovacie prípady v paralelnom formáte.
Pre ľahšiu čitateľnosť sú niektoré informácie poskytované konzolou Karate Framework vždy, keď je vykonanie testu dokončené.
Výsledok vyzerá asi takto:
Pri paralelnom spustení sa všetky funkcie spustia v paralelnom režime a scenáre sa tiež spustia v paralelnom formáte.
Podľa vyššie uvedených krokov budete môcť pomocou Karate Framework spustiť úplne základné Parallel Execution of the API Test.
** O paralelnom testovaní môžete študovať prechodom cez rôzne filtre na stránke Paralelné vykonávanie
Integrujte doplnok na uhorky na vykazovanie
Ako používame Bežec JUnit na vykonanie rôznych scenárov, ktoré boli spomenuté v rôznych * .funkcia automaticky vytvorí správu pre každý zo súborov funkcií, ktoré sú uložené v ceste cieľové / spoľahlivé správy.
Generuje a Základný prehľad vo formáte používateľského rozhrania za predloženie vykonaných testovacích prípadov.
Ale správy, ktoré sa generujú, nie sú z hľadiska používateľského rozhrania príliš príjemné. Na zdieľanie správ so zainteresovanými stranami potrebujeme niečo, čo je užívateľsky prívetivejšie a ľahšie pochopiteľné.
Na dosiahnutie takého formátu výkazníctva poskytuje Karate Framework možnosť integrácie Doplnok na hlásenie uhoriek čo nám pomôže pri generovaní graficky naformátovanej správy, ktorá bude viac prezentovateľná.
Nasledujú kroky na integráciu tých istých:
# 1) Pridajte nasledujúce Hlásenie uhoriek závislosť na vašom POM.xml
net.masterthought cucumber-reporting 3.8.0 test
#dva) Upravte súbor TestRunner.java, ak existuje iba jeden * .funkcia súbor v projekte.
Musíme aktualizovať náš súbor TestRunner.java pomocou nasledujúcej metódy generateReport () pre doplnok Cucumber.
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(); } }
V kóde uvedenom vyššie vykonávame nasledujúce akcie:
- Vytvára sa nová inštancia súboru
- Poskytnutie cesty na uloženie súborov v cieľovom priečinku
- Vytvorenie objektu ReportBuilder, ktorý vytvorí novú správu o uhorke
Poznámka : Vyššie uvedený kód funguje dobre, keď máme singel *. vlastnosť súbor v našom projekte.
# 3) Ak existujú, upravte súbor TestRunner.java viacnásobná * .funkcia súbory v projekte.
Potrebovali by sme pridať riadok kódu (zvýraznený tučným písmom nižšie), aby sme zaistili, že bude postarané o paralelné vykonávanie, zatiaľ čo sa budú vykonávať scenáre pre generovanie správy.
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(); } }
Po vykonaní vyššie uvedených krokov budeme môcť úspešne vytvoriť dobre znázornenú správu grafického používateľského rozhrania pomocou nástroja Uhorka - hlásenie zapojiť.
Správu môžeme nájsť na nasledujúcej ceste v našom projekte, ako je to znázornené na obrázku nižšie:
Nasledujúca správa bola vygenerovaná pre náš projekt a pre všetky operácie, ktoré sme doteraz vykonávali v tomto výukovom programe Karate Framework:
Záver
Aby sme to zhrnuli, v tomto výučbe sme diskutovali o základných operáciách, ktoré sú užitočné pri každodennom práci pri práci s Karate Framework a ako vykonať viac súborov * .feature paralelne. Naučili sme sa tiež vytvárať grafickú správu pre používateľov používajúcich Hlásenie uhoriek zapojiť.
Najskôr sme diskutovali o základných operáciách, ktoré je možné s API vykonať. Diskutovali sme o tom, ako môžeme poslať telo / požiadavku POST na server, a to buď uvedením tela v samotnom súbore * .feature (čo zvyčajne nie je odporúčaný postup), alebo použitím externého súboru (odporúčaný postup, aby sme udržiavať čistý kód).
Po druhé, po vykonaní niekoľkých základných krokov sme mohli úspešne vykonať výsledok testu pre dvoch * .funkcia súbory, ktoré sa spúšťali paralelne, iba pridaním niekoľkých riadkov kódu do priečinka TestRunner.java súbor umožňujúci spustenie paralelného chodu.
Ďalej sme sa naučili, ako transformovať natívny prehľad testu JUnit na správu o uhorke integráciou Hlásenie uhoriek zapojiť. Doplnok nám umožňuje generovať prehľady, ktoré majú lepšie používateľské rozhranie, sú pre používateľa oveľa zrozumiteľnejšie, a teda poskytujú lepšiu používateľskú skúsenosť zainteresovaným stranám, s ktorými sú tieto správy zdieľané.
Teraz by ste už mali byť schopní vykonávať základné operácie, paralelne spúšťať testovacie prípady a generovať ľahko čitateľnú správu pre používateľov.
Odporúčané čítanie
- Výukový program pre karate framework: Automatické testovanie API s karate
- 10 najlepších nástrojov na testovanie API v roku 2021 (nástroje na testovanie SOAP a REST API)
- Ako spustiť uhorku s Jenkinsom: Návod s príkladmi
- Sprievodca generovaním rozsahu správ v selenovom webovom ovládači
- Hlásenie Specflow: Ako generovať protokoly o testoch a vykonávať selektívne testy
- Ako spravovať požiadavky, vykonávať testovacie prípady a generovať správy pomocou TestLink - tutoriál # 2
- Paralelné spustenie testov Appium pomocou aplikácie Appium Studio pre Eclipse
- Ako paralelne spustiť rozsiahle vykonávanie testov Appium