run test cases parallel generate reports using karate tool
Този урок обяснява как да изпълнявате някои основни операции на API, да изпълнявате паралелни тестови случаи и да генерирате отчети с Karate Framework:
Научихме как да създадем основен тестов скрипт в нашия предишен урок, вече можем да продължим напред с изучаването на някои основни операции, които могат да се извършват по време на работа с API и Karate Framework. Има много такива операции и ще обсъдим няколко често използвани в този урок.
Също така ще се задълбочим в процеса на паралелно провеждане на тестови случаи, като следваме стъпка по стъпка подход. Също така ще обсъдим текущия отчет, който се генерира автоматично, и ще го сравним с отчета за краставици, който можем да генерираме чрез интегриране на приставка.
Какво ще научите:
- Работа с API и инструмент за тестване на карате
- Стартирайте тестови случаи паралелно
- Интегрирайте приставката за краставици за отчитане
- Заключение
Работа с API и инструмент за тестване на карате
Както беше обсъдено в предишния урок, в .особеност файл, който бяхме създали, бихме могли да използваме различни ключови думи за извършване на различни операции на API. Карате framework ни предоставя няколко ключови думи, които могат да се използват за извършване на различни действия.
=> Препоръчително четене: API тестване с рамка на карате
Извършване на различни операции
# 1) Отпечатване на отговора в конзолата
Печат е ключова дума, която се предоставя от Karate Framework за отпечатване на резултата в конзолата или файла. Едно от най-честите приложения е отпечатването на отговора на API. Това може да бъде много полезно за потребителя.
Можем да направим това, като използваме следните редове код:
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' } }
Ето как можем да отпечатаме отговора на API в конзолата с цел четене, който може да се използва по време на отстраняване на грешки.
# 2) Деклариране на променливите
Можем да декларираме променливите, използвайки ключовата дума деф в рамката на Карате и след това използвайте декларираните променливи в кода, където е необходимо.
В примера по-долу сме добавили още няколко реда код към съществуващия userDetails.feature файл, за да декларира променливите в скрипта.
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) Утвърждаване на действителния отговор на очаквания отговор
Karate Framework помага при извършване на операции, свързани с Assertion, използвайки съвпада ключова дума. The съвпада е умен, защото празното пространство няма значение за него и редът на клавишите не е важен.
За използване ключова дума за съвпадение, трябва да използваме знака за двойно равенство '==', който представлява сравнение.
Сега ще се опитаме да разгледаме някои приложения на съвпада ключова дума.
а) Когато целият очакван отговор е споменат в самия файл .feature.
В определени моменти имаме някои данни, които бихме искали да проверим незабавно в самия файл. Обикновено такива видове данни се споменават при отстраняване на грешки в кода.
Бихме могли да направим същото в самия файл .feature, както е показано по-долу:
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'}}
Ако изпратите заявка до URL адреса ‘Https://reqres.in/api/users/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.
Използвахме съвпада ключова дума, предоставена от Karate Framework, която помага при изпълнението на различни видове Твърдения в отговора на API.
Забележка : Ще трябва да трансформираме отговора на API в един ред, за да изпълним горната стъпка. Можете да използвате някой от наличните инструменти на линия.
б) Когато очакваният изход се съхранява във външен JSON файл.
В горния пример обсъдихме сценарий, при който имахме ограничени данни и същия отговор, който беше лесен за обработка, но в реалните сценарии ще имаме гигантски набори от JSON отговори, които може да се наложи да оценим.
Така че, в тези случаи е по-добре да запазите отговора във външния файл и след това да проверите същото.
В примера по-долу ще обсъдим по-нататък същото:
- Трябва да създадете ExpectedOutput.json файл в нашата папка Project, както е показано на изображението по-долу.
Създаване на нов ресурс на пакета -> Създаване на нов файл ExpectedOutput.json
И запазете JSON отговора в този файл и го запазете.
Ще трябва да напишете следния код във вашия userDetails.feature файл:
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
В горния пример първо четем файла ExpectedOutput.json и съхраняване на отговора от него в променливата очакван резултат използвайки следните редове код:
Given expectedResult=read('./resources/ExpectedOutput.json')
След това поставяме твърдението, като използваме следните редове код, където съответстваме на Действителен отговор с очакван резултат отговор с „ == ' оператор.
And match response == expectedResult
в) Съвпадение / Проверка на определени стойности от отговора
Досега проверихме целия отговор на API, но всеки път не бихте искали да проверите целия отговор. Понякога бихте искали да оцените само част от отговора. Обикновено правим същото, когато използваме другите инструменти за API тестване или докато създаваме рамка.
За да го разберем по-нататък, нека вземем следния JSON отговор като пример:
{ 'ad': { 'company': 'StatusCode Weekly' } }
Ако искаме да проверим дали параметърът компания трябва да има стойността като StatusCode седмично, тогава ще трябва да създадем JSON Path. Това може да стане чрез обхождане на JSON файла и използване на „.“ (Оператор на точки)
Пътят на JSON за горния отговор ще бъде:
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'
Използвайки JSON Path, ние оценяваме стойностите за параметрите.
Извършване на пощенски операции
Досега разгледахме основните сценарии за тестване на API, когато методът беше „ ВЗЕМЕТЕ ”. Но когато работим в реалната среда, трябва да изпратим много информация на сървъра, така че в този случай използваме „ СЛЕДВАЙТЕ ” метод .
Този раздел ще ви даде представа за работата с основната POST заявка.
Нека да получим няколко кратки идеи за параметрите, които са ни необходими за изпращане на заявката POST.
# 1) Създаване на POST заявка, когато JSON тялото е споменато във * .feature файл
- Създайте userDetailsPost.feature, като използвате подобни стъпки, споменати в предишния урок.
- Напишете следните редове код:
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
Тъй като това е POST заявка, която винаги трябва да бъде придружена от тяло, което трябва да бъде изпратено до сървъра за определен отговор, ние го споменахме под следния компонент:
заявка: Взема JSON тяло като заявка, която се изисква с метода POST.
# 2) Създаване на POST заявка, когато JSON тялото е споменато във външен файл
Обикновено ще имаме огромно тяло за заявка, което би било трудно да се спомене в *.особеност файл. Затова е по-добре да го съхранявате във външния файл.
- Трябва да създадете файл PostBody.json в нашата папка Project, както е показано по-долу. Създайте нов ресурс на пакета -> Създайте нов файл PostBody.json и съхранете JSON Body в този файл и го запазете.
Забележка: Споменахме тялото на метода POST в горния JSON файл.
- Ще трябва да напишете следния код във вашия userDetailsPost .особеност файл:
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
Четем JSON Body от PostBody.json, като използваме следните редове код:
Given postBody=read('./resources/PostBody.json')
Забележка: Всички userDeatils.feature файловете, които сме създали досега, ще изискват основното TestRunner.java файл за тяхното изпълнение, който създадохме в нашия урок за основен тестов скрипт, както е показано по-долу:
import org.junit.runner.RunWith; import com.intuit.karate.junit4.Karate; @RunWith(Karate.class) public class TestRunner { }
Стартирайте тестови случаи паралелно
След като научихме стъпките за създаване на основен тестов скрипт и извършихме някои основни операции на API, време е да започнем да работим в реалната среда.
Обикновено трябва да стартираме тестовите случаи паралелно, за да направим изпълнението по-бързо. По принцип идеята е да се получи повече продукция за по-малко време.
Това е основна характеристика на рамката и не зависи от JUnit, Maven или Grade. Това ни позволява да:
- Изберете лесно функциите и маркерите, за да стартирате тестовите пакети по прост начин.
- Прегледайте паралелните резултати под папката surefire-plugin.
- Можем дори да интегрираме отчетите JSON за краставици за по-добър потребителски интерфейс (което ще бъде обсъдено скоро).
В Karate Framework не е необходимо да изпълняваме много стъпки, за да стартираме паралелното изпълнение на нашите тестови случаи. Просто трябва да преминем през следните стъпки:
1) Сега трябва да променим TestRunner.java файл, който използвахме досега. Кодът за паралелно изпълнение трябва да бъде записан в горния файл.
Моля, имайте предвид следния ред, докато изпълнявате кода си в Parallel:
c ++ недефинирана препратка към клас
** Не можем да използваме анотацията @RunWith (Karate.class), когато се опитваме да работим в паралелна среда.
Отворете оригинала TestRunner.java файл и използвайте следния код сега:
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); } }
** Следният код ще бъде приложим за JUnit 4 Зависимост на Maven
В кодовия фрагмент по-горе включихме долния ред на кода-
Резултати резултати = Runner.parallel (getClass (), 5);
Този ред дава инструкции за изпълнение на инстанцията на тестовите случаи в паралел чрез динамично извличане на класовете по време на изпълнение.
две) Създайте дубликат userDetails.feature файл, както е споменато по - долу под src / test / java папка.
Сега всички сме готови за паралелно изпълнение с две . Характеристика файл.
3) Отидете на TestRunner.java файл, създаден в горната стъпка и стартирайте го като JUnit Test. С това ще изпълним тестовите си случаи в паралелен формат.
За лесно четене, част от информацията се представя от Karate Framework в конзолата, когато изпълнението на теста приключи.
Резултатът изглежда по следния начин:
При паралелното изпълнение всички функции ще се изпълняват в паралелно и сценариите също ще работят в паралелен формат.
Следвайки горните стъпки, ще можете да стартирате най-основното паралелно изпълнение на API теста, използвайки Karate Framework.
** Можете да изучавате паралелно тестване, като обикаляте през различните филтри на страницата Паралелно изпълнение
Интегрирайте приставката за краставици за отчитане
Тъй като използваме JUnit бегач за изпълнението на различни сценарии, споменати в различните *.особеност файлове, той автоматично създава отчет за всеки от функциите файлове, които се съхраняват в пътя целеви / сигурни отчети.
Той генерира a Отчет с основен потребителски интерфейс за представяне на изпълнените тестови случаи.
Но генерираните отчети не са много приятни от гледна точка на потребителския интерфейс и за да споделяме отчети със заинтересованите страни, се нуждаем от нещо, което е по-удобно за потребителя и лесно разбираемо.
За да се постигне такъв формат на отчитане, Karate Framework дава възможност за интегриране Приставка за отчитане на краставици което ще ни помогне при генерирането на графичен форматиран отчет, който ще бъде по-представителен.
Следват стъпките за интегриране на едно и също:
# 1) Добавете следното Краставица-отчитане зависимост от вашия POM.xml
net.masterthought cucumber-reporting 3.8.0 test
# две) Редактирайте файла TestRunner.java, когато има само един *.особеност файл в проекта.
Трябва да актуализираме нашия файл TestRunner.java със следния метод createReport () за приставката 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(); } }
В кода, споменат по-горе, ние извършваме следните действия:
- Създаване на нов екземпляр на File
- Предоставяне на пътя за съхраняване на файловете под целевата папка
- Създаване на ReportBuilder обект, който ще създаде нов отчет за краставици
Забележка : Горният код работи добре, когато имаме единични *. особеност файл в нашия проект.
# 3) Редактирайте файла TestRunner.java, когато има такива множествен * .характеристика файлове в проекта.
Ще трябва да добавим ред код (подчертан с удебелен шрифт по-долу), за да гарантираме, че се грижи за паралелно изпълнение, докато сценариите се изпълняват за генерирането на отчета.
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(); } }
След изпълнението на гореспоменатите стъпки ще можем успешно да създадем добре представен отчет за графичен потребителски интерфейс, използвайки Краставица - отчитане плъгин.
Можем да намерим отчета по следния път в нашия проект, както е показано на изображението по-долу:
Следният отчет е генериран за нашия проект, за всички операции, които сме извършили досега в този урок за Карате Рамкова:
Заключение
За да обобщим, в този урок ние обсъдихме основните операции, които са полезни ежедневно, докато работим с Карате рамка и как да се изпълни множество * .feature файлове паралелно. Също така се научихме да създаваме графичен отчет за потребителите, използващи Отчитане на краставици плъгин.
Първо, обсъдихме основните операции, които могат да се извършват с API. Обсъдихме как можем да изпратим POST тялото / заявката до сървъра, или като споменем тялото в самия файл * .feature (което обикновено не е препоръчителна практика), или като използваме външен файл (препоръчителна практика, за да поддържат чист код).
Второ, след като изпълнихме няколко основни стъпки, бихме могли успешно да изпълним резултата от теста за двама *.особеност файлове, които бяха изпълнени паралелно, само чрез добавяне на няколко реда код в TestRunner.java файл, позволяващ инициирането на паралелно изпълнение.
Освен това научихме как да трансформираме родния отчет на JUnit Test в доклад за краставици чрез интегриране на Краставица-отчитане плъгин. Приставката ни позволява да генерираме отчети, които имат по-добър потребителски интерфейс, са много по-разбираеми за потребителя и по този начин осигурява по-добро потребителско изживяване за заинтересованите страни, с които се споделят тези отчети.
Досега бихте могли да извършите някои основни операции, да изпълнявате паралелно тестовите случаи и да генерирате лесен за четене отчет за потребителите.
Препоръчително четене
- Karate Framework Tutorial: Автоматизирано API тестване с карате
- 10 най-добри инструмента за тестване на API през 2021 г. (SOAP и REST API инструменти за тестване)
- Как да стартирате краставица с Дженкинс: Урок с примери
- Ръководство за генериране на обширни отчети в Selenium WebDriver
- Отчитане на спектъра: Как да генерирате тестови отчети и да изпълнявате селективни тестове
- Как да управлявате изискванията, да изпълнявате тестови случаи и да генерирате отчети с помощта на TestLink - Урок №2
- Изпълнение на вашите тестове за Appium в паралел с помощта на Appium Studio за Eclipse
- Как да стартирате паралелно мащабно изпълнение на тестове на Appium