run test cases parallel generate reports using karate tool
V tej vadnici je razloženo, kako izvesti nekatere osnovne operacije na API-ju, vzporedno izvajati testne primere in ustvarjati poročila s Karate Framework:
V prejšnji vadnici smo se naučili, kako ustvariti osnovni testni skript, zdaj lahko nadaljujemo z učenjem nekaterih osnovnih operacij, ki jih je mogoče izvesti med delom z API-jem in Karate Framework-om. Takšnih operacij je veliko in v tej vadnici bomo obravnavali nekaj najpogosteje uporabljenih.
V postopek vzporednega izvajanja testnih primerov se bomo poglobili tudi po postopnem pristopu. Razpravljali bomo tudi o trenutnem poročilu, ki se ustvari samodejno, in ga primerjali s poročilom o kumarah, ki ga lahko ustvarimo z integracijo vtičnika.
Kaj se boste naučili:
- Delo z API-jem in orodjem za testiranje karateja
- Zaženite testne primere vzporedno
- Vključite vtičnik za kumare za poročanje
- Zaključek
Delo z API-jem in orodjem za testiranje karateja
Kot je razloženo v prejšnji vadnici, v .feature datoteko, ki smo jo ustvarili, smo lahko uporabili različne ključne besede za izvajanje različnih operacij v API-ju. Karate framework nam ponuja več ključnih besed, s katerimi lahko izvajamo različna dejanja.
=> Priporočeno branje: Preizkušanje API-ja z ogrodjem karateja
Izvajanje različnih operacij
# 1) Tiskanje odziva v konzoli
Natisni je ključna beseda, ki jo ponuja Karate Framework za tiskanje rezultata v konzoli ali datoteki. Ena najpogostejših načinov uporabe je tiskanje odziva API-ja. To je lahko zelo koristno za uporabnika.
To lahko storimo z uporabo naslednjih vrstic kode:
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
Zgornje vrstice kode bodo dale naslednji izhod:
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' } }
Tako lahko natisnemo odziv API-ja v konzoli z namenom branja, ki ga lahko uporabimo v času odpravljanja napak.
# 2) Prijava spremenljivk
Spremenljivke lahko prijavimo s ključno besedo def v okviru Karateja in nato po potrebi uporabite deklarirane spremenljivke v kodi.
V spodnjem primeru smo obstoječim dodali še nekaj vrstic kode userDetails.feature datoteka za pomoč pri razglasitvi spremenljivk v skriptu.
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) Uveljavitev dejanskega odziva na pričakovani odziv
Karate Framework pomaga pri izvajanju operacij, povezanih z uveljavljanjem, z uporabo tekmo ključna beseda. The tekmo je pameten, ker presledek zanj ni pomemben in vrstni red tipk ni pomemben.
Za uporabo ujemanje ključne besede, uporabiti moramo dvojni enak znak '==', ki predstavlja primerjavo.
Zdaj bomo poskušali podrobneje opisati nekatere načine uporabe tekmo ključna beseda.
a) Ko je celoten pričakovani odgovor omenjen v sami datoteki .feature.
V določenih trenutkih imamo nekaj podatkov, ki bi jih radi takoj preverili v sami datoteki. Običajno so takšne vrste podatkov omenjene med razhroščevanjem kode.
Enako bi lahko storili v sami datoteki .feature, kot je prikazano spodaj:
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'}}
Če pošljete zahtevo na URL ‘Https://reqres.in/api/users/2’ v brskalniku, nato dobili boste naslednji odgovor:
{ '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' } }
Zgoraj omenjeni odgovor poskušamo potrditi z datoteko * .feature.
Uporabili smo tekmo ključno besedo, ki jo zagotavlja Karate Framework, ki pomaga pri izvajanju različnih vrst Trditve v odgovoru API.
Opomba : Za izvedbo zgornjega koraka bi morali odziv API spremeniti v eno vrstico. Uporabite lahko katero koli razpoložljivo orodje na spletu.
b) Ko se pričakovani izhod hrani v zunanji datoteki JSON.
V zgornjem primeru smo razpravljali o scenariju, v katerem smo imeli omejene podatke in enak odziv, ki ga je bilo enostavno obvladati, v resničnih scenarijih pa bomo imeli ogromne nabore odgovorov JSON, ki jih bomo morda morali oceniti.
Torej je v teh primerih bolje, da odgovor shranite v zunanji datoteki in nato isto preverite.
V spodnjem primeru bomo nadalje razpravljali o istem:
- Treba je ustvariti ExpectedOutput.json v mapi Project, kot je prikazano na spodnji sliki.
Ustvari nov vir paketa -> Ustvari novo datoteko ExpectedOutput.json
V to datoteko shranite odgovor JSON in ga shranite.
V kodo bi morali napisati naslednjo kodo userDetails.feature mapa:
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
V zgornjem primeru najprej beremo datoteko ExpectedOutput.json in shranjevanje njegovega odziva v spremenljivko pričakovani rezultati uporabljati naslednje vrstice kode:
Given expectedResult=read('./resources/ExpectedOutput.json')
Nato postavimo trditev z naslednjimi vrsticami kode, kjer primerjamo Dejanski odgovor z pričakovani rezultati odgovor z „ == ' operater.
And match response == expectedResult
c) Ujemanje / preverjanje določenih vrednosti iz odgovora
Do zdaj smo preverili celoten odziv API-ja, vendar vsakič ne želite preveriti celotnega odziva. Včasih bi radi ocenili le del odziva. Ponavadi enako storimo, ko uporabljamo druga orodja za testiranje API-ja ali med ustvarjanjem ogrodja.
Za nadaljnje razumevanje vzemimo za primer naslednji odgovor JSON:
{ 'ad': { 'company': 'StatusCode Weekly' } }
Če želimo preveriti, ali je parameter podjetje mora imeti vrednost kot StatusCode Tedensko, potem bomo morali ustvariti pot JSON. To lahko storite tako, da prehodite datoteko JSON in uporabite '.' (Operator pik)
Pot JSON za zgornji odgovor bo:
ad.company == “StatusCode Weekly”
Spodaj je delček kode, ki nam bo pomagal pri ocenjevanju vrednosti za določen parameter. Ta koda pripada .feature mapa.
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'
Spodaj je vrstica kode, ki izvaja parametrične trditve.
And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
Z uporabo poti JSON ocenjujemo vrednosti za parametre.
Izvajanje poštnih operacij
Do zdaj smo pokrivali osnovne scenarije testiranja API-ja, ko je bila metoda » GET '. Ko pa delamo v realnem okolju, moramo strežniku poslati veliko informacij, zato v tem primeru uporabimo » OBJAVI ' metoda .
Ta razdelek vam bo dal vpogled v delo z osnovno zahtevo POST.
Pridobimo nekaj kratkih idej o parametrih, ki jih potrebujemo za pošiljanje zahteve POST.
# 1) Ustvarjanje zahteve POST, ko je telo JSON omenjeno v datoteki * .feature
- Ustvarite userDetailsPost.feature s podobnimi koraki, omenjenimi v prejšnji vadnici.
- Napišite naslednje vrstice kode:
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
Ker gre za zahtevo POST, ki mora biti vedno opremljena s telesom, ki ga je treba poslati strežniku za določen odgovor, smo to omenili pod naslednjo komponento:
prošnja: Za zahtevo, ki je potrebna pri metodi POST, je treba uporabiti telo JSON.
# 2) Ustvarjanje zahteve POST, ko je telo JSON omenjeno v zunanji datoteki
Običajno bomo imeli ogromno zaprosila, kar bi bilo težko omeniti v * .značilnost mapa. Zato je bolje, da ga hranite v zunanji datoteki.
- V mapi Project morate ustvariti datoteko PostBody.json, kot je prikazano spodaj. Ustvari nov vir paketa -> Ustvari novo datoteko PostBody.json in shrani telo JSON v to datoteko ter jo shrani.
Opomba: Metodo Body of POST smo omenili v zgornji datoteki JSON.
- V svoj userDetailsPost bi morali napisati naslednjo kodo .feature mapa:
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
Telo JSON beremo iz PostBody.json z uporabo naslednjih vrstic kode:
Given postBody=read('./resources/PostBody.json')
Opomba: Vse userDeatils.feature datoteke, ki smo jih ustvarili do zdaj, zahtevajo osnovno TestRunner.java datoteko za njihovo izvajanje, ki smo jo ustvarili v naši vadnici Basic Test Script, kot je prikazano spodaj:
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
Zaženite testne primere vzporedno
Zdaj, ko smo se naučili korakov za ustvarjanje osnovnega preizkusnega skripta in izvedli nekaj osnovnih operacij na API-ju, je čas, da začnemo z delom v dejanskem okolju.
Običajno moramo testne primere izvajati vzporedno, da je izvedba hitrejša. V bistvu je ideja, da bi dobili več rezultatov v krajšem času.
To je bistvena značilnost ogrodja in ni odvisna od JUnit, Maven ali Grade. Omogoča nam:
- Preprosto izberite funkcije in oznake za zagon testnih zbirk.
- Oglejte si vzporedne rezultate v mapi vtičnikov.
- Za boljši uporabniški vmesnik lahko celo integriramo poročila JSON o kumarah (o katerih bomo kmalu razpravljali).
V Karate Framework nam ni treba izvesti veliko korakov, da bi začeli vzporedno izvajanje testnih primerov. Prebiti moramo le naslednje korake:
1) Zdaj moramo spremeniti TestRunner.java datoteko, ki smo jo uporabljali do zdaj. Kodo za vzporedno izvajanje je treba zapisati v zgornjo datoteko.
Upoštevajte naslednjo vrstico med izvajanjem kode v vzporednem:
Vprašanja in odgovori za izkušeni pdf za sql server 2012
** Opombe @RunWith (Karate.class) ne moremo uporabljati, kadar poskušamo delati v vzporednem okolju.
Odprite izvirnik TestRunner.java datoteko in uporabite naslednjo kodo:
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); } }
** Naslednja koda bo veljala za JUnit 4 Odvisnost od Mavena
V zgornji delček kode smo vključili spodnjo vrstico kode -
Rezultati rezultatov = Runner.parallel (getClass (), 5);
V tej vrstici je navodilo, da se vzorec testnih primerov vzporedno zažene z dinamičnim pridobivanjem razredov med izvajanjem.
dva) Ustvari dvojnik userDetails.feature datoteka, kot je navedeno spodaj pod src / test / java mapo.
Zdaj smo vsi pripravljeni na vzporedno izvajanje z dva . Lastnosti mapa.
3) Pojdi do TestRunner.java datoteka, ustvarjena v zgornjem koraku in zaženite kot JUnit Test. S tem bomo svoje testne primere izvajali v vzporedni obliki.
Za lažjo berljivost Karate Framework v konzoli predstavi nekaj informacij, kadar je izvedba preizkusa končana.
Rezultat je videti nekako takole:
Z vzporednim izvajanjem se bodo vse funkcije izvajale v vzporednem in tudi scenariji se bodo izvajali v vzporednem formatu.
Po zgornjih korakih boste lahko s pomočjo Karate Framework zagnali zelo osnovno vzporedno izvajanje preizkusa API.
** O vzporednem testiranju lahko preučite tako, da se pomikate po različnih filtrih na strani Vzporedna izvedba
Vključite vtičnik za kumare za poročanje
Kot uporabljamo JUnit tekač za izvajanje različnih scenarijev, ki so bili omenjeni v različnih * .značilnost datotek samodejno ustvari poročilo za vsako datoteko z značilnostmi, ki je shranjena na poti ciljna / zanesljiva poročila.
Ustvari a Osnovno poročilo v obliki uporabniškega vmesnika za predstavitev opravljenih testnih primerov.
Poročila, ki se ustvarjajo, pa niso zelo prijetna z vidika uporabniškega vmesnika, zato da bi poročila delili z zainteresiranimi stranmi, potrebujemo nekaj, kar je uporabniku bolj prijazno in lahko razumljivo.
Da bi dosegli takšno obliko poročanja, Karate Framework ponuja možnost integracije Vtičnik za poročanje o kumarah kar nam bo pomagalo pri ustvarjanju grafično oblikovanega poročila, ki bo bolj predstavljivo.
Sledijo koraki za integracijo istega:
# 1) Dodajte naslednje Kumare-poročanje odvisnost od vašega POM.xml
net.masterthought cucumber-reporting 3.8.0 test
#two) Uredite datoteko TestRunner.java, če obstaja samo ena * .značilnost datoteko v projektu.
Datoteko TestRunner.java moramo posodobiti z naslednjo metodo createReport () za vtičnik 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 zgoraj omenjeni kodi izvajamo naslednja dejanja:
- Ustvarjanje novega primerka datoteke
- Navedite pot za shranjevanje datotek pod ciljno mapo
- Ustvarjanje predmeta ReportBuilder, ki bo ustvaril novo poročilo o kumarah
Opomba : Zgornja koda dobro deluje, če imamo samske *. funkcija datoteko v našem projektu.
# 3) Uredite datoteko TestRunner.java, ko obstaja večkratnik * .feature datotek v projektu.
Dodati bi morali vrstico kode (poudarjeno krepko spodaj), da zagotovimo, da je poskrbljeno za vzporedno izvajanje, medtem ko se scenariji izvajajo za generiranje poročila.
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 izvedbi zgoraj omenjenih korakov bomo lahko uspešno ustvarili dobro predstavljeno poročilo o grafičnem uporabniškem vmesniku z uporabo Kumara - poročanje vključiti.
Poročilo lahko najdemo na naslednji poti v našem projektu, kot je prikazano na spodnji sliki:
Naslednje poročilo je bilo ustvarjeno za naš projekt za vse operacije, ki smo jih do zdaj izvajali v tej vadnici Karate Framework:
Zaključek
Če povzamemo, v tej vadnici smo razpravljali o osnovnih operacijah, ki so uporabne vsak dan pri delu z Karate okvir in kako izvršiti več datotek * .feature vzporedno. Naučili smo se tudi ustvariti grafično poročilo za uporabnike, ki uporabljajo Poročanje o kumarah vključiti.
Najprej smo razpravljali o osnovnih operacijah, ki jih je mogoče izvajati na API-ju. Razpravljali smo o tem, kako lahko strežniku pošljemo telo / zahtevo POST bodisi z omembo telesa v sami datoteki * .feature (kar običajno ni priporočljiva praksa) bodisi z uporabo zunanje datoteke (priporočena praksa, da bi ohraniti čisto kodo).
Drugič, po nekaj osnovnih korakih bi lahko uspešno izvedli rezultat testa za dva * .značilnost datoteke, ki so bile izvedene vzporedno, samo z dodajanjem nekaj vrstic kode v TestRunner.java datoteka, ki omogoča zagon vzporednega teka.
Poleg tega smo se naučili, kako izvorno poročilo o preskusu JUnit preoblikovati v poročilo o kumarah z vključitvijo Kumaranje-poročanje vključiti. Vtičnik nam omogoča ustvarjanje poročil z boljšim uporabniškim vmesnikom, ki so za uporabnika veliko bolj razumljiva in tako nudi boljšo uporabniško izkušnjo zainteresiranim stranem, s katerimi se ta poročila delijo.
Do zdaj bi lahko že izvedli nekaj osnovnih operacij, vzporedno izvajali testne primere in ustvarili lahko berljivo poročilo za uporabnike.
Priporočeno branje
- Karate Framework Tutorial: Samodejno testiranje API-jev s karatejem
- 10 najboljših orodij za testiranje API-jev v letu 2021 (orodja za testiranje API-jev SOAP in REST)
- Kako voditi kumare z Jenkinsom: Vadnica s primeri
- Priročnik za ustvarjanje obsežnih poročil v programu Selenium WebDriver
- Poročanje o specflowu: Kako ustvariti poročila o preizkusih in izvesti selektivne teste
- Kako upravljati zahteve, izvajati testne primere in ustvarjati poročila s pomočjo TestLink - Vadnica št. 2
- Izvajanje testov Appium v vzporedni uporabi Appium Studio za Eclipse
- Kako vzporedno izvajati obsežno izvajanje testov Appium