wiremock tutorial introduction wiremock
Цей вступний відео-посібник пояснить особливості Wiremock та те, як запустити Wiremock як автономний сервер та як частину тестів JUnit:
У цьому підручнику ми розглянемо основні поняття та деталі інструменту Wiremock. Він може бути використаний як автономний HTTP-сервер, а також у рамках тестів JUnit відповідно до вимог.
Це широко використовуваний інструмент, оскільки він є відкритим і має велику спільноту авторів. Він підпадає під категорію інструментів віртуалізації послуг.
Що ви дізнаєтесь:
Що таке Wiremock?
Говорячи простими словами, Wiremock - це глузлива установка для інтеграційних тестів. Це просто фальшивий сервер, який можна легко налаштувати, щоб повернути очікувану відповідь на даний запит.
Він широко використовується під час розробки та, що більш важливо, під час тестування інтеграції, коли система чи служба розмовляють з однією або кількома зовнішніми чи внутрішніми залежностями / службами.
Спробуємо зрозуміти більше про інтеграційне тестування загалом та дізнатись, як Wiremock може допомогти подолати ці виклики та полегшити наше життя.
Як правило, коли з’являється слово інтеграція, нам здається вражаючим інтеграція між двома системами зв'язку. Тепер давайте розглянемо це з точки зору тестованої програми, яка використовує якусь зовнішню службу для виконання роботи.
Наприклад, припустимо, що ми створюємо додаток для онлайн-подорожей або системи квитків, і у нас є модуль для перевірки статусу PNR, який вражає зовнішній API, наданий Індійською залізницею.
Тепер, як ми можемо перевірити інтеграцію нашого додатка із зовнішніми API?
Є 2 способи зробити це:
- Спочатку, є підходом Unit test, де ми заглушаємо наданий (або створений власноруч) інтерфейс, щоб наша система тестувала / перевіряла заглушену або фальшиву відповідь ще до того, як потрапити на зовнішній API. Це не що інше, як юніт-тест, який намагається висміяти зовнішню залежність.
- По-друге - це тестування з якимось тестовим середовищем (або фактичним виробничим середовищем) зовнішніх залежностей. Однак із таким підходом є кілька проблем, згаданих нижче:
- Зовнішні системи API можуть бути не завжди доступними. тобто ми в значній мірі залежні від зовнішніх систем, або будь-який простій там вплине на наші тести та побічно процес розробки / випуску.
- По-друге, зовнішні API можуть мати або не мати тестового середовища. Наприклад, API перевірки статусу PNR завжди може вимагати реальних номерів PNR для отримання та повернення відповідей.
- Багато разів виникають витрати на потрапляння в API. Наприклад, припустимо, API перевірки PNR стягує 100 рупій за кожні 1000 запитів. Оскільки інтеграційні тести зазвичай виконуються під час кожної регресії (і більшу частину часу при кожному коміті), можливо, не буде економічно ефективним рішенням вдатися до такого API, який коштує нам навіть для цілей тестування.
- Зовнішній API не може бути налаштований на повернення бажаної відповіді. Навіть якщо це можливо, вам доведеться створити багато тестових даних, щоб забезпечити різні відповіді на різні вхідні дані запиту.
Наприклад, ви хочете перевірити сценарії помилок, як API повертає різні коди стану для різних типів даних. Зараз, оскільки відповідь не під нашим контролем, нам потрібно буде створити кілька наборів даних для перевірки різних можливих сценаріїв або результатів.
Давайте розберемося в цих поняттях за допомогою наведеної нижче схеми.
Тут ми порівнюємо обидва підходи інтеграційного тестування, тобто без макетного сервера, використовуючи фактичну реалізацію зовнішньої залежності, та використання макетного сервера (Wiremock), який знущається з відповідей на запити, отримані для залежності.
В останньому випадку це значно зменшує залежність та залежність від фактичної реалізації залежності та надає безліч можливостей конфігурації без шкоди для якості та графіків доставки.
Як Wiremock реагує на заданий запит?
Як ми знаємо, Wiremock - це програмний Mock-сервер, спосіб реагування на який-небудь запит полягає у збереженні всіх відповідних зіставлення (або знущаних відповідей) у папці, названій як “mappings”
У Wiremock є компонент збігу, який відповідає вхідним запитам із збереженими відображеннями, і якщо повертається успішний збіг, то перший такий збіг повертається як відповідь на даний запит.
Якщо ви використовуєте автономну версію Wiremock, після запуску сервера Wiremock ви побачите папку відображень, яка буде створена в каталозі встановлення / банки розташування Wiremock.
Відео-посібник: Вступ до інструменту Wiremock
регулярні вирази на c ++
Як користуватися Wiremock?
А тепер давайте подивимося, як ми можемо використовувати цей інструмент разом із нашими тестами інтеграції.
Його можна використовувати наступними способами.
Автономний сервер Wiremock
Як автономний сервер, ви можете просто створити простий додаток Java із залежністю Maven / Gradle для Wiremock і зберегти його як запущений процес.
Це хороша альтернатива, коли ви хочете розмістити свій автономний сервер на якійсь машині та використовувати його як єдиний глузуючий сервер для всього проекту або команди. В автономному режимі цей інструмент також можна виконати, завантаживши доступну автономну банку тут і просто запустіть банку.
Наприклад, припустимо, ви хочете розгорнути свій автономний екземпляр Wiremock на якомусь сервері в хмарі або на локальному сервері, тоді ви можете просто запустити цей jar і використовувати системний IP, щоб використовувати його як розміщену послугу.
Давайте подивимось деякі кроки, щоб запустити це в автономному режимі (і налаштувати різні речі, такі як порти, зіставлення папок тощо)
# 1) Запустіть jar-модуль Wiremock із терміналу (або командного рядка для користувачів Windows), як і будь-який інший файл JAR (з каталогу встановлення jar-сервера Wiremock).
java -jar wiremock-standalone-2.25.1.jar
# два) За замовчуванням Wiremock працює на localhost: 8080 (якщо порт вільний для використання, то наведена вище команда запустить сервер Wiremock в автономному режимі), і ви побачите результат, як показано нижче.
# 3) Тепер після запуску сервера ви можете відвідати будь-яку URL-адресу на localhost: 8080
Наприклад, http: // localhost: 8080 / get / user / 1 - Оскільки в даний час не встановлено жодних макетів, ви отримаєте відповідь, як показано нижче.
# 4) Тепер спробуємо налаштувати просту заглушку / макет для цієї URL-адреси та спробуйте повернути URL-адресу знову. Потім ми перевіримо, що потрапляння на ту саму URL-адресу тепер повертає знущану або нечітку відповідь.
curl -X POST --data '{ 'request': { 'url': '/get/user/1', 'method': 'GET' }, 'response': { 'status': 200, 'body': 'Here it is!
' }}' http://localhost:8080/__admin/mappings/new
Спробуємо спочатку зрозуміти цей запит CURL:
- Ми робимо запит CURL POST до http: // localhost: 8080 / __ admin / mappings / new - Зараз це місце, де всі зіставлення будуть зберігатися для сервера Wiremock, який ми виконали / запустили через файл JAR.
- У запиті Curl ми визначаємо такі параметри запиту, як - URL і метод запиту, а також тіло відповіді в розділі «відповідь». Це просто означає, що кожного разу, коли запит GET надходить із URL / get / user / 1, тоді відповідає вказане тіло відповіді.
# 5) Після того, як встановлено стерп-відповідь (за допомогою вищезазначеного запиту на завивку), ми можемо спробувати натиснути на URL-адресу і перевірити, чи отримуємо ми назад стерп-відповідь від Wiremock.
Спробуємо натиснути цю URL-адресу у веб-переглядачі - http: // localhost: 8080 / get / user / 1
Якщо відображення було успішно встановлено, ви повинні отримати відповідь, як показано нижче:
Поряд з тестами JUnit як конфігурація правила JUnit
Сервер Wiremock можна використовувати з тестами JUnit як налаштування правила JUnit. Завдяки цьому JUnit піклується про життєвий цикл Wiremock, тобто Wiremock запускається і зупиняється.
веб-сайти для перегляду безкоштовних аніме англійською мовою
Він в основному використовується в установках, де ви хотіли б запускати і зупиняти сервер після кожного тесту.
Це має свої власні переваги - бути ізольованим і має високий ступінь налаштованості, на відміну від автономної установки, де кілька людей можуть в кінцевому підсумку використовувати один і той же сервер і переступати через затуплені відповіді один одного.
Давайте побачимо робочий приклад цього підходу:
# 1) Створіть правило JUnit для сервера Wiremock. Цей крок, по суті, схожий на крок налаштування тесту, де ми просимо бігун JUnit створити екземпляр сервера Wiremock перед кожним тестом і зупинити сервер після кожного тесту.
Це також означає, що JUnit runner подбає про запуск і зупинку сервера Wiremock, не роблячи цього явно.
@Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080));
# два) Тепер ми напишемо наш тест, де спочатку створимо наш клієнт (використовуючи okHttp) для виконання запитів щодо бажаної кінцевої точки.
// execute request through http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build();
# 3) Але, ви можете помітити тут, що ми все ще не встановили жодної заглушки для повернення для нашого екземпляра Wiremock. тобто вищезазначений клієнт запитає URL-адресу http: // localhost: 8080 / test / abc, яка не має жодного налаштованого заглушки. У цьому випадку сервер Wiremock поверне 404 ніякого вмісту.
# 4) Тепер, щоб встановити заглушку для вищевказаної URL-адреси для нашого екземпляра сервера Wiremock, нам доведеться викликати статичні методи заглушки Wiremock, як показано нижче.
private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); }
Тут ви бачите, що ми використовували кілька статичних методів, таких як configureFor, stubFor тощо. Всі ці методи є частиною бібліотеки Wiremock Java. (Ми детально розглянемо ці методи в нашому наступному підручнику / розділах)
# 5) Тепер, виконавши крок конфігурації, ми можемо просто виконати запит через клієнта та перевірити відповідь (залежно від того, що налаштовано для повернення заглушки через Wiremock)
Підводячи підсумок, ось як виглядатиме весь зразок коду:
public class WiremockJunitTest { @Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080)); @Test public void assertWiremockSetup() throws IOException { // Arrange - setup wiremock stubs configureStubs(); // execute request through the http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build(); // Act - call the endpoint Response response = client.newCall(request).execute(); // Assert - verify the response assertEquals('Test success!', response.body().string()); verify(exactly(1),getRequestedFor(urlEqualTo('/test/abc'))); } // configure stubs for wiremock private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); } }
Необхідні залежності
Він доступний як:
- Самостійний JAR, що містить лише залежність Wiremock.
- Баночка з жиром, що містить Wiremock та всі його залежності.
Обидва аромати доступні як залежності Gradle та Maven. Детальнішу інформацію можна отримати в офіційному сховищі Maven тут
Відео-посібник: Wiremock з тестом JUnit
Висновок
У цьому підручнику ми ознайомилися з основними особливостями Wiremock і побачили, як його можна запускати як автономний сервер, так і як частину тестів JUnit за допомогою правил JUnit.
Ми також торкнулися стислій коротко, і ми детально висвітлимо це в нашому наступному уроці.
НАСТУПНИЙ підручник
Рекомендована література
- Вступ до Micro Focus LoadRunner - Тестування навантаження за допомогою підручника №1 для LoadRunner
- Підручник з Ngrok: Короткий вступ до встановлення та налаштування
- Підручник з TestNG: Вступ до Framework TestNG
- Вступ до Selenium WebDriver - Підручник з селену №8
- Вступ до мови програмування Java - Підручник з відео
- Процес введення та встановлення Python
- Що таке Unix: короткий вступ до Unix
- Підручник Neoload: Введення, завантаження та встановлення Neoload