rest api testing with spring resttemplate
Tento podrobný výukový program vysvětluje, jak začít s testováním REST API pomocí Spring RestTemplate a TestNG s jednoduchými příklady:
V tomto článku uvidíme, jak začít s testováním REST API pomocí RestTemplate a TestNG framework.
Než prozkoumáme REST API Testing s RestTemplate a TestNG frameworkem, pojďme pochopit některé základní pojmy, které jsou v něm obsaženy.
Začněme!!
Co se naučíte:
- Co je REST?
- Co je JSON?
- Co je testování REST API?
- Co je TestNG?
- Co je šablona Spring REST?
- Kroky testování REST API
- Nastavení TestNG Test Framework v systému Windows
- Vyplňte kód souboru TestCRUD
- Závěr
- Doporučené čtení
Co je REST?
V dnešní době se REST stal velmi populární volbou při vytváření webových služeb. Například , Google má několik služeb REST, jako je Calendar, Map API , atd.
ODPOČINEK tj. Převod reprezentativního státu je softwarový architektonický styl. V tomto stylu je definována sada omezení a pro splnění těchto omezení jsou vyžadovány vytvořené webové služby. Takové webové služby vyhovující architektonickému stylu REST jsou známé jako RESTful Web Services.
Pojem „přenos reprezentativního státu“ jako první navrhl Roy Fielding v jeho Ph.D. disertační práce v roce 2000. Základní myšlenkou RESTu je zacházet s objekty na straně serveru jako se zdroji, které lze vytvářet nebo mazat.
Co je JSON?
JSON tj. JavaScript Object Notation je velmi běžně používaná syntaxe ve službách REST pro ukládání a výměnu dat mezi prohlížečem a serverem.
Hlavní výhodou JSON je jeho odlehčený a zadruhé také jeho čitelný formát. Data jsou uložena ve formátu dvojice klíč: hodnota. Například, můžete mít data zaměstnanců uložená ve formátu JSON takto: {„name“: „Emp1“, „plat“: „3000“, „věk“: „23“, „id“: „52686“ “.
Co je testování REST API?
Když řekneme testování REST API, jedná se v zásadě o testování API provedením akcí Create, Edit, Read a Delete na Resource pomocí 4 hlavních metod, tj. POST, GET, PUT a DELETE
Co je TestNG?
TestNG je testovací rámec, který je inspirován JUnit a NUnit. Je to pro programovací jazyk Java. TestNG pokrývá širší škálu testovacích kategorií, jako jsou jednotky, funkce, end-to-end, integrace atd.
Jedná se o open-source framework, který spadá pod licenci Apache. Poskytuje bohatou sadu anotací, které urychlují vývoj testovacího skriptu.
Co je šablona Spring REST?
Třída Spring RestTemplate je součástí jarního webu, který byl představen na jaře 3
Třída RestTemplate poskytuje velmi pohodlný způsob, jak otestovat klidné webové služby založené na protokolu HTTP poskytnutím přetížených metod pro metody HTTP, jako je GET, POST, PUT, DELETE atd. Jarní rámec je také otevřený.
Kroky testování REST API
Pojďme pochopit kroky, které jsou obvykle dodržovány v REST API Testování s některými příklady, abychom získali jasné pochopení.
V tomto článku jsem zvažoval jednu ukázkovou zaměstnaneckou službu REST API od tento zdroj.
Nejprve postupujte podle pokynů ručně pomocí nástroje POSTMAN.
# 1) Nejprve znáte koncový bod rozhraní API, ke kterému chcete získat přístup.
Například, http://dummy.restapiexample.com/api/v1/vytvořte a vytvořte nový zdroj pro zaměstnance
#dva) Pokud je to pro metodu HTTP vyžadováno, nastavte záhlaví a tělo.
V našem příkladu se pokoušíme vytvořit nový zdroj pomocí POST. Pro POST je vyžadován text požadavku.
Nastavíme tedy tělo následovně:
„Name“: „zozo100“, „plat“: „123“, „věk“: „23“
Přijmout : aplikace / JSON a Typ obsahu : aplikace / JSON.
nejlepší špionážní aplikace pro Android
# 3) V tomto případě nastavte příslušnou metodu HTTP, tj. POST.
# 4) Odešlete požadavek na server služby Rest.
# 5) Přijměte odpověď ze serveru.
Volání REST API pomocí nástroje POSTMAN
# 6) Ověřte odpověď podle očekávání pomocí kódu odpovědi Např. 200 OK jako úspěch.
# 7) Pokud je to požadováno, ověřte tělo odpovědi podle očekávání porovnáním s referenčním souborem.
Nyní musíme automatizovat stejné kroky pro naši sadu Test Automation. Začněme s nastavením požadovaným pro automatizaci.
Nastavení TestNG Test Framework v systému Windows
# 1) Instalace
- Pro vývoj testovacího skriptu použijeme Javu. Takže první stažení Instalační program JDK pro Windows a nainstalujte do svého počítače Java.
- IDE (Integrated Development Environment) : Pro svůj vývoj Automation Test Suite jsem použil Eclipse jako IDE. Klepněte na tady stáhnout.
- Získejte zásuvný modul Eclipse pro TestNG: Upozorňujeme, že pro spuštění TestNG pro zásuvný modul Eclipse je vyžadována Java 1.7+. Je vyžadováno Eclipse 4.2 a vyšší. [Odkaz: TestNG ]. Postupujte podle následujících kroků v Eclipse:
- Vyberte Nápověda / Instalovat nový software.
- Klikněte na Přidat -> Zadejte http://beust.com/eclipse/
- Zaškrtněte políčko vedle adresy URL a klikněte na tlačítko Další.
Instalace TestNG
-
- Stále klikejte na tlačítko Další, dokud se nedostanete na následující obrazovku.
Závěrečná obrazovka instalace TestNG
Nakonec přijměte licenční smlouvu Apache a dokončete instalaci kliknutím na tlačítko Dokončit.
Restartujte Eclipse, abyste provedli instalaci modulu plug-in.
- Jarní sklenice: Ještě jedna poslední věc, použijeme třídu RestTemplate z jarního rámce. Můžeš stáhnout jarní sklenice a uložte jej do místní složky, Například ,C: / projectJar
- Jednoduché nádoby JSON: Musíme provést analýzu JSON. K tomu použijeme odlehčené rozhraní Json-simple API. Stáhněte si tedy Json-simple-1.1.jar do C: / projectJar
Nyní jsme dokončili potřebné instalace. Pojďme tedy vytvořit náš projekt Test Automation.
# 2) Nastavení projektu
- Vytvořit soubor -> Nový -> Projekt Java -> Pojmenujte jej jako „ EmployeeTestSuite “.
- Nyní vytvořte nový balíček Java com. demo :
- Konfigurovat cestu sestavení:
- Jak jste viděli v předchozí části, nainstalovali jsme TestNG, stáhli jsme jarní a JSON-jednoduché sklenice. Takže nyní musíme do našeho projektu přidat cestu sestavení, abychom je spotřebovali. K tomu vytvořte a lib složka v EmployeeTestSuite složku a nyní zkopírujte všechny sklenice z C: / projectJar do lib složku.
- Klikněte pravým tlačítkem na „ EmployeeTestSuite ““ -> Cesta sestavení -> Konfigurovat cestu sestavení.
- Klikněte na lib záložka.
- Klikněte na Přidat knihovnu tlačítko -> Vyberte TestNG. Tím se do cesty sestavení přidá TestNG.
- Klikněte na Přidejte sklenice tlačítko -> Vybrat všechny sklenice z lib. Tím se do cesty sestavení projektu přidají všechny jarní sklenice a jednoduchá nádoba JSON.
Cesta sestavení Java
Struktura vašeho projektu se nyní v Průzkumníku balíčků Eclipse zobrazí následovně.
Struktura balíčku
# 3) Testovací třída
Musíme vytvořit třídu Test, která může pokrývat operace CRUD (Create-Read-Update-Delete).
Vytvořte novou třídu Soubor -> Nový -> třída TestNG a pojmenujte ji TestCRUD.java
# 4) Zkušební metoda
Vytvořme samostatné testovací metody:
- addEmployee (): Testovací metoda k otestování Vytvořit API pomocí metody HTTP POST.
- getEmployee (): Testovací metoda k otestování rozhraní Read API pomocí metody HTTP GET.
- updateEmployee (): Testovací metoda k testování Update API pomocí metody HTTP PUT.
- deleteEmployee (): Testovací metoda k otestování Delete API pomocí metody HTTP DELETE.
Můžete vytvořit testovací metodu jako jakoukoli metodu Java pouze s anotací @Test TestNG, abyste ji identifikovali jako testovací metodu v rámci TestNG
Například,Následuje testovací metoda addEmployee.
@Test public void addEmployee () {}
V našem příkladu jsem použil a ukázková služba REST.
Nyní automatizujme POST volání. K tomu potřebujeme namapovat náš kód pomocí kroků, které jsme postupovali ručně v sekci „REST API Testing Steps“ jeden po druhém.
# 1) Nejprve poznejte koncový bod rozhraní API, ke kterému chcete přistupovat.
String addURI = 'http://dummy.restapiexample.com/api/v1/create';
#dva) Nastavte záhlaví pro metodu HTTP.
HttpHeaders headers = new HttpHeaders();
// Přidat záhlaví
headers.add('Accept', 'application/json'); headers.add('Content-Type', 'application/json');
Nastavit tělo pro metodu HTTP.
String jsonBody = '{'name':'zozo100','salary':'123','age':'23'}';
// Vytvořte objekt HttpEntity nastavením těla a záhlaví.
HttpEntity entity = new HttpEntity(jsonBody, headers);
Následující kroky budeme mít automatizované v jednom prohlášení.
# 3) V tomto případě nastavte příslušnou metodu HTTP, tj. POST.
# 4) Odešlete požadavek na server služeb RESTful.
# 5) Přijměte odpověď ze serveru.
RestTemplate restTemplate = new RestTemplate(); ResponseEntity response =restTemplate.postForEntity(addURI, entity, String.class);
Používáme postForEntity k odeslání metody POST na server. Odpověď dostáváme od objektu ResponseEntity serveru.
# 6) Ověřte odpověď podle očekávání pomocí kódu odpovědi.
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
Tady používáme třídu nástroje Assert TestNG k ověření metody stavového kódu assertEquals, která porovnává skutečnou hodnotu, tj. Response.getStatusCode (), s očekávanou hodnotou HttpStatus.OK.
Ale tady provádíme ještě jedno ověření, tj. Ověření, zda je přidaný zaměstnanec v těle odpovědi přítomen nebo ne.
Assert.assertTrue(responseBody.contains(employeeId));
Jak jsme se dostali k identifikátoru zaměstnance?
K tomu využíváme pomoc JSON parser API, tj. Json-simple.
Používáme analyzátor JSON, protože formát JSON se používá pro ukládání a výměnu dat mezi klientem a naším serverem v naší zaměstnanecké službě REST. Jak již bylo zmíněno dříve, data JSON jsou uložena v klíč: hodnota formát. Tady chceme získat „Id“ hodnota.
Získáme to analýzou těla odpovědi následujícím způsobem:
JSONParser parser = new JSONParser(); // Instantiate JSONParser object JSONObject jsonResponseObject = new (JSONObject) parser.parse(jsonString); //Parse jsonString i.e. Response body string in json format to JSON object String employeeId = jsonResponseObject.get('id').toString(); // Get id attribute
Jedná se tedy o test metody Create.
Aktualizujte, získejte a mazejte metody
- Vytvořte samostatné testovací metody a nastavte záhlaví podle potřeby.
- Obdobně se také provádí ověření stavového kódu.
- Hlavním rozdílem jsou metody pro odeslání požadavku na servery.
Můžete použít následující metody:
# 1) Aktualizujte zaměstnance : Jedná se o požadavek HTTP PUT. Metoda RestTemplate PUT, kterou můžete použít, je:
public void put(String url,Object request, Object... urlVariables) throws RestClientException
# 2) Získejte zaměstnance: Jedná se o požadavek HTTP GET. Metoda RestTemplate GET, kterou můžete použít, je následující:
public ResponseEntity getForEntity(String url, Class responseType, Object... urlVariables) throws RestClientException
# 3) Odstranit prostředek zaměstnance: Jedná se o požadavek HTTP DELETE. Metoda RestTemplate DELETE, kterou můžete použít, je:
public void delete(String url, Object... urlVariables) throws RestClientException
Kromě těchto metod existují užitečné metody exchange () a execute ().
Například, pokud si všimnete, metoda Delete je neplatná. Ale pokud chcete ověřit tělo odpovědi, budete potřebovat odpověď zpět z provedení metody. Za tímto účelem můžete použít metodu exchange (), která vrací ResponseEntity. Odkazovat na Jarní rámec Více podrobností.
# 5) Provádění testů
Nyní jsme dokončili vývojovou úlohu testovacího skriptu, tak pojďme spustit naše testy. Stačí kliknout pravým tlačítkem na TestCRUD.java a vyberte možnost ‚Spustit jako TestNG Test ' .
Zobrazí se výsledky provedení testu následujícím způsobem.
Výstup konzoly
Poznámka: Svou testovací sadu můžete definovat v testng.xml soubor také. V našem příkladu je to pouze jeden testovací skript. Ve skutečném scénáři však vždy jde o kolekci více skriptů.
Váš soubor testg.xml bude tedy vypadat takto:
# 6) Zprávy
Výsledek jsme viděli na konzole. Ale TestNG poskytuje výsledky testů v reprezentativnějším formátu html, který lze sdílet se zúčastněnými stranami. Otevřeno test-výstup -> emailable-report.html v prohlížeči.
Zpráva o testu se zobrazí následovně. Na stránce sestavy můžete vidět název testu jako TestCRUD, několik úspěšných testů, tj. 4, počet přeskočených a neúspěšných, které jsou v tomto případě 0. Také ukazuje celkový čas potřebný pro provedení každé testovací metody.
Výsledek testu ve formátu HTML
Vyplňte kód souboru TestCRUD
package com.demo; import java.io.IOException; import java.text.ParseException; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.testng.log4testng.Logger; /** * This test class has test methods for CRUD actions on REST API * REST Service http://dummy.restapiexample.com/api * * It has test methods for Create , Edit , Get and Delete Employee items * https://docs.spring.io/spring-framework/docs/current/javadoc- api/org/springframework/web/client/RestTemplate.html * https://docs.spring.io/autorepo/docs/spring/3.2.3.RELEASE/javadoc- api/org/springframework/web/client/RestTemplate.html * @author * */ public class TestCRUD { private String responseBody; public String responseBodyPOST; final static Logger logger = Logger.getLogger(TestCRUD.class); //RESTTemplate Object private RestTemplate restTemplate; //Employee ID private String employeeId; // Create Response Entity - Stores HTTPStatus Code, Response Body, etc private ResponseEntity response; @BeforeTest public void beforeTest() throws IOException, ParseException { logger.info('Setting up prerequisite for test execution'); logger.info('Creating RestTemplate object before tests'); this.restTemplate = new RestTemplate(); } /** * Test Method to add employee using HTTP POST request * * Verifies POST action Status Code * * @throws IOException * @throws ParseException */ @Test public void addEmployee() throws IOException, ParseException { String addURI = 'http://dummy.restapiexample.com/api/v1/create'; HttpHeaders headers = new HttpHeaders(); headers.add('Accept', 'application/json'); headers.add('Content-Type', 'application/json'); logger.info('Add URL :'+addURI); String jsonBody = '{'name':'zozo100','salary':'123','age':'23'}'; System.out.println('
' + jsonBody); HttpEntity entity = new HttpEntity(jsonBody, headers); //POST Method to Add New Employee response = this.restTemplate.postForEntity(addURI, entity, String.class); responseBodyPOST = response.getBody(); // Write response to file responseBody = response.getBody().toString(); System.out.println('responseBody --->' + responseBody); // Get ID from the Response object employeeId = getEmpIdFromResponse(responseBody); System.out.println('empId is :' + employeeId); // Check if the added Employee is present in the response body. Assert.assertTrue(responseBody.contains(employeeId)); // System.out.println(propertyFile.get('EmployeeAddResBody')); // Check if the status code is 201 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); logger.info('Employee is Added successfully employeeId:'+employeeId); } /** * Method to get Employee ID from REsponse body * I have used Json Simple API for Parsing the JSON object * * @param json * @return */ public static String getEmpIdFromResponse(String json) { JSONParser parser = new JSONParser(); JSONObject jsonResponseObject = new JSONObject(); Object obj = new Object(); try { obj = parser.parse(json); } catch (org.json.simple.parser.ParseException e) { e.printStackTrace(); } jsonResponseObject = (JSONObject) obj; String id = jsonResponseObject.get('id').toString(); return id; } /** * Test Method to Update employee using HTTP PUT request * * Verifies PUT action Status Code * Verifies Updated Name exists in Response Body * * @throws IOException * @throws ParseException */ @Test(dependsOnMethods = 'addEmployee', enabled = true) public void updateEmployee() throws IOException, ParseException { String updateURI = 'http://dummy.restapiexample.com/api/v1/update/'+employeeId; logger.info('Update URL :'+updateURI); String jsonBody = responseBodyPOST; jsonBody = jsonBody.replace('zozo100', 'update_zozo100'); HttpHeaders headers = new HttpHeaders(); headers.add('Accept', 'application/json'); headers.add('Content-Type', 'application/json'); HttpEntity entity = new HttpEntity(jsonBody, headers); //PUT Method to Update the existing Employee //NOTE that I have Not used restTemplate.put as it's void and we need response for verification response = restTemplate.exchange(updateURI, HttpMethod.PUT, entity, String.class); responseBody = response.getBody().toString(); System.out.println('Update Response Body :'+responseBody); // Check if the updated Employee is present in the response body. Assert.assertTrue(responseBody.contains('update_zozo100')); // Check if the status code is 200 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); logger.info('Employee Name is Updated successfully employeeId:'+employeeId); } /** * Test Method to Get employee using HTTP GET request * * Verifies GET action Status Code * Verifies Name exists in Response Body * * @throws IOException * @throws ParseException */ @Test(dependsOnMethods = 'updateEmployee', enabled = true) void getEmployee() throws IOException, ParseException { String getURI = 'http://dummy.restapiexample.com/api/v1/employee/'+this.employeeId; logger.info('Get URL :'+getURI); HttpHeaders headers = new HttpHeaders(); HttpEntity entity = new HttpEntity(headers); //GET Method to Get existing Employee response = restTemplate.getForEntity(getURI,String.class); // Write response to file responseBody = response.getBody().toString(); //Suppressing for log diffs System.out.println('GET Response Body :'+responseBody); // Check if the added Employee ID is present in the response body. Assert.assertTrue(responseBody.contains('update_zozo100')); // Check if the status code is 200 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); logger.info('Employee is retrieved successfully employeeId:'+employeeId); } /** * Test Method to Delete employee using HTTP DELETE request * * Verifies DELETE action Status Code * Verifies Success Message Text in Response Body * * @throws IOException * @throws ParseException */ @Test(dependsOnMethods = 'getEmployee', enabled = true) public void deleteEmployee() throws IOException, ParseException { String delURI = 'http://dummy.restapiexample.com/api/v1/delete/'+this.employeeId; HttpHeaders headers = new HttpHeaders(); HttpEntity entity = new HttpEntity(headers); //DELETE Method to Delete existing Employee response = restTemplate.exchange(delURI, HttpMethod.DELETE, entity, String.class); // Check if the status code is 204 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); responseBody = response.getBody(); Assert.assertEquals(getMessageFromResponse(responseBody), 'successfully! deleted Records'); logger.info('Employee is Deleted successfully employeeId:'+employeeId); } /** * Gets 'text' key value from Response body text for verification * I have used Json Simple API for Parsing the JSON object * * @param json * @return text string */ public static String getMessageFromResponse(String json) { String successMessageText = null; try { JSONParser parser = new JSONParser(); JSONObject jsonResponseObject = new JSONObject(); jsonResponseObject = (JSONObject) (parser.parse(json)); String successMessage = jsonResponseObject.get('success').toString(); jsonResponseObject = (JSONObject) (parser.parse(successMessage)); successMessageText = jsonResponseObject.get('text').toString(); } catch (org.json.simple.parser.ParseException e) { e.printStackTrace(); } return successMessageText; } @AfterTest public void afterTest() { logger.info('Clean up after test execution'); logger.info('Creating RestTemplate object as Null'); this.restTemplate = new RestTemplate(); } }
Závěr
Níže jsme shrnuli výsledky učení tohoto článku. Viděli jsme všechny kroky od začátku, abychom nastavili REST API Test Automation Framework.
V tomto jsme se naučili následující:
- Pro automatizaci testů jsme vybrali programovací jazyk Java.
- Zvolili jsme TestNG jako testovací rámec pro vytvoření testovacího skriptu, kde jsme spotřebovali anotace TestNG jako @Test.
- Pro odesílání skutečných požadavků HTTP na server jsme spotřebovali třídu Spring Framework RestTemplate.
- Pro konzumaci těchto API jsme provedli instalaci TestNG, stáhli jsme si jarní sklenice a Json-simple jar pro API analyzátoru.
- Nakonec jsme provedli třídu Test a výsledek jsme viděli na konzole i ve více prezentovatelném a čitelnějším formátu HTML.
Stručně řečeno, v tomto článku jsme se naučili, jak začít s automatizací testu REST API pomocí Spring RestTemplate. Pokryli jsme nastavení našeho rámce automatizace testů od instalace veškerého základního softwaru, nastavení projektu, vývoje testovacího skriptu až po provedení testu a prohlížení vygenerovaných zpráv.
zobrazit propojený seznam c ++
To je dostačující pro jakoukoli QA automatizace, abyste mohli začít s vaším testovacím automatizačním rámcem. Z každé jsme ale viděli pouze požadované části. Například jsme použili instalaci TestNG, testovací metodu používající anotaci @Test, zprávy. TestNG však poskytuje mnohem více funkcí, jako je DataProvider pro testování založené na datech atd.
Jste připraveni začít s automatizací testu REST API pomocí Spring RestTemplate?
Doporučené čtení
- 10 nejlepších nástrojů pro testování API v roce 2021 (nástroje pro testování API SOAP a REST)
- Nejlepší nástroje pro testování softwaru 2021 [QA Test Automation Tools]
- Testování stahování e-knih Primer
- Top 20 nejdůležitějších API testů Interview Otázky a odpovědi
- Zjednodušení testování API pomocí Katalon Studio
- Výukový program Parasoft SOAtest: Nástroj pro testování API bez skriptů
- Testování zátěže s výukovými programy HP LoadRunner
- Rozdíl mezi desktopem, klientským serverem a webovým testováním