Что такое ОТДЫХ?
REST расшифровывается как «REpresentational State Transfer», что представляет собой новый способ связи между любыми двумя системами в данный момент времени. Одна из систем называется «Клиент REST», а другая - «Сервер REST».
В этом руководстве по REST вы узнаете:
- Что такое ОТДЫХ?
- Что такое клиент REST?
- Что такое REST-сервер?
- Что такое Рестито?
- Как протестировать REST-клиент с помощью Restito?
- Преимущества использования Restito Framework для тестирования клиентов REST
- Недостатки использования Restito Framework для тестирования клиентов REST
Прежде чем узнать о Restito Framework для тестирования клиентов REST, давайте сначала познакомимся с некоторыми основами.
Что такое клиент REST?
Клиент REST - это метод или инструмент для вызова API службы REST, предоставляемый для связи любой системой или поставщиком услуг. Например: если API доступен для получения информации о трафике в реальном времени от Google, программное обеспечение / инструмент, вызывающий API трафика Google, называется клиентом REST.
Что такое REST-сервер?
Это метод или API, доступ к которому предоставляется любой системой или поставщиком услуг. Например, Google предоставляет API для получения информации о загруженности дорог в реальном времени на заданном маршруте.
Здесь сервер Google должен быть запущен и работать для прослушивания любых запросов к открытому API от разных клиентов.
Пример:
Пришло время создать полный сквозной сценарий на основе приведенных выше определений.
Давайте рассмотрим приложения для заказа такси, такие как Uber, поскольку компании нужна информация в режиме реального времени о дорожной обстановке вокруг маршрутов, на которых находится данное транспортное средство.
Остальные клиенты:
Здесь клиент - мобильное приложение Uber, в которое вошел водитель. Это приложение отправляет запрос к REST API, предоставляемому картами Google, для получения данных в реальном времени. Например, запрос HTTP GET.
Сервер отдыха:
В этом примере Google является поставщиком услуг, а API карт Google отвечает с необходимой информацией на запрос приложения Uber.
И клиент, и сервер одинаково важны для связи REST.
Здесь мы реализовали примеры для автоматического тестирования только клиента REST. Для тестирования сервера REST см. Https://www.guru99.com/top-6-api-testing-tool.html.
Что такое Рестито?
Restito - это фреймворк, разработанный Мкоцуром. Это легкое приложение, которое поможет вам выполнить любой 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.
Давайте углубимся в каждый из вышеперечисленных шагов.
Шаг 1) Создайте HTTP-клиент и метод для отправки HTTP-запроса GET на любую конечную точку сервера.
========== Запуск кода JAVA ===========
пакет com.chamlabs.restfulservices.client;import java.util.HashMap;import java.util.Map;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClientBuilder;import org.json.JSONObject;/ *** Этот класс создает HTTP-клиента и имеет метод для отправки HTTP-запроса GET:* sendGETRequest (…)* /public class RestClient {/ *** Конструктор для класса RestClient* /public RestClient () {System.out.println («Создание конструктора RestClient»);}/ *** Метод отправки запроса GET на http: // localhost: <> / getevents* @param порт* @return true, если запрос GET отправлен успешно. В противном случае - ложь.* /общедоступное статическое логическое значение sendGETRequest (int port) {пытаться {HttpClient client = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + порт + "/ getevents");// HttpResponse response = client.execute (запрос);client.execute (getRequest);System.out.println ("HTTP-запрос успешно отправлен."+ "Возвращение Истины");вернуть истину;}catch (Exception e) {e.printStackTrace ();}System.out.println ("При создании HTTP-клиента возникла какая-то исключительная ситуация."+ "Вернув ложь");вернуть ложь;}}
========== КОД JAVA заканчивается ===========
Шаг 2) Запустите сервер Restito, чтобы прослушивать и захватывать запросы, отправленные на конечную точку getevents в localhost http: // localhost: 9092 / getevents.
========== Запуск кода JAVA ===========
пакет com.chamlabs.restfultesting.util;import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp;импортировать статический com.xebialabs.restito.semantics.Action.status;import static com.xebialabs.restito.semantics.Condition.get;import static com.xebialabs.restito.semantics.Condition.post;import java.util.List;import org.glassfish.grizzly.http.util.HttpStatus;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;/ *** Этот служебный класс содержит несколько служебных методов, например:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @author cham6* @ электронная почта: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /public class TestUtil {/ *** Утилита для запуска сервера-заглушки restito для приема запросов GET* сервер @param* @param порт* @param status* /public static void restartRestitoServerForGETRequests (сервер StubServer, порт int, статус HttpStatus){// Убиваем рестито-серверif (server! = null) {server.stop ();}// Инициализируем и настраиваем новый экземпляр заглушки сервераserver = новый StubServer (порт) .run ();whenHttp (server) .match (get ("/ getevents")). then (status (статус));}/ *** Утилита для запуска сервера-заглушки restito для приема запросов POST* сервер @param* @param порт* @param status* /public static void restartRestitoServerForPOSTRequests (сервер StubServer, порт int, статус HttpStatus){// Убиваем рестито-серверif (server! = null) {server.stop ();}// Инициализируем и настраиваем новый экземпляр заглушки сервераserver = новый StubServer (порт) .run ();whenHttp (server) .match (post ("/ postevents")). then (status (статус));}/ *** Для данного сервера заглушки restito выполните цикл в течение заданного количества секунд и* прервать и вернуть список звонков с сервера.** сервер @param* @param waitTimeInSeconds* @возвращаться* @throws InterruptedException* /общедоступный статический списокwaitAndGetCallList (сервер StubServer, int waitTimeInSeconds)выбрасывает InterruptedException{int timeoutCount = 0;Список callList = server.getCalls ();while (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {перемена;}callList = server.getCalls ();}// Подождите 2 секунды, чтобы получить все вызовы в callList, чтобы устранить любую фальшивость.Thread.sleep (2000);возврат server.getCalls ();}}
========== КОД JAVA заканчивается ===========
Шаг 3) Создайте тестовый класс для тестирования указанного выше клиента. Вызовите метод sendGETRequest клиента HTTP, чтобы инициировать запрос GET к API 'getevents'.
========== Запуск кода JAVA ===========
import junit.framework.TestCase;import com.chamlabs.restfulservices.client.RestClient;import com.chamlabs.restfultesting.util.TestUtil;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;import static org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Этот класс содержит несколько тестов junit для проверки операций RestClient, например:* послать запрос(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /открытый класс RestClientTester расширяет TestCase {частное статическое конечное целое число PORT = 9098;частное статическое конечное целое число PORT2 = 9099;частное статическое конечное целое число PORT3 = 9097;public RestClientTester () {System.out.println («Запуск теста RestClientTester»);}/ *** Тест Junit для проверки запроса GET от RestClient* Шаги:* 1) Создайте тупиковый сервер, используя структуру Restito, и настройте его для прослушивания данного порта* 2) Вызвать метод sendGETRequest (…) RestClient* 3) Restito фиксирует соответствующие отправленные запросы GET, если таковые имеются.* 4) Проверить, перехватил ли Restito какие-либо запросы GET на данной конечной точке.* Ожидаемое поведение:*> Restito должен был захватить запрос GET, и он должен был захватить только один запрос GET.* Ну наконец то:*> Остановить тупиковый сервер, запущенный с помощью restito.* /public void testGETRequestFromClient () {StubServer server = null;пытаться {// Это запустит тупиковый сервер на 'PORT' и ответит HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (сервер, ПОРТ, ACCEPTED_202);RestClient.sendGETRequest (ПОРТ);СписокcallList = TestUtil.waitAndGetCallList (сервер, 30);assertTrue ("Запрос GET не получен от RestClient. Тест не пройден.",(callList! = null) && (callList.size () == 1));}catch (Exception e) {e.printStackTrace ();fail («Тест не прошел из-за исключения:» + e);}наконец-то {if (server! = null) {server.stop ();}}}
========== КОД JAVA заканчивается ===========
Шаг 4) Как проверить запрос GET с заголовками и запрос POST с телом с помощью инфраструктуры Restito.
========== Запуск кода JAVA ===========
/ *** Тест Junit для проверки запроса GET с заголовками от RestClient* Шаги:* 1) Создайте тупиковый сервер, используя структуру Restito, и настройте его для прослушивания данного порта* 2) Вызов метода sendGETRequestWithCustomHeaders (…) объекта RestClient.* 3) Restito фиксирует соответствующие отправленные запросы GET, если таковые имеются.* 4) Проверять, перехватил ли Restito какие-либо запросы GET на данной конечной точке.* Ожидаемое поведение:*> Restito должен был захватить запрос GET, и он должен был захватить только один запрос GET.*> Получить заголовки захваченного запроса GET* и убедитесь, что заголовки совпадают с настроенными.* Ну наконец то:*> Остановить тупиковый сервер, запущенный с помощью restito.* /public void testGETRequestWithHeadersFromClient () {StubServer server = null;пытаться {// Это запустит тупиковый сервер на '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Карта > headersFromRequest = callList.get (0) .getHeaders ();assertTrue («Запрос GET содержит заголовок Accept и его значение»,headersFromRequest.get ("Принять"). contains ("text / html"));assertTrue («Запрос GET содержит заголовок Authorization и его значение»,headersFromRequest.get ("Авторизация"). contains ("Bearer 1234567890qwertyuiop"));assertTrue («Запрос GET содержит заголовок Cache-Control и его значение»,headersFromRequest.get ("Cache-Control"). contains ("no-cache"));assertTrue («Запрос GET содержит заголовок Connection и его значение»,headersFromRequest.get ("Соединение"). contains ("keep-alive"));assertTrue («Запрос GET содержит заголовок Content-Type и его значение»,headersFromRequest.get ("Content-Type"). contains ("application / json"));}catch (Exception e) {e.printStackTrace ();fail («Тест не прошел из-за исключения:» + e);}наконец-то {if (server! = null) {server.stop ();}}}
/ *** Тест Junit для проверки запроса POST с телом и заголовками из RestClient* Шаги:* 1) Создайте тупиковый сервер, используя структуру Restito, и настройте его для прослушивания данного порта* 2) Вызов метода sendPOSTRequestWithJSONBody (…) RestClient* 3) Restito фиксирует соответствующие отправленные запросы POST, если таковые имеются.* 4) Проверить, перехватил ли Restito какие-либо запросы POST на данной конечной точке.* Ожидаемое поведение:*> Restito должен был захватить запрос POST, и он должен был захватить только один запрос POST.*> Получить тело захваченного запроса POST и проверить значения JSON* Ну наконец то:*> Остановить тупиковый сервер, запущенный с помощью restito.* /public void testPOSTRequestWithJSONBody () {StubServer server = null;пытаться {// Это запустит тупиковый сервер на '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Строка requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = новый JSONObject (requestBody);assertTrue ("Время обновления в json неверно",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token в json неверен",postRequestJSON.get ("токен_доступа"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue («Неправильный токен refresh_token в json»,postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Неверный token_type в json",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("носитель"));assertTrue ("Expires_in в json неверен",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Область видимости в json неверна",postRequestJSON.get ("область видимости"). toString (). equalsIgnoreCase (""));}catch (Exception e) {e.printStackTrace ();fail («Тест не прошел из-за исключения:» + e);}наконец-то {if (server! = null) {server.stop ();}}}}
========== КОД JAVA заканчивается ===========
Преимущества использования 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 расшифровывается как «REpresentational State Transfer», который представляет собой новый стандартный способ связи между любыми двумя системами в данный момент времени.
- Клиент REST - это метод или инструмент для вызова API службы REST, доступный для связи любой системой или поставщиком услуг.
- В методе RestServer или API, который доступен для связи любой системой или поставщиком услуг.
- Restito - это легкое приложение, которое поможет вам выполнить любой HTTP-запрос.
- Создайте HTTP-клиент и метод для отправки HTTP-запроса GET на любую конечную точку сервера.
- Запустите сервер Restito, чтобы прослушивать и захватывать запросы, отправленные на конечную точку getevents.
- Запустите сервер Restito для прослушивания и захвата запросов, отправленных на конечную точку getevents на локальном хосте.
- Здесь мы реализовали примеры для автоматического тестирования только клиента REST.
- Нам не нужно разрабатывать фактический сервер REST для тестирования клиента REST.
- Источник клиента REST следует настроить так, чтобы он рассматривал localhost как серверную машину.
Автор статьи: Чандрасекар Муттинени.