run test cases parallel generate reports using karate tool
Овај водич објашњава како извршити неке основне операције на АПИ-ју, паралелно покретати тест случајеве и генерисати извештаје помоћу Карате Фрамеворк-а:
У претходном упутству смо научили како да направимо основну тест скрипту, сада можемо да наставимо са учењем неких основних операција које се могу изводити током рада са АПИ-јем и Карате Фрамеворк-ом. Постоји много таквих операција, а ми ћемо размотрити неколико најчешће коришћених у овом водичу.
Такође ћемо се удубити у процес паралелног покретања тест случајева пратећи корак по корак приступ. Такође ћемо разговарати о тренутном извештају који се генерише аутоматски и упоредићемо га са извештајем о краставцима који можемо да генеришемо интегрисањем додатка.
Шта ћете научити:
- Рад са АПИ-јем и алатом за тестирање каратеа
- Покрените тестове паралелно
- Интегришите додатак за краставац за извештавање
- Закључак
Рад са АПИ-јем и алатом за тестирање каратеа
Као што је разматрано у претходном водичу, у .одлика датотеку коју смо креирали, могли бисмо да користимо различите кључне речи за обављање различитих операција на АПИ-ју. Карате фрамеворк нам пружа неколико кључних речи које се могу користити за извршавање различитих радњи.
=> Препоручена литература: АПИ тестирање са карате оквиром
Извођење различитих операција
# 1) Штампање одговора у конзоли
Штампа је кључна реч коју пружа Карате Фрамеворк за испис резултата у конзоли или датотеци. Једна од најчешћих употреба је штампање одговора АПИ-ја. Ово може бити врло корисно за корисника.
То можемо учинити користећи следеће редове кода:
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
Горњи редови кода ће дати следећи излаз:
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' } }
На овај начин можемо исписати одговор АПИ-ја у конзоли у сврху читања, који се може користити у време отклањања грешака.
# 2) Објављивање променљивих
Варијабле можемо пријавити помоћу кључне речи деф у Карате оквиру и затим користите декларисане променљиве у коду где год је то потребно.
У доњем примеру додали смо још неколико редова кода постојећем усерДетаилс.феатуре датотека која ће вам помоћи у декларацији променљивих у скрипти.
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) Утврђивање стварног одговора на очекивани одговор
Карате Фрамеворк помаже у извођењу операција повезаних са тврдњом користећи утакмица кључна реч. Тхе утакмица је паметан јер му размаци нису битни, а редослед тастера није важан.
За употребу подударање кључне речи, треба да користимо знак двоструке једнакости „==“ који представља поређење.
Сада ћемо покушати да разрадимо неке употребе утакмица кључна реч.
а) Када се у самој датотеци .феатуре наведе читав очекивани одговор.
У одређеним тренуцима имамо неке податке које бисмо желели одмах да потврдимо у самој датотеци. Обично се такве врсте података помињу приликом отклањања грешака у коду.
То бисмо могли учинити и у самој датотеци .феатуре, као што је приказано доле:
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'}}
Ако на УРЛ пошаљете захтев „Хттпс://рекрес.ин/апи/усерс/2“ у прегледачу, онда добићете следећи одговор:
{ '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' } }
Покушавамо да потврдимо горе поменути одговор помоћу датотеке * .феатуре.
Користили смо утакмица кључну реч коју пружа Карате Фрамеворк, који помаже у извођењу различитих врста Тврдње у АПИ одговору.
Белешка : Морали бисмо да трансформишемо АПИ одговор у један ред да бисмо извршили горњи корак. Можете користити било који од доступних алата на мрежи.
б) Када се очекивани излаз чува у спољној ЈСОН датотеци.
У горњем примеру смо разговарали о сценарију где смо имали ограничене податке и исти одговор који је био лак за руковање, али у стварним сценаријима имат ћемо гигантске скупове ЈСОН одговора које ћемо можда морати процијенити.
Дакле, у тим случајевима је боље да одговор задржите у спољној датотеци, а затим га исто и верификујете.
У доњем примеру ћемо даље разговарати о истом:
- Треба да направите ЕкпецтедОутпут.јсон датотеку у нашој фасцикли Пројецт, као што је приказано на доњој слици.
Направите нови ресурс пакета -> Направите нову датотеку ЕкпецтедОутпут.јсон
И сачувајте ЈСОН одговор у овој датотеци и сачувајте га.
Морали бисте да напишете следећи код у свој усерДетаилс.феатуре датотека:
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
У горњем примеру, прво читамо датотеку ЕкпецтедОутпут.јсон и чувајући његов одговор у променљивој Очекивани резултат помоћу следећи редови кода:
Given expectedResult=read('./resources/ExpectedOutput.json')
Затим стављамо тврдњу користећи следеће редове кода, где подударамо Стварни одговор са Очекивани резултат одговор са „ == ' оператер.
And match response == expectedResult
ц) Подударање / верификација одређених вредности из одговора
До сада смо верификовали целокупан одговор АПИ-ја, али сваки пут не бисте желели да верификујете цео одговор. Понекад бисте желели да процените само део одговора. Обично то радимо када користимо друге алате за тестирање АПИ-ја или док правимо оквир.
Да бисмо га даље разумели, узмимо следећи ЈСОН одговор као пример:
{ 'ad': { 'company': 'StatusCode Weekly' } }
Ако желимо да верификујемо да је параметар компанија треба да има вредност као СтатусЦоде Веекли, онда ћемо морати да креирамо ЈСОН путању. То се може учинити прелажењем ЈСОН датотеке и коришћењем знака „.“ (Оператер тачака)
ЈСОН путања за горњи одговор биће:
ад.цомпани == „СтатусЦоде Веекли“
Испод је исечак кода који ће нам помоћи у процени вредности за одређени параметар. Овај код припада .одлика датотека.
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'
Испод је линија кода која извршава параметарске тврдње.
And match response.ad.url == 'http://statuscode.org/' And match response.data.first_name == 'Janet'
Користећи ЈСОН путању, процењујемо вредности за параметре.
Извођење поштанских операција
До сада смо покривали основне сценарије тестирања АПИ-ја када је метода била „ ДОБИТИ'. Али када радимо у стварном окружењу, морамо да пошаљемо пуно информација серверу, па у том случају користимо „ ПОШТА' метода .
Овај одељак ће вам дати увид у рад са основним ПОСТ захтевом.
Дајмо неколико кратких идеја о параметрима који су нам потребни за слање ПОСТ захтева.
# 1) Креирање ПОСТ захтева, када је тело ЈСОН поменуто у * .феатуре датотеци
- Креирајте усерДетаилсПост.феатуре користећи сличне кораке поменуте у претходном водичу.
- Напишите следеће редове кода:
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
Будући да се ради о ПОСТ захтеву, уз који увек треба да буде приложено тело које треба послати серверу ради одређеног одговора, то смо напоменули под следећом компонентом:
захтев: За захтев је потребно ЈСОН тело које је потребно код методе ПОСТ.
# 2) Креирање ПОСТ захтева, када је тело ЈСОН поменуто у спољној датотеци
Обично ћемо имати огромно тело захтева, што би било тешко поменути у *.одлика датотека. Зато је боље да га сачувате у спољној датотеци.
- Треба да направите датотеку ПостБоди.јсон у нашој фасцикли Пројекта, као што је приказано доле. Направите нови ресурс пакета -> Направите нову датотеку ПостБоди.јсон и сачувајте тело ЈСОН у овој датотеци и сачувајте је.
Белешка: Споменули смо тело ПОСТ методе у горњој ЈСОН датотеци.
- Морали бисте да напишете следећи код у усерДетаилсПост .одлика датотека:
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
Читамо ЈСОН тело са ПостБоди.јсон користећи следеће редове кода:
Given postBody=read('./resources/PostBody.json')
Белешка: Све усерДеатилс.феатуре датотеке које смо до сада креирали захтеваће основно ТестРуннер.јава датотеку за њихово извршавање, коју смо креирали у нашем упутству за основни тест скрипте, као што је приказано доле:
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
Покрените тестове паралелно
Сад, пошто смо научили кораке за стварање основне тест скрипте и извршили неке основне операције на АПИ-ју, време је да започнемо са радом у стварном окружењу.
Обично морамо паралелно покретати тест случајеве како бисмо извршавање учинили бржим. У основи, идеја је добити више резултата за мање времена.
Ово је суштинска карактеристика оквира и не зависи од ЈУнит, Мавен или Граде. Омогућава нам да:
- Једноставно одаберите функције и ознаке за покретање пробних комплета.
- Погледајте паралелне резултате у директоријуму сурефире-плугин.
- Можемо чак интегрисати ЈСОН извештаје о краставцу ради бољег корисничког интерфејса (о чему ћемо ускоро разговарати).
У Карате Фрамеворк-у не треба да изводимо много корака да бисмо започели паралелно извршавање наших тест случајева. Само треба да прођемо следеће кораке:
1) Сада морамо да променимо ТестРуннер.јава датотеку коју смо користили до сада. Код за паралелно извршавање мора бити написан у горњој датотеци.
Имајте на уму следећи ред док извршавате свој код у паралелном режиму:
како покренути јсон датотеку
** Не можемо да користимо @РунВитх (Карате.цласс) напомену када покушавамо да радимо у паралелном окружењу.
Отворите оригинал ТестРуннер.јава датотеку и користите следећи код:
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); } }
** Следећи код ће бити применљив за ЈУнит 4 Зависност Мавена
У горњи исечак кода укључили смо доњи ред кода-
Резултати резултата = Руннер.параллел (гетЦласс (), 5);
Овај ред даје упутства за покретање Инстанце тест случајева у паралелном режиму динамичким дохватањем класа током извођења.
два) Направите дупликат усерДетаилс.феатуре датотека као што је доле поменуто под срц / тест / јава директоријум.
Сада смо сви спремни за паралелно извршавање са два . Карактеристике датотека.
3) Иди на ТестРуннер.јава датотека креирана у горњем кораку и покрените га као ЈУнит тест. Овим ћемо извршавати тестове у паралелном формату.
Ради лакше читљивости, неке информације су представљене Карате Фрамеворк-ом у конзоли, кад год је извршење теста завршено.
Резултат изгледа отприлике овако:
Паралелним извршавањем, све функције ће се извршавати у паралелном, а сценарији ће такође радити у паралелном формату.
Следећи горње кораке, моћи ћете да започнете врло основно паралелно извршавање АПИ теста, користећи Карате Фрамеворк.
** Можете проучавати паралелно тестирање прелазећи кроз различите филтере на страници Паралелно извршење
Интегришите додатак за краставац за извештавање
Као што користимо ЈУнит тркач за извршење различитих сценарија који су поменути у различитим *.одлика датотека, он аутоматски креира извештај за сваку од датотека карактеристика које су ускладиштене у путањи Извештаји о циљевима
То генерише а Извештај са основним интерфејсом за представљање тест случајева који су извршени.
Али, извештаји који се генеришу нису баш пријатни у смислу корисничког интерфејса, а да бисмо делили извештаје са заинтересованим странама, потребно нам је нешто што је једноставније за корисника и лако разумљиво.
Да би се постигао такав формат извештавања, Карате Фрамеворк даје могућност интеграције Додатак за извештавање о краставцима што ће нам помоћи у генерисању графички форматираног извештаја, који ће бити представљивији.
Следе кораци за интеграцију истих:
# 1) Додајте следеће Извештавање краставаца зависност од вашег ПОМ.кмл
net.masterthought cucumber-reporting 3.8.0 test
#два) Уредите датотеку ТестРуннер.јава када постоји само један *.одлика датотека у пројекту.
Морамо да ажурирамо нашу датотеку ТестРуннер.јава, следећом методом цреатеРепорт () за додатак Цуцумбер.
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(); } }
У горе поменутом коду изводимо следеће радње:
- Креирање нове инстанце датотеке
- Пружање путање за чување датотека у циљној фасцикли
- Креирање објекта РепортБуилдер који ће створити нови извештај о краставцима
Белешка : Горњи код добро функционише када имамо сингле *. одлика фајл у нашем пројекту.
# 3) Уредите датотеку ТестРуннер.јава када постоје вишеструка * .обиљежје датотеке у пројекту.
Морали бисмо да додамо ред кода (означен подебљаним словима доле) како бисмо били сигурни да се брине о паралелном извршавању док се извршавају сценарији за генерисање извештаја.
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(); } }
Након извршавања горе поменутих корака, моћи ћемо успешно да направимо добро представљени извештај графичког корисничког интерфејса користећи Краставац - извештавање повезати.
Извештај можемо пронаћи на следећем путу у нашем пројекту, као што је приказано на слици испод:
Следећи извештај је генерисан за наш пројекат, за све операције које смо до сада обављали у овом упутству за Карате Фрамеворк:
Закључак
Да резимирамо, у овом упутству смо разговарали о основним операцијама које су корисне свакодневно током рада са Карате Фрамеворк и како извршити више * .феатуре датотека паралелно. Такође смо научили да креирамо графички извештај за кориснике који користе Извештавање краставаца повезати.
Прво смо разговарали о основним операцијама које се могу изводити на АПИ-ју. Разговарали смо о томе како можемо послати ПОСТ тело / захтев серверу, било помињањем тела у самој датотеци * .феатуре (што обично није препоручена пракса) или коришћењем спољне датотеке (препоручена пракса, како би се одржавати чист код).
Друго, након неколико основних корака, могли бисмо успешно да извршимо резултат теста за двоје *.одлика датотеке које су извршене паралелно, само додавањем неколико редова кода у ТестРуннер.јава датотека која омогућава покретање паралелног извођења.
Поред тога, научили смо како да трансформишемо изворни извештај о ЈУнит тесту у извештај о краставцима интегришући Извештавање краставаца повезати. Додатак нам омогућава да генеришемо извештаје који имају бољи кориснички интерфејс, много су разумљивији за корисника и на тај начин пружају боље корисничко искуство заинтересованим странама са којима се ови извештаји деле.
До сада бисте већ могли да извршите неку основну операцију, паралелно покренете тестове и генеришете извештај који се лако чита за кориснике.
Препоручено читање
- Водич за Карате Фрамеворк: Аутоматизовано АПИ тестирање са каратеом
- 10 најбољих алата за тестирање АПИ-ја у 2021. години (СОАП и РЕСТ АПИ алати за тестирање)
- Како водити краставац са Јенкинсом: Водич са примерима
- Водич за генерисање екстензивних извештаја у програму Селениум ВебДривер
- Извештавање о спектлуку: Како се генеришу извештаји о тестовима и извршавају селективни тестови
- Како управљати захтевима, извршавати тест случајеве и генерисати извештаје помоћу ТестЛинк - Туториал # 2
- Покретање тестова Аппиум-а паралелно помоћу Аппиум Студио-а за Ецлипсе
- Како паралелно покренути велико извршавање тестова на апијуму