REST Клиентско тестване с помощта на Restito Tool

Съдържание:

Anonim

Какво е REST?

REST означава „Представяне на държавно представяне“, което е нов начин за комуникация между всякакви две системи в даден момент от времето. Едната от системите се нарича „REST Client“, а другата се нарича „REST Server“.

В този урок REST ще научите:

  • Какво е REST?
  • Какво е REST Client?
  • Какво е REST сървър?
  • Какво е Restito?
  • Как да тествате REST клиента с помощта на Restito?
  • Предимства на използването на Restito Framework за тестване на клиенти REST
  • Недостатъци на използването на Restito Framework за тестване на клиенти REST

Преди да научим за Restito Framework за тестване на клиенти REST, нека първо научим няколко основи.

Какво е REST Client?

REST Client е метод или инструмент за извикване на REST API на услугата, който е изложен за комуникация от всяка система или доставчик на услуги. Например: ако API е изложен, за да получи информация за трафика в реално време от Google, софтуерът / инструментът, който извиква API за трафик на Google, се нарича REST клиент.

Какво е REST сървър?

Това е метод или API, който е изложен на комуникация от която и да е система или доставчик на услуги. Например Google излага API, за да получи информация за трафика в реално време по даден маршрут.

Тук сървърът на Google трябва да работи и да работи, за да прослушва всякакви заявки към открития API от различни клиенти.

Пример:

Време е да се създаде пълен сценарий от край до край от горните дефиниции.

Нека разгледаме приложения за таксиметрови резервации като Uber, тъй като компанията се нуждае от информация в реално време за трафика около маршрутите, в които се намира дадено превозно средство.

Клиент за почивка:

Тук клиентът е мобилно приложение на Uber, в което шофьорът е влязъл. Това приложение изпраща заявка до REST API, изложен от Google Maps, за да получи данни в реално време. Например HTTP GET заявка.

Сървър за почивка:

В този пример Google е доставчик на услуги и API на Google Maps отговаря с необходимите подробности на заявката на приложението Uber.

И клиентът, и сървърът са еднакво важни в REST комуникацията.

Тук сме внедрили примери за автоматизирано тестване само на REST Client. За тестване на REST сървър вижте https://www.guru99.com/top-6-api-testing-tool.html.

Какво е Restito?

Restito е рамка, разработена от Mkotsur. Това е леко приложение, което ви помага да изпълнявате всякакъв вид HTTP заявка. Можете да използвате Restito, за да тествате своите REST API и да търсите проблеми във вашето приложение или вашата мрежа.

Как да тествате REST клиента с помощта на Restito?

Нека разделим упражнението на следните 4 стъпки:

  1. Създайте HTTP клиент и метод за изпращане на HTTP GET заявка до която и да е крайна точка на сървъра. Засега считайте крайната точка за http: // localhost: 9092 / getevents.
  1. Стартирайте сървър на Restito, за да слуша и заснема заявките, изпратени до крайната точка „getevents“ в localhost http: // localhost: 9092 / getevents.
  1. Създайте тестов клас, за да тествате горния клиент. Извикайте метода на HTTP клиента 'sendGETRequest', за да инициирате GET заявка към API 'getevents'.
  1. Проверете HTTP GET повикването с помощта на Restito framework.

Нека да се потопим дълбоко във всяка от горните стъпки.

Стъпка 1) Създайте HTTP клиент и метод за изпращане на HTTP GET заявка до всяка крайна точка на сървъра.

========== JAVA CODE стартира ===========

пакет com.chamlabs.restfulservices.client;импортиране на java.util.HashMap;импортиране на java.util.Map;импортиране на org.apache.http.client.HttpClient;импортиране на org.apache.http.client.methods.HttpGet;импортиране на org.apache.http.client.methods.HttpPost;импортиране на org.apache.http.entity.StringEntity;импортиране на org.apache.http.impl.client.HttpClientBuilder;импортиране org.json.JSONObject;/ *** Този клас създава HTTP клиент и има метод за изпращане на HTTP GET заявка:* sendGETRequest (...)* /публичен клас RestClient {/ *** Конструктор за класа RestClient* /публичен RestClient () {System.out.println ("Създаване на конструктор RestClient");}/ *** Метод за изпращане на GET заявка до http: // localhost: <
> / getevents* @param порт* @return true, ако GET заявката е изпратена успешно. Невярно, иначе.* /публичен статичен булев sendGETRequest (int порт) {опитвам {HttpClient клиент = HttpClientBuilder.create (). Build ();HttpGet getRequest = нов HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse отговор = client.execute (заявка);client.execute (getRequest);System.out.println („HTTP заявката е изпратена успешно.“+ "Връща се вярно");връщане вярно;}catch (Изключение e) {e.printStackTrace ();}System.out.println ("По време на създаването на HTTP клиента е възникнало някакво изключение."+ "Връщане на false");върнете false;}}

========== ЯВА КОД завършва ===========

Стъпка 2) Стартирайте сървър на Restito, за да слуша и заснема заявките, изпратени до крайната точка „getevents“ в localhost http: // localhost: 9092 / getevents.

========== JAVA CODE стартира ===========

пакет com.chamlabs.restfultesting.util;импортиране на статични com.xebialabs.restito.builder.stub.StubHttp.whenHttp;импортиране на статични com.xebialabs.restito.semantics.Action.status;импортиране на статични com.xebialabs.restito.semantics.Condition.get;импортиране на статични com.xebialabs.restito.semantics.Condition.post;импортиране на java.util.List;внос org.glassfish.grizzly.http.util.HttpStatus;импортиране на com.xebialabs.restito.semantics.Call;внос com.xebialabs.restito.server.StubServer;/ *** Този полезен клас съдържа няколко полезни метода като:* restartRestitoServerForGETRequests (...)* restartRestitoServerForPOSTRequests (...)* waitAndGetCallList (...)** @author cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /публичен клас TestUtil {/ *** Помощен метод за стартиране на restito stub сървър за приемане на GET заявки* @param сървър* @param порт* @param статус* /публично статично пусто рестартиранеRestitoServerForGETRequests (StubServer сървър, int порт, HttpStatus статус){// Убийте restito сървъраif (сървър! = нула) {server.stop ();}// Инициализиране и конфигуриране на по-нов екземпляр на сървъра за заглушаванесървър = нов StubServer (порт) .run ();когатоHttp (сървър) .match (get ("/ getevents")). then (статус (статус));}/ *** Помощен метод за стартиране на restito stub сървър за приемане на POST заявки* @param сървър* @param порт* @param статус* /публично статично пусто рестартиранеRestitoServerForPOSTRequests (StubServer сървър, int порт, HttpStatus статус){// Убийте restito сървъраif (сървър! = нула) {server.stop ();}// Инициализиране и конфигуриране на по-нов екземпляр на сървъра за заглушаванесървър = нов StubServer (порт) .run ();когатоHttp (сървър) .match (post ("/ postevents")). then (статус (статус));}/ *** За даден остатъчен сървър за заглушаване, цикъл за даденото количество секунди и* прекъснете и върнете списъка с повиквания от сървъра.** @param сървър* @param waitTimeInSeconds* @ завръщане* @throws InterruptException* /публичен статичен списък  waitAndGetCallList (StubServer сървър, int waitTimeInSeconds)изхвърля InterruptException{int timeoutCount = 0;Списък  callList = server.getCalls ();докато (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;ако (timeoutCount> = waitTimeInSeconds) {почивка;}callList = server.getCalls ();}// Изчакайте 2 секунди, за да включите всички обаждания в callList, за да елиминирате всякакви нестабилностиThread.sleep (2000);връщане на server.getCalls ();}}

========== ЯВА КОД завършва ===========

Стъпка 3) Създайте тестов клас, за да тествате горния клиент. Извикайте метода на HTTP клиента sendGETRequest, за да инициирате GET заявка към API „getevents“ на API.

========== JAVA CODE стартира ===========

импортиране на junit.framework.TestCase;импортиране на com.chamlabs.restfulservices.client.RestClient;импортиране на com.chamlabs.restfultesting.util.TestUtil;импортиране на com.xebialabs.restito.semantics.Call;внос com.xebialabs.restito.server.StubServer;импортиране на статични org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;импортиране org.json.JSONObject;импортиране на java.util.List;импортиране на java.util.Map;/ *** Този клас съдържа няколко теста за проверка за потвърждаване на операциите RestClient като:* изпрати заявка(… )* sendRequestWithCustomHeaders (...)* sendPOSTRequestWithJSONBody (...)** /публичен клас RestClientTester разширява TestCase {частен статичен краен Integer PORT = 9098;частен статичен краен Integer PORT2 = 9099;частен статичен краен Integer PORT3 = 9097;публичен RestClientTester () {System.out.println ("Стартиране на тестовия RestClientTester");}/ *** Junit тест за валидиране на GET заявката от RestClient* Стъпки:* 1) Създайте stub сървър, използвайки Restito framework и го конфигурирайте да слуша на даден порт* 2) Извикайте метода sendGETRequest (...) на RestClient* 3) Restito улавя съответстващите изпратени GET заявки, ако има такива.* 4) Проверете дали Restito е заснел някакви GET заявки за дадена крайна точка* Очаквано поведение:*> Restito трябва да е заснел GET заявка и трябва да е заснел само една GET заявка.* Накрая:*> Спрете сървъра за заглушаване, започнал да използва restito.* /public void testGETRequestFromClient () {StubServer сървър = нула;опитвам {// Това ще стартира заглушителния сървър на 'PORT' и ще отговори с HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (сървър, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Списък  callList = TestUtil.waitAndGetCallList (сървър, 30);assertTrue ("GET заявка не е получена от RestClient. Тестът е неуспешен.",(callList! = null) && (callList.size () == 1));}catch (Изключение e) {e.printStackTrace ();неуспешно ("Тестът е неуспешен поради изключение: + e);}накрая {if (сървър! = нула) {server.stop ();}}}

========== ЯВА КОД завършва ===========

Стъпка 4) Как да валидираме GET заявка със заглавки и POST заявка с тялото, използвайки Restito framework.

========== JAVA CODE стартира ===========

/ *** Junit тест за валидиране на GET заявката със заглавки от RestClient* Стъпки:* 1) Създайте stub сървър, използвайки Restito framework и го конфигурирайте да слуша на даден порт* 2) Извикайте метода sendGETRequestWithCustomHeaders (...) на RestClient* 3) Restito улавя съответстващите изпратени GET заявки, ако има такива.* 4) Проверете дали Restito е заснел някакви GET заявки за дадена крайна точка* Очаквано поведение:*> Restito трябва да е заснел GET заявка и трябва да е заснел само една GET заявка.*> Вземете заглавките на заснетата GET заявка* и се уверете, че заглавките съвпадат с тези, конфигурирани.* Накрая:*> Спрете сървъра за заглушаване, започнал да използва restito.* /public void testGETRequestWithHeadersFromClient () {StubServer сървър = нула;опитвам {// Това ще стартира заглушителния сървър на 'PORT' и ще отговори с HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (сървър, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Списък  callList = TestUtil.waitAndGetCallList (сървър, 30);assertTrue ("GET заявка не е получена от RestClient. Тестът е неуспешен.",(callList! = null) && (callList.size () == 1));// Проверка на заглавките на GET заявката от REST ClientMap > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET заявката съдържа заглавка Accept и нейната стойност",headersFromRequest.get ("Приемам"). съдържа ("текст / html"));assertTrue („GET заявката съдържа оторизация на заглавката и нейната стойност“,headersFromRequest.get ("Упълномощаване"). съдържа ("Приносител 1234567890qwertyuiop"));assertTrue ("GET заявката съдържа заглавка Cache-Control и нейната стойност",headersFromRequest.get ("Cache-Control"). съдържа ("no-cache"));assertTrue ("GET заявката съдържа заглавна връзка и нейната стойност",headersFromRequest.get ("Връзка"). съдържа ("поддържане на живо"));assertTrue („GET заявката съдържа заглавна Content-Type и нейната стойност“,headersFromRequest.get ("Тип съдържание"). съдържа ("application / json"));}catch (Изключение e) {e.printStackTrace ();неуспешно ("Тестът е неуспешен поради изключение: + e);}накрая {if (сървър! = нула) {server.stop ();}}}
/ *** Junit тест за валидиране на POST заявката с тяло и заглавки от RestClient* Стъпки:* 1) Създайте stub сървър, използвайки Restito framework и го конфигурирайте да слуша на даден порт* 2) Извикайте метода sendPOSTRequestWithJSONBody (...) на RestClient* 3) Restito улавя съответните изпратени POST заявки, ако има такива.* 4) Проверете дали Restito е заснел POST заявки за дадена крайна точка* Очаквано поведение:*> Restito трябва да е заснел POST заявка и трябва да е заснел само една POST заявка.*> Вземете тялото на заловената POST заявка и потвърдете JSON стойностите* Накрая:*> Спрете сървъра за заглушаване, започнал да използва restito.* /публичен тест за невалидностPOSTRequestWithJSONBody () {StubServer сървър = нула;опитвам {// Това ще стартира заглушителния сървър на 'PORT' и ще отговори с HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (сървър, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Списък  callList = TestUtil.waitAndGetCallList (сървър, 30);assertTrue ("POST заявката не е получена от RestClient. Тестът е неуспешен.",(callList! = null) && (callList.size () == 1));// Проверка на заглавките на GET заявката от REST ClientString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = нов JSONObject (requestBody);assertTrue ("TimeUpdated в json е неправилно",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token в json е неправилен",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Ref__token в json е неправилен",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Типът на символа в json е неправилен",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("носител"));assertTrue ("The expires_in в json е неправилен",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Обхватът в json е неправилен",postRequestJSON.get ("обхват"). toString (). equalsIgnoreCase (""));}catch (Изключение e) {e.printStackTrace ();неуспешно ("Тестът е неуспешен поради изключение: + e);}накрая {if (сървър! = нула) {server.stop ();}}}}

========== ЯВА КОД завършва ===========

Предимства на използването на Restito Framework за тестване на клиенти REST

Ето плюсовете / ползите от Restito Framework за тестване на клиенти на ReST

  • Не е нужно действителният REST сървър да бъде разработен, за да тестваме REST клиента.
  • Restito предоставя силни и разнообразни помощни програми и методи за подиграване на различното поведение на сървър. Например: За да тествате как REST клиентът се държи, когато сървърът отговори с HTTP 404 грешка или HTTP 503 грешка.
  • Restito сървърите могат да бъдат настроени за няколко милисекунди и могат да бъдат прекратени след приключване на тестовете.
  • Restito поддържа всички видове съдържание на HTTP метод като компресирано, некомпресирано, унифицирано, приложение / текст, приложение / JSON и др.

Недостатъци на използването на Restito Framework за тестване на клиенти REST

Тук има минуси / недостатъци на Restito Framework за тестване на клиенти на ReST

  • Източникът на клиент REST трябва да бъде променен, за да се счита „localhost“ като сървърна машина.
  • Отварянето на сървър във всеки порт може да възникне в конфликт, ако използваме някой често използван порт като „8080“ или „9443“ и т.н.
  • Препоръчително е да използвате портове като 9092 или 9099, които не се използват често от други инструменти.

Резюме:

  • REST означава "Представяне на държавен трансфер", което е нов стандартен начин за комуникация между всякакви две системи в даден момент от времето.
  • REST Client е метод или инструмент за извикване на REST API на услуга, който е изложен на комуникация от която и да е система или доставчик на услуги.
  • В метод RestServer или API, който е изложен за комуникация от която и да е система или доставчик на услуги.
  • Restito е леко приложение, което ви помага да изпълнявате всякакъв вид HTTP заявка
  • Създайте HTTP клиент и метод за изпращане на HTTP GET заявка до която и да е крайна точка на сървъра
  • Стартирайте Restito сървър, за да слуша и заснема заявките, изпратени до крайната точка „getevents“.
  • Стартирайте сървър на Restito, за да слуша и заснема заявките, изпратени до крайната точка „getevents“ в localhost
  • Тук сме внедрили примери за автоматизирано тестване само на REST Client.
  • Не е нужно действителният REST сървър да бъде разработен, за да тестваме REST клиента.
  • Източникът на клиент REST трябва да бъде променен, за да се счита „localhost“ като сървърна машина.

Тази статия е предоставена от Chandrasekhar Muttineni