run test cases parallel generate reports using karate tool
Цей посібник пояснює, як виконувати деякі основні операції над API, паралельно запускати тестові кейси та створювати звіти за допомогою Karate Framework:
Ми дізналися, як створити базовий тестовий скрипт, у нашому попередньому підручнику, тепер ми можемо рухатись далі, вивчаючи деякі основні операції, які можна виконувати під час роботи з API та Karate Framework. Таких операцій багато, і ми обговоримо декілька найбільш часто використовуваних у цьому посібнику.
Ми також заглибимось у процес запуску тестових кейсів паралельно, дотримуючись поетапного підходу. Ми також обговоримо поточний звіт, який створюється автоматично, і порівняємо його із звітом Cucumber, який ми можемо створити, інтегрувавши плагін.
Що ви дізнаєтесь:
- Робота з 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 допомагає виконувати операції, пов’язані з твердженням, за допомогою матч ключове слово. матч розумний, оскільки пробіли для нього не мають значення, а порядок клавіш не важливий.
Для використання відповідне ключове слово, нам потрібно використовувати знак подвійної рівності “==”, який представляє порівняння.
Зараз ми спробуємо детальніше описати деякі способи використання матч ключове слово.
а) Коли вся очікувана відповідь згадується у самому файлі .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, які нам, можливо, доведеться оцінити.
Тож у цих випадках краще зберегти відповідь у зовнішньому файлі, а потім перевірити те саме.
У наведеному нижче прикладі ми далі обговоримо те саме:
- Потрібно створити ОчікуванийOutput.json файл у нашій папці Project, як показано на малюнку нижче.
Створити новий ресурс пакету -> Створити новий файл ОчікуванийOutput.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
У наведеному вище прикладі ми спочатку читаємо файл ОчікуванийOutput.json і зберігання відповіді на нього у змінній Очікуваний результат за допомогою наступні рядки коду:
Given expectedResult=read('./resources/ExpectedOutput.json')
Потім ми ставимо твердження, використовуючи наступні рядки коду, де ми відповідаємо Фактична відповідь за допомогою Очікуваний результат відповідь з == ' оператора.
And match response == expectedResult
в) Відповідність / перевірка певних значень з відповіді
Дотепер ми перевіряли повну відповідь API, але кожного разу ви не хотіли б перевіряти всю відповідь. Іноді ви хочете оцінити лише частину відповіді. Зазвичай ми робимо те саме, коли використовуємо інші інструменти для тестування API або під час створення фреймворку.
Щоб зрозуміти це далі, візьмемо для прикладу таку відповідь JSON:
{ 'ad': { 'company': 'StatusCode Weekly' } }
Якщо ми хочемо перевірити, що параметр компанії має мати значення як StatusCode щотижня, тоді нам доведеться створити шлях до JSON. Це можна зробити, обернувши файл JSON та використовуючи “.” (Оператор крапок)
Шлях JSON для наведеної вище відповіді буде таким:
ad.company == “Код стану щотижня”
Нижче наведено фрагмент коду, який допоможе нам оцінити значення для конкретного параметра. Цей код належить до .особливість файл.
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, ми обчислюємо значення параметрів.
Виконання поштових операцій
Дотепер ми розглянули основні сценарії тестування 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 у цьому файлі та збережіть його.
Примітка: Ми згадали тіло методу 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 Cucumber для кращого інтерфейсу користувача (про що ми поговоримо найближчим часом).
У Karate Framework нам не потрібно виконувати багато кроків, щоб розпочати паралельне виконання наших тестових випадків. Нам просто потрібно пройти такі кроки:
1) Тепер нам потрібно змінити TestRunner.java файл, який ми використовували дотепер. Код для паралельного виконання потрібно записати у файл вище.
Будь ласка, майте на увазі наступний рядок, виконуючи ваш код у паралелі:
що таке SWF-файл?
** Ми не можемо використовувати анотацію @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);
Цей рядок дає вказівку запускати Екземпляр тестових випадків паралельно, динамічно отримуючи класи під час виконання.
2) Створіть дублікат 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(); } }
У згаданому вище коді ми виконуємо такі дії:
- Створення нового екземпляра файлу
- Надання шляху для зберігання файлів у цільовій папці
- Створення об'єкта 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 у звіт 'Огірок', інтегруючи Огірок-звітність підключати. Плагін дозволяє нам створювати звіти, які мають кращий інтерфейс користувача, набагато зрозуміліші для користувача, а отже, забезпечують кращий досвід для користувачів для зацікавлених сторін, з якими спільно використовуються ці звіти.
Наразі ви мали змогу виконати деякі основні операції, паралельно запускати тестові кейси та створювати зручний для читання звіт для користувачів.
Рекомендована література
- Підручник з Karate Framework: Автоматизоване тестування API за допомогою карате
- 10 найкращих засобів тестування API у 2021 році (SOAP та REST API)
- Як запустити огірок з Дженкінсом: Підручник із прикладами
- Посібник із створення звітів про обсяги в Selenium WebDriver
- Specflow Reporting: Як створити звіти про тести та виконати селективні тести
- Як керувати вимогами, виконувати тестові справи та генерувати звіти за допомогою TestLink - Підручник No2
- Запуск тестів на Appium паралельно за допомогою Appium Studio для Eclipse
- Як запустити паралельно широкомасштабне виконання тестів на аппіумі