wiremock tutorial introduction wiremock
V tomto úvodním výukovém videu budou vysvětleny funkce Wiremock a jak spustit Wiremock jako samostatný server a jako součást testů JUnit:
V tomto kurzu se budeme věnovat základním konceptům a podrobnostem nástroje Wiremock. Lze jej použít jako samostatný server HTTP i v rámci testů JUnit podle požadavků.
Jedná se o velmi používaný nástroj, protože je open-source a má velkou komunitu přispěvatelů. Spadá do kategorie nástrojů virtualizace služeb.
Co se naučíte:
Co je Wiremock?
Jednoduše řečeno, Wiremock je výsměšné nastavení pro integrační testy. Je to prostě falešný server, který je vysoce konfigurovatelný, aby vrátil očekávanou odpověď pro daný požadavek.
Je široce používán během vývoje a ještě důležitější během testování integrace, zatímco systém nebo služba mluví s jednou nebo více externími nebo interními závislostmi / službami.
Zkusme pochopit více o testování integrace obecně a poznejme, jak může Wiremock pomoci překonat tyto výzvy a usnadnit nám život.
Obecně, když přijde slovo integrace, co nás napadne, je integrace typu end to end mezi 2 komunikujícími systémy. Nyní se na to podívejme z pohledu testované aplikace, která k dokončení práce používá nějakou externí službu.
Například, Předpokládejme, že vytváříme aplikaci pro online cestování nebo systém jízdenek a máme modul pro kontrolu stavu PNR, který zasáhne externí API poskytované společností Indian Railways.
Jak můžeme integrační testovat naši aplikaci s externími API?
Existují 2 způsoby, jak toho dosáhnout:
- První, je přístup k testování jednotky, kde jsme odstranili rozhraní, které je poskytováno (nebo vytvořeno ve vlastní režii), takže náš systém testuje / ověřuje zablokovanou nebo falešnou odpověď ještě předtím, než zasáhne externí API. Není to nic jiného než test Unit, který se snaží zesměšňovat externí závislost.
- Druhý testuje externí testovací prostředí (nebo skutečné produkční prostředí). S tímto přístupem však existuje několik výzev, jak je uvedeno níže:
- Externí systémy API nemusí být vždy k dispozici. tj. jsme silně závislí nebo závislí na externích systémech a jakýkoli výpadek tam bude mít dopad na naše testy a nepřímo na proces vývoje / vydání.
- Za druhé, externí API mohou nebo nemusí mít testovací prostředí. Například, API pro kontrolu stavu PNR může vždy vyžadovat skutečná čísla PNR k načtení a vrácení odpovědí.
- Zasažení API je často spojené s náklady. Například, Předpokládejme, že API pro kontrolu PNR účtuje Rs 100 za každých 1000 požadavků. Vzhledem k tomu, že integrační testy se obvykle spouštějí během každé regrese (a většinu času při každém potvrzení), nemusí být nákladově efektivní řešení zasáhnout takové rozhraní API, které nás stojí i pro účely testování.
- Externí API nelze nakonfigurovat tak, aby vrátilo požadovanou odpověď. I když je to možné, budete muset vytvořit spoustu testovacích dat, abyste zajistili různé odpovědi na různé vstupy požadavků.
Například, chcete otestovat chybové scénáře, jako je API, které vrací různé stavové kódy pro různé typy dat. Nyní, protože odpověď není pod naší kontrolou, budeme muset vytvořit více sad dat, abychom ověřili různé možné scénáře nebo výsledky.
Pojďme pochopit tyto pojmy pomocí níže uvedeného diagramu.
Zde porovnáváme oba přístupy testování integrace, tj. Bez falešného serveru pomocí skutečné implementace externí závislosti a pomocí falešného serveru (Wiremock), který zesměšňuje odpovědi na požadavky přijaté pro závislost.
V druhém případě výrazně snižuje závislost a závislost na skutečné implementaci závislosti a poskytuje spoustu konfiguračních funkcí, aniž by byla ohrožena kvalita a plány dodání.
Jak Wiremock reaguje na daný požadavek?
Jak víme, Wiremock je programový Mock server, způsob, jakým reaguje na daný požadavek, je ukládání všech příslušných mapování (nebo zesměšňovaných odpovědí) do složky s názvem „mapování“
Existuje komponenta Wiremock pro porovnávání, která odpovídá příchozím požadavkům s uloženými mapováními a pokud se vrátí úspěšná shoda, vrátí se jako odpověď pro daný požadavek první taková shoda.
V případě, že používáte samostatnou verzi Wiremocku, po spuštění serveru Wiremock uvidíte složku mapování, která se vytvoří v adresáři Wiremock install / jar location.
Výukový program s videem: Úvod do nástroje Wiremock
rozdíl mezi alfa a beta testováním
Jak používat Wiremock?
Nyní se podívejme, jak můžeme tento nástroj použít v našich integračních testech.
Lze jej použít následujícími způsoby.
Samostatný server Wiremock
Jako samostatný server můžete jednoduše vytvořit jednoduchou aplikaci Java se závislostí Maven / Gradle pro Wiremock a ponechat ji jako běžící proces.
To je dobrá alternativa, pokud chcete hostovat svůj samostatný server na nějakém počítači a použít jej jako jeden zesměšňující server pro celý projekt nebo tým. V samostatném režimu lze tento nástroj spustit také stažením dostupné samostatné nádoby tady a jednoduše spustit nádobu.
Například, Předpokládejme, že chcete nasadit samostatnou instanci Wiremock na nějaký server v cloudu nebo na místním serveru, pak můžete jednoduše spustit tento jar a použít systémovou IP k jeho použití jako hostované služby.
Uvidíme některé kroky ke spuštění v samostatném režimu (a konfigurace různých věcí, jako jsou porty, složky mapování atd.)
# 1) Spusťte nádobu Wiremock z terminálu (nebo příkazového řádku pro uživatele systému Windows) jako jakýkoli jiný soubor JAR (z instalačního adresáře nádoby Wiremock).
java -jar wiremock-standalone-2.25.1.jar
#dva) Ve výchozím nastavení běží Wiremock na localhost: 8080 (pokud je port volný pro použití, výše uvedený příkaz spustí server Wiremock v samostatném režimu) a uvidíte výstup níže.
# 3) Jakmile se server spustí, můžete navštívit libovolnou adresu URL na localhost: 8080
Například, http: // localhost: 8080 / get / user / 1 - Vzhledem k tomu, že v současné době nejsou nastaveny žádné falešné zprávy, dostanete odpověď, jak je uvedeno níže.
# 4) Nyní zkusme pro tuto adresu URL nastavit jednoduchý stub / falešný pokus a zkuste adresu URL znovu použít. Poté ověříme, že zasažení stejné adresy URL nyní vrací posměšnou nebo zamyšlenou odpověď.
curl -X POST --data '{ 'request': { 'url': '/get/user/1', 'method': 'GET' }, 'response': { 'status': 200, 'body': 'Here it is!
' }}' http://localhost:8080/__admin/mappings/new
Zkusme nejprve porozumět tomuto požadavku CURL:
- Vytváříme požadavek CURL POST na http: // localhost: 8080 / __ admin / mappings / new - Nyní se jedná o místo, kde budou všechna mapování uložena pro server Wiremock, který jsme provedli / spustili prostřednictvím souboru JAR.
- V požadavku Curl definujeme parametry požadavku jako - URL a metoda požadavku spolu s tělem odpovědi v sekci „odpověď“. To jednoduše znamená, že kdykoli přijde požadavek GET s URL / get / user / 1, odpovězte zadaným tělem odpovědi.
# 5) Jakmile je nastavena odtržená odpověď (pomocí výše uvedeného požadavku na zvlnění), můžeme zkusit zasáhnout adresu URL a zjistit, zda dostáváme zpět odtrženou odezvu z Wiremocku.
Zkusme zasáhnout tuto adresu URL v prohlížeči - http: // localhost: 8080 / get / user / 1
Pokud bylo mapování úspěšně nastaveno, měli byste dostat odpověď, jak je znázorněno níže:
Spolu s testy JUnit jako konfigurací pravidla JUnit
Server Wiremock lze použít s testy JUnit jako nastavení pravidla JUnit. Díky tomu se JUnit stará o životní cyklus Wiremock, tj. Wiremock se spouští a zastavuje.
která z následujících možností je cesta k tlačítku „pořídit snímek obrazovky“?
Většinou se používá v instalacích, kde byste chtěli server po každém testu spustit a zastavit.
To má své vlastní výhody izolace a má vysoký stupeň konfigurovatelnosti na rozdíl od samostatného nastavení, kdy více lidí může skončit pomocí stejného serveru a překračovat navzájem útržkovité odpovědi.
Podívejme se na funkční příklad tohoto přístupu:
# 1) Vytvořte pravidlo JUnit pro server Wiremock. Tento krok je v podstatě jako krok nastavení testu, kde říkáme běžci JUnit, aby před každým testem vytvořil instanci serveru Wiremock a po každém testu server zastavil.
To také znamená, že běžec JUnit se postará o spuštění a zastavení serveru Wiremock, aniž by to výslovně udělal.
@Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080));
#dva) Nyní napíšeme náš test, kde nejprve vytvoříme našeho klienta (pomocí okHttp) k provádění požadavků proti požadovanému koncovému bodu.
// execute request through http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build();
# 3) Ale zde si můžete všimnout, že jsme pro naši instanci Wiremock stále nenastavili žádný útržek, který má být vrácen. tj. výše uvedený klient bude požadovat adresu URL http: // localhost: 8080 / test / abc, která nemá žádný nakonfigurovaný pahýl. V tomto případě server Wiremock nevrátí žádný obsah 404.
# 4) Nyní, abychom nastavili pahýl pro výše uvedenou adresu URL pro naši instanci serveru Wiremock, budeme muset zavolat statické metody útržku Wiremock, jak je uvedeno níže.
private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); }
Zde vidíte, že jsme použili několik statických metod, jako je configureFor, stubFor atd. Všechny tyto metody jsou součástí knihovny Wiremock Java. (Na tyto metody se podíváme podrobně v našem dalším tutoriálu / sekcích)
# 5) Nyní, když je konfigurační krok hotový, můžeme jednoduše provést požadavek prostřednictvím klienta a ověřit odpověď (v závislosti na tom, co je nakonfigurováno, aby se stub vrátil přes Wiremock)
Abychom to shrnuli, takto vypadá celý ukázka kódu:
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!'))); } }
Závislosti jsou povinné
Je k dispozici jako:
- Samostatný JAR obsahující pouze závislost Wiremock.
- Tučná nádoba obsahující Wiremock a všechny jeho závislosti.
Obě příchutě jsou k dispozici jako závislosti Gradle a Maven. Další podrobnosti jsou k dispozici v oficiálním úložišti Maven tady
Výukový program pro video: Wiremock s testem JUnit
Závěr
V tomto kurzu jsme prošli základními funkcemi Wiremocku a zjistili jsme, jak jej lze spustit jako samostatný server a jako součást testů JUnit pomocí pravidel JUnit.
Také jsme se stručně dotkli píchnutí a podrobně se tomu budeme věnovat v našem dalším výukovém programu.
DALŠÍ výuka
Doporučené čtení
- Úvod do nástroje Micro Focus LoadRunner - testování zatížení pomocí průvodce LoadRunner # 1
- Výukový program Ngrok: Stručný úvod k instalaci a nastavení
- Výukový program TestNG: Úvod do TestNG Framework
- Úvod do selenu WebDriver - Selenium Tutorial # 8
- Úvod do programovacího jazyka Java - výukový program
- Proces zavedení a instalace Pythonu
- Co je Unix: Stručný úvod do Unixu
- Výukový program pro Neoload: Úvod do hry Neoload, stahování a instalace