Для начинающих специалистов по тестированию

Автор: Надежда Дудник

Заранее хочу сказать, что мне нравится Postman, просто Insomnia часто используемый инструмент для тестирования API у меня на работе, и важно поделиться информацией о его возможностях.

Содержание:

  • Введение

  • Импорт коллекции

  • Создание пользователя

  • Работа с переменными и окружение

  • Авторизация пользователя

  • Получение токена

  • Создание проекта

    • Аутентификация через вкладку "Headers"

    • Аутентификация через вкладку "Auth"

    • Дополнение про автоматизацию получения токена для методов, которые требуют токен на предъявителя.

  • Общая информация про Insomnia

  • Установка сертификата

  • Возможности автоматизации

  • Импорт OpenAPI документации

  • Создание первого автотеста при создания пользователя

  • Заключение

Введение

Insomnia - инструмент для тестирования REST API (клиент взаимодействия с API)

Скачать Insomnia

Для примера я буду использовать мной любимый сайт Vikunja.

UI: https://try.vikunja.io/login

API documentation: https://try.vikunja.io/api/v1/docs

Скачать API Документацию из https://try.vikunja.io/api/v1/docs (найти "Download OpenAPI specification на странице")

Импорт коллекции

Открыть приложение Insomnia (версия Insomnia.Core-2023.4.0 для Mac / Windows в момент написании статьи). Я буду использовать приложение на Mac.

Кнопка "Import"
Кнопка "Import"

Найти кнопку "Import" и нажать на нее. Insomnia предлагает загрузить данные.

Import to project
Import to project

Выбрать наш файл docs.json, скачанный из https://try.vikunja.io/api/v1/docs

Импорт выбранного файла
Импорт выбранного файла

Нажать на кнопку "Scan" -> "Import"

Коллекция загружена:

Выбрать коллекцию, и открывается содержимое коллекции:

Создание пользователя

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

Папка "auth" -> запрос POST Register

Папка "auth" -> запрос POST Register
Папка "auth" -> запрос POST Register

Работа с переменными и окружение

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

В адресной строке для POST запроса отображена переменная ".base_url".

Выбрать "No Environment" в левом верхнем углу

Выбор "No Environment"  в левом верхнем углу
Выбор "No Environment" в левом верхнем углу

Нажать на "Manage Environments".

Нажать на "+".

Указать название новой коллекции "Vikunja", создать переменную base_url внести данные как

{"base_url": "https://try.vikunja.io/api/v1"}

Создание переменной base_url
Создание переменной base_url

Нажать на кнопку "Close".

Окружение "Environment" как "Vikunja" выбрано сразу по умолчанию.

Нажать на ".base_url" в адресной строке -> откроется всплывающее окно для редактирования переменной в окружении.

Проверить, что наше созданное значение base_url имеет следующий вид:

Всплывающее окно для редактирования переменной в окружении.
Всплывающее окно для редактирования переменной в окружении.

Нажать на кнопку "Done".

Указать в теле запроса значения на вкладке "Body -> JSON":

{
  "email": "infotestingqa@gmail.com",
  "id": 0,
  "password": "123455",
  "username": "UserName"
}
Тело запроса в формате JSON
Тело запроса в формате JSON

Нажать на кнопку "Send". Создан новый пользователь в системе. Ура :)!

Создание пользователя. Отображение ответа от сервера.
Создание пользователя. Отображение ответа от сервера.

Также есть вкладки "Auth", "Query", ''Headers", "Docs", их я разберу чуть ниже.

Авторизация пользователя

Далее отправить следующий запрос на авторизацию пользователя

Папка "auth" -> запрос POST Login

Получение токена

и получить токен в ответе от сервера.

Согласно документации используется JWT-Auth: Authorization: Bearer <jwt-token>.

Указать в теле запроса значения на вкладке "Body -> JSON":

{
  "long_token": true,
  "password": "123455",
  "totp_passcode": "123455",
  "username": "infotestingqa@gmail.com"
}
Запрос на авторизацию пользователя.
Запрос на авторизацию пользователя.

Нажать на кнопку "Send". Пользователь авторизован в систему. Получен токен. Ура :)!

Полученик
Получение токена

Создание проекта

Теперь используем созданный токен в запросе для создания проекта.

Найти папку "project", раскрыть ее, выбрать запрос

Папка "project" -> PUT Creates a new project

Подготовка к отправке запроса на создание проекта
Подготовка к отправке запроса на создание проекта

Есть два способа, где можно указать переменную для токена (время жизни токена 30 минут или пользователь будет удален из системы через 30 минут).

  1. способ через вкладку "Headers"

  2. способ через вкладку "Auth"

Предусловие: Выбрать "Vikunja" окружение в левом верхнем углу -> Выбрать "Manage Environments" -> Добавить новую переменную c значением:

"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6IiIsImVtYWlsUmVtaW5kZXJzRW5hYmxlZCI6ZmFsc2UsImV4cCI6MTY5MjYyNTE3NSwiaWQiOjIsImlzTG9jYWxVc2VyIjp0cnVlLCJsb25nIjp0cnVlLCJuYW1lIjoiIiwidHlwZSI6MSwidXNlcm5hbWUiOiJVc2VyTmFtZSJ9.QFcn0BDkmh2bF2fpZocxOrUoVVSra8c1cNE9beROYZA"

Добавление новой переменной в окружение
Добавление новой переменной в окружение

Нажать на кнопку "Close".

_______________

Аутентификация через вкладку "Headers"

Разберем 1 способ через вкладку "Headers".

Выбрать вкладку "Headers".

Аутентификация через вкладку "Headers"
Аутентификация через вкладку "Headers"

Нажать на ".api_key" -> откроется всплывающее окно для редактирования переменной в окружении.

Отредактировать ".api_key" на ".token" и нажать на кнопку "Done"

Выбор значения token
Выбор значения token

Установленная переменная имеет вид как ".token", и в начале обязательно добавить слово "Bearer" и пробел - важно указать для заголовка "Authorization", так как токен на предъявителя.

Отображение Bearer _.token
Отображение Bearer _.token

Отредактировать тело запроса на вкладке "JSON" согласно требованию и нажать на кнопку "Send".

В теле запроса указать только название проекта:

{ "title": "my project"}
Создание нового проекта через вкладку "Headers"
Создание нового проекта через вкладку "Headers"

_______________

Аутентификация через вкладку "Auth"

Разберем 2 способ через вкладку "Auth".

Выбрать вкладку "Auth" , нажать на стрелочку вниз (точнее раскрыть) и выбрать тип аутентификации "Bearer Token"

Аутентификация через вкладку "Auth"
Аутентификация через вкладку "Auth"

Отображается следующий вид:

Вкладка "Bearer"
Вкладка "Bearer"

Начать вводить значение {{_ в поле "TOKEN"

_.token
_.token

и выбрать переменную ".token". Нажать на кнопку "Send".

Выбор значение token и отправка запроса на создание проекта.
Выбор значение token и отправка запроса на создание проекта.

Создан новый проект! Ура!)

Создание нового проекта через вкладку "Auth"
Создание нового проекта через вкладку "Auth"

Дополнение про автоматизацию получения токена для методов, которые требуют токен на предъявителя.

Предусловие: Выбрать "Vikunja" окружение в левом верхнем углу -> Выбрать "Manage Environments" -> Добавить новую переменную c значением:

Request -> OAuth 2.0 Access Token

Автоматизация получения токена для методов, которые требуют токен на предъявителя
Автоматизация получения токена для методов, которые требуют токен на предъявителя

После того как выбрано данное значение будет следующий вид:

Выбор Request -> OAuth 2.0 Access Token
Выбор Request -> OAuth 2.0 Access Token

Нажать на  {% request 'oauth2', '', 0 %}

Редактирование переменной
Редактирование переменной

Далее выполнить конфигурацию, выбрать "Response - reference values from other request's responses"

Выбор "Response - reference values from other request's responses"
Выбор "Response - reference values from other request's responses"

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

  1. Атрибут - значение из тела ответа от сервера

  2. Запрос - авторизация пользователя "POST Login"

  3. Указать конкретный ключ, начиная с $., а именно $.token, и в "Live Preview" сразу отображается значение токена.

  4. Trigger Behavior говорит о том, что когда токен затухает, то еще раз отправить запрос на авторизацию пользователя

  5. Можно нажать на "Refresh", токен обновится

  6. Нажать на "Done"

Внесение необходимых данных
Внесение необходимых данных

Будет отображаться следующее окно, ВАЖНО указать значение токена в кавычках!

"token": "Response -> Body Attribute"

сама команда выглядит так:

"token": "{% response 'body', 'req_d2e9a976eb4d4e6595011784f232df4a', 'b64::JC50b2tlbg==::46b', 'when-expired', 60 %}"

"token": "Response -> Body Attribute"
"token": "Response -> Body Attribute"

Закрыть окно "Manage Environments".

Выбрать вкладку "Auth" , нажать на стрелочку вниз (точнее раскрыть) и выбрать тип аутентификации "Bearer Token". Начать вводить значение {{ в поле "TOKEN" и выбрать переменную ".token". Нажать на кнопку "Send".

Отображение необходимых данных
Отображение необходимых данных

Ура! Проект создан! Главное не забываем создать пользователя, авторизоваться в систему, и токен таким способом будет получаться автоматически.

Для других запросов можно также "вытащить" необходимые значения.

Общая информация про Insomnia

Insomnia поддерживает отправку запросов через HTTP, gRPC, GraphQL, WebSocket.

Отправка запросов через HTTP, gRPC, GraphQL, WebSocket.
Отправка запросов через HTTP, gRPC, GraphQL, WebSocket.

для HTTP request:

Вкладки "Body" (указание тела запроса), "Auth" (указание типа авторизации), "Query" (указание параметров), ''Headers" (указание HTTP заголовков запроса), "Docs" (указание документации OpenApi для запроса

для HTTP request
для HTTP request
Выбор формата передачи данных JSON
Выбор формата передачи данных JSON

Для запроса можно сделать следующие действия:

Действия с запросом
Действия с запросом

Особенно важная функция как "Generate Code".

Для HTTP response:

Вкладки "Preview or Source or Raw" (указание тела ответа от сервера), ''Headers" (указание HTTP заголовков ответа), "Cookies", "Timeline" (информация про временные особенности)

Например, Timeline после отправки запроса на создание проекта

Preparing request to https://try.vikunja.io/api/v1/projects

Current time is 2023-07-22T21:30:46.171Z

Enable automatic URL encoding

Using default HTTP version

Enable SSL validation

Too old connection (567 seconds), disconnect it

и т.д.

Параметра для ответа от сервера
Параметра для ответа от сервера

Установка сертификата

Про установку сертификата (например, для финтеха это самое первое, что нужно сделать прежде чем отправить запрос).

Выбрать "Collection Settings" -> "Client Certificates". Нажать на "New Certificate".

Окно Добавления сертификата
Окно Добавления сертификата

Все необходимые файлы и хосты должны предоставить коллеги (админы, спросите в общем чате).

Указать "Host", нажать на "Choose Cert" и "Choose Key", добавить файлы.

Заполнение окна для сертификата
Заполнение окна для сертификата

Нажать на кнопку "Create Certificate"

Режим просмотра:

Отображение внесенных данных, сертификат выбран по умолчанию.
Отображение внесенных данных, сертификат выбран по умолчанию.

Для нашей работы в настройках запроса убрать галочки в чек-боксах "Send cookies automatically" и "Store cookies automatically":

___________________

Возможности автоматизации

Инструмент позволяет сделать тестовые сценарии: негативные и позитивные, используется язык JS для автоматизации, позволяет проводить прогоны и получать отчет прогона и сформировать CI для автозапуска из консоли.

Импорт OpenAPI документации

Нажать на иконку "Домашняя страница" -> Найти "All Files" -> "Documents" -> Нажать на "+"

Импорт Open API документации
Импорт Open API документации

Система отображает всплывающее окно "Create New Design Document", оставить "my-spec.yaml" и нажать на кнопку "Create"

my-spec.yaml
my-spec.yaml

Создан New Document. Отображены три вкладки "DESIGN", "DEBUG", "TEST".

Создан New Document
Создан New Document

Нажать на кнопку "Import OpenAPI" -> Выбрать "File".

Выбрать наш файл docs.json, скачанный из https://try.vikunja.io/api/v1/docs

Отображение Open API документации
Отображение Open API документации

Отображена документация "Vikunja API".

Создание первого автотеста при создания пользователя

Выбрать вкладку "DEBUG" - > Добавить запрос на создание пользователя ->

Предупреждаю, что при повторном создании пользователя необходимо изменить почту и имя пользователя.

Так как я уже создала пользователя, то для автотеста я изменю значения почты и имени для пользователя.

Выбрать вкладку "TEST" - > Найти и нажать "New Test Suite" ->

Указать название "Tests" -> Нажать на кнопку "Create Suite"

Создание теста
Создание теста

Нажать на кнопку "New Test" -> Оставить дефолтное название "Returns 200" (так как при создании пользователя возвращается статус код 200) -> нажать на "New Test"

Returns 200
Returns 200

Выбрать dropdown "Select Request" -> Выбрать наш запрос на "Создание пользователя (регистрация)" из вкладки "DEBUG"

Запрос на "Создание пользователя (регистрация)" из вкладки "DEBUG"
Запрос на "Создание пользователя (регистрация)" из вкладки "DEBUG"

Insomnia предлагает дефолтный фрагмент кода:

const response1 = await insomnia.send();

expect(response1.status).to.equal(200);

Отображение дефолтного кода
Отображение дефолтного кода

Нажать на кнопку "Run Tests".

Статус указан "Passed"
Статус указан "Passed"

Успешно выполнен тест, статус указан "Passed".

Повторно нажать на кнопку "Run Tests".

статус указан "Failed"
статус указан "Failed"

Тест провален, статус указан "Failed".

Ура, написан простейший автотест.

Еще примеры:

Предусловия: изменены почта и имя пользователя на вкладке "DEBUG"

Добавлены два теста на отправку регистрации пользователя "Response body has property Id" и ''Response body is json object". Каждый раз отправляется новый тест, поэтому второй тест будет отображать ошибку, что такой пользователь существует (для этого случая будет создан новый тест "User already exists".

Код для тренировки:

1 тест "Response body has property Id"

const response1 = await insomnia.send();
const body = JSON.parse(response1.data);
const item = body;
expect(item).to.have.property("id");

2 тест ''Response body is json object"

const response1 = await insomnia.send();
const resp_body = JSON.parse(response1.data);
expect(resp_body).to.be.an('object');

3 тест на проверку, что такой пользователь существует ("User already exists").

Тест на проверку, что пользователь уже существует в системе
Тест на проверку, что пользователь уже существует в системе
const response1 = await insomnia.send();
expect(response1.status).to.equal(400);
const body = JSON.parse(response1.data);
const item = body;
expect(item).to.have.property("code");
expect(item).to.have.property("message");

Больше информации про скрипты в официальной документации.

__________________

Заключение

Есть такие возможности у Insomnia: встроенный DevTools, конвертация запроса в код, JSON|XML - читабельный вид (Beautify JSON), есть подсказки на валидацию введенных значений, история запросов. Также убедились, что есть возможность настроить окружение, создавать динамические переменные и тест-кейсы и прогонять их. Конечно есть и минусы в запуске тест-кейсов, и все же этот инструмент становится лучше и обновляется.

Благодарю за прочтение.

С уважением, Надежда Дудник (protestinginfo), главный инженер по тестированию в финтехе и ментор по тестированию ПО.

Комментарии (3)


  1. TatyZL
    12.08.2023 09:02

    Какой инструмент для тестирования API для вас удобнее, может быть понятнее? Чтобы вы посоветовали для автоматизации тестов - Postman или Insomnia?


    1. ProTestingInfo_QA Автор
      12.08.2023 09:02

      Добрый день, Postman - удобнее и для автоматизации тестов его рекомендую, так как есть много встроенных вариантов проверок в сниппетах, также появился AI, теперь можно генерирововать тесты с помощью Postbot. Запуск коллекции есть и проще, чем у Insomnia.

      Дома я использую Postman, а на работе Insomnia, так как Postman запрещен кибербезопасностью.


  1. morsmil
    12.08.2023 09:02

    Через Insomnia не смог заставить с локальным гитлабом работать, на linux очень не стабильное приложение