Учебники

Будьте уверены

Для сообщества тестирования API Automation Testing по-прежнему является новой и нишевой. Сложности JSON не позволяют исследовать API. Но это не делает его менее важным в процессе тестирования. Фреймворк Rest Assured.io сделал его очень простым, используя основные основы Java, что делает его очень желательным для изучения.

В этом уроке вы узнаете,

Зачем нужна уверенность в себе?

Представьте, что вы открываете свой вид карты Google и ищете место, куда вы хотите пойти, вы сразу видите близлежащие рестораны, вы видите варианты для поездок на работу; от некоторых ведущих туристических компаний, и увидеть так много вариантов в ваших руках. Мы все знаем, что они не являются продуктами Google, тогда как Google удается показать это. Они используют открытые API этих провайдеров. Теперь, если вас попросят протестировать этот тип настройки, даже до того, как пользовательский интерфейс будет создан или находится в стадии разработки, тестирование API становится чрезвычайно важным, и их повторное тестирование с различными комбинациями данных делает это очень подходящим вариантом для автоматизации.

Ранее для этого мы использовали динамические языки, такие как groovy, ruby, и это было сложно. Следовательно, тестирование API не было исследовано функциональным тестированием.

Но с помощью Rest Assured автоматизированное тестирование API, отправка простых запросов https с удобными настройками проста, если у вас есть базовый опыт работы с Java. Необходимо понимать API-тестирование и интеграционное тестирование, но сообщать, что автоматизация Rest Assured дает очень хорошую уверенность в бэкэнде, в то время как интерфейсное тестирование может просто фокусироваться на пользовательском интерфейсе и клиентских операциях. Rest Assured — открытый исходный код с множеством дополнительных методов и добавлением библиотек, что делает его отличным выбором для автоматизации API.

Пошаговое руководство по настройке Rest Assured.io

Шаг 1) Установите Java. Обратитесь к этому руководству

Шаг 2) Загрузите IDE для начала: eclipse

Шаг 3) УстановитеMaven и настройте свое затмение. Обратитесь сюда .

Настройка Будьте уверены

  1. Создайте проект Maven в вашей IDE. Мы используем Intellij, но вы получите похожую структуру в любой IDE, которую вы можете использовать.
  2. Откройте свой POM.xml

Структура проекта

Для отдыха Assured.io: для пользователей Java версии <9:

Добавьте следующую зависимость в ваш файл POM.xml:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Для отдыха Assured.io: Для пользователей Java версии 9+:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Поиск проблемы:

Если вы видите ошибки и не уверены, что зависимости были загружены правильно,

  1. Perform a maven build to import all dependencies, again you will find help on Maven set up on guru99.
  2. Still, you see errors, then do a maven clean followed by a maven install, and it should build without any errors.
  3. You can add the below lines in your java class and see no compile errors are present.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;
        

First simple Rest Assured script

Syntax:

The syntax of Rest Assured.io is the most beautiful part, as it is very BDD like and understandable.

Given(). 
        param("x", "y"). 
        header("z", "w").
when().
Method().
Then(). 
        statusCode(XXX).
        body("x, ”y", equalTo("z"));

Explanation:

Code Explanation
Given() ‘Given’ keyword, lets you set a background, here, you pass the request headers, query and path param, body, cookies. This is optional if these items are not needed in the request
When() ‘when’ keyword marks the premise of your scenario. For example, ‘when’ you get/post/put something, do something else.
Method() Substitute this with any of the CRUD operations(get/post/put/delete)
Then() Your assert and matcher conditions go here

Now that you have the setup and some background to the syntax, let’s create our first simple test. It is okay if so far the structure seems new to you, as you code further interpret each line, you will get the hang of it.

What will you fetch?

Откройте браузер и нажмите — http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1 . Убедитесь, что вы видите что-то, как показано ниже.

Если в браузере появляется ошибка, когда вы пытаетесь получить ответ на запрос,

  1. Посмотрите, использовали ли вы Https или Http. В вашем браузере могут быть настройки, позволяющие не открывать небезопасные веб-сайты.
  2. Посмотрите, есть ли у вас прокси или брандмауэр блокирует ваш браузер от открытия сайтов

* Примечание — вы не использовали здесь ни заголовки, ни тело, ни cookie. Это был URL, и вы также получаете контент из API, а не публикуете или обновляете какой-либо существующий контент, так что это делает вызов GET. Запомните это, чтобы лучше понять наш первый тест.

Цель вашего теста:

Цель сценария — вывести на консоль IDE те же выходные данные, которые вы получили в браузере с помощью Ass Assured.

Давайте закодируем это с помощью следующих шагов:

Получение ответа Body

Шаг 1) Создайте класс с именем «myFirstRestAssuredClass»

Шаг 2) Создайте метод с именем «getResponseBody»

Шаг 3) Аналогично структуре, изученной ранее для данного, когда и тогда, введите следующий код

данный(). -> Не требуется никаких заголовков, нет запроса или параметра пути.

когда(). -> Нет настройки конкретного условия

get (‘ http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1 ‘). -> необходимо указать только URL

тогда(). -> Никаких конкретных утверждений не требуется

журнал(). all () -> После того, как весь ответ получен, регистрируйте ответ, заголовки, по существу все, что запрос возвращает вам.

public static void getResponseBody(){
   given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();
 
}

Теперь обратите внимание, что используемый URL является длинным и менее читаемым, если вы посмотрите внимательно, вы заметите, что используются 3 параметра запроса, которые

  1. Пользовательский ИД
  2. пароль
  3. ACCOUNT_NO

Будьте уверены, помогает нам передавать каждую часть (запрос, путь, параметр заголовка) отдельно, делая код более читабельным и простым в обслуживании. Кроме того, мы можем параметризовать данные из внешнего файла по мере необходимости.

Для использования параметра запроса мы возвращаемся к нашему определению синтаксиса и видим, что все они передаются как часть данных.

public static void getResponseBody(){
 
   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

** Обратите внимание, что мы использовали «тело» вместо «все»; это помогает нам извлечь только тело ответа.

Вывод:

Выход для getResponseBody

Получение кода статуса ответа

Следующий метод, который мы создадим, будет получить код состояния, а также поставить утверждение для проверки того же самого.

Шаг 1) Создайте метод с именем getResponseStatus ()

Шаг 2) Используйте ту же структуру запроса, что и выше. Скопируйте и вставьте его.

Шаг 3) Вместо того, чтобы регистрировать это, мы используем встроенный метод getStatusCode Rest Assured для получения значения кода состояния.

Шаг 4) Чтобы подтвердить, что ваш код состояния равен 200, мы используем ключевые слова — assertThat (). StatusCode (Ожидаемый код)

** Примечание — URL — это переменная, используемая для простоты. URL содержит весь URL запроса API

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

Вывод:

Выход для getResponseStatus

Деловая необходимость

Одно из основных правил автоматизации заключается в том, что мы должны ставить контрольные точки, чтобы тестирование проходило только при соблюдении всех необходимых условий. При тестировании API самая простая проверка заключается в проверке, имеет ли код состояния запроса формат 2XX.

Полный код, пока:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

     getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

*Запись:

  1. 200 является успешным ответом для этого сценария. Время от времени вам также необходимо выполнить запрос, и тогда вы можете использовать 4XX или 5XX. Попробуйте изменить код состояния, указав неверные параметры, и проверьте.
  2. Когда мы утверждаем условие, на консоли не будет печататься, пока не произойдет ошибка.

Скрипт для извлечения разных частей ответа

Выборка тела ответа и кода статуса ответа уже описана в вышеуказанном сегменте. Стоит отметить, что для получения различных частей ответа ключевое слово «извлечение» очень важно.

заголовок

Будьте уверены, это очень простой язык, и выбор заголовков так же просто. Имя метода — заголовки (). Как и прежде, мы создадим автономный метод, чтобы сделать то же самое.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Пожалуйста, обратите внимание, что здесь задано значение «Given (). When ()», и строка кода начинается с get (), это потому, что здесь нет предварительных условий или проверки, чтобы выполнить запрос и получить ответ. В таких случаях необязательно использовать то же самое.

Вывод :

Выход для getResponseHeader

Бизнес нужен:

Несколько раз вам понадобится использовать токен авторизации или файл cookie сеанса для последующего запроса, и в основном эти данные возвращаются в качестве заголовков ответа.

Время отклика

Чтобы получить время, необходимое для получения ответа от бэкэнда или других нисходящих систем, Rest Assured предоставляет метод timeInnit с подходящим timeUnit для получения времени, необходимого для возврата ответа.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

Вывод:

Выход для getResponseTime

Бизнес нужен:

Очень важной особенностью тестирования API-интерфейсов является их время отклика для измерения производительности приложения. Обратите внимание, что время, затрачиваемое на ваш звонок, может занять больше или меньше времени в зависимости от скорости вашего интернета, производительности API в то время, нагрузки на сервер и других факторов, влияющих на это время.

Тип содержимого

Вы можете получить тип содержимого ответа, возвращаемого с помощью метода «contentType ()».

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

Вывод

Выход для getContentType

Бизнес-потребность:

Время от времени получение типа контента необходимо для обеспечения отсутствия пробелов в безопасности для любых угроз из разных источников или просто для обеспечения того, чтобы передаваемый контент соответствовал стандартам API.

Получить индивидуальный элемент JSON

Из данного ответа вас просят подсчитать общую сумму, вам нужно получить каждую сумму и суммировать ее.

шаги:

Шаг 1) Поле количества находится в массиве с ключом «заявления», который в свою очередь находится в списке с ключом «результат»

Шаг 2) Будьте уверены, предоставляет механизм для достижения значений в API, используя «путь»

Шаг 3) Путь к достижению суммы — «result.statements.AMOUNT». Думайте об этом как Xpath в селене.

Шаг 4) Извлечь все суммы в коллекции, а затем выполнить цикл для всех значений, чтобы вычислить сумму

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

Примечание. Поскольку значение суммы имеет строковый тип данных, мы преобразуем его в целое число и используем его для суммирования.

Вывод:

Выход для getSpecificPartOfResponse

Резюме:

  • Rest Assured — это группа библиотек Java, которая позволяет автоматизировать тестирование Rest API.
  • Rest Assured основан на Java, и для его изучения достаточно знания ядра Java
  • Это помогает получить значения запроса и ответа от сложных структур JSON
  • Запрос API может быть настроен с различными заголовками, запросами, параметрами пути и любым сеансом или файлами cookie, которые нужно установить.
  • Это помогает устанавливать утверждения и условия.
  • Хотя Rest Assured очень полезен, когда ответ имеет тип JSON, его методы могут не работать без проблем, если тип контента идентифицирует HTML или обычный текст.