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