Для начинающих специалистов по тестированию
Автор: Надежда Дудник
Заранее хочу сказать, что мне нравится Postman, просто Insomnia часто используемый инструмент для тестирования API у меня на работе, и важно поделиться информацией о его возможностях.
Содержание:
Введение
Импорт коллекции
Создание пользователя
Работа с переменными и окружение
Авторизация пользователя
Получение токена
-
Создание проекта
Аутентификация через вкладку "Headers"
Аутентификация через вкладку "Auth"
Дополнение про автоматизацию получения токена для методов, которые требуют токен на предъявителя.
Общая информация про Insomnia
Установка сертификата
Возможности автоматизации
Импорт OpenAPI документации
Создание первого автотеста при создания пользователя
Заключение
Введение
Insomnia - инструмент для тестирования REST API (клиент взаимодействия с API)
Для примера я буду использовать мной любимый сайт 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" и нажать на нее. Insomnia предлагает загрузить данные.
Выбрать наш файл docs.json, скачанный из https://try.vikunja.io/api/v1/docs
Нажать на кнопку "Scan" -> "Import"
Коллекция загружена:
Выбрать коллекцию, и открывается содержимое коллекции:
Создание пользователя
Разберу самый первый запрос, который связан с регистрацией пользователя на сайте.
Папка "auth" -> запрос POST Register
Работа с переменными и окружение
Прежде чем разобраться с отправкой самого запроса, проанализирую, а где создать переменную, и где она хранится.
В адресной строке для POST запроса отображена переменная ".base_url".
Выбрать "No Environment" в левом верхнем углу
Нажать на "Manage Environments".
Нажать на "+".
Указать название новой коллекции "Vikunja", создать переменную base_url внести данные как
{"base_url": "https://try.vikunja.io/api/v1"}
Нажать на кнопку "Close".
Окружение "Environment" как "Vikunja" выбрано сразу по умолчанию.
Нажать на ".base_url" в адресной строке -> откроется всплывающее окно для редактирования переменной в окружении.
Проверить, что наше созданное значение base_url имеет следующий вид:
Нажать на кнопку "Done".
Указать в теле запроса значения на вкладке "Body -> JSON":
{
"email": "infotestingqa@gmail.com",
"id": 0,
"password": "123455",
"username": "UserName"
}
Нажать на кнопку "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 минут).
способ через вкладку "Headers"
способ через вкладку "Auth"
Предусловие: Выбрать "Vikunja" окружение в левом верхнем углу -> Выбрать "Manage Environments" -> Добавить новую переменную c значением:
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6IiIsImVtYWlsUmVtaW5kZXJzRW5hYmxlZCI6ZmFsc2UsImV4cCI6MTY5MjYyNTE3NSwiaWQiOjIsImlzTG9jYWxVc2VyIjp0cnVlLCJsb25nIjp0cnVlLCJuYW1lIjoiIiwidHlwZSI6MSwidXNlcm5hbWUiOiJVc2VyTmFtZSJ9.QFcn0BDkmh2bF2fpZocxOrUoVVSra8c1cNE9beROYZA"
Нажать на кнопку "Close".
_______________
Аутентификация через вкладку "Headers"
Разберем 1 способ через вкладку "Headers".
Выбрать вкладку "Headers".
Нажать на ".api_key" -> откроется всплывающее окно для редактирования переменной в окружении.
Отредактировать ".api_key" на ".token" и нажать на кнопку "Done"
Установленная переменная имеет вид как ".token", и в начале обязательно добавить слово "Bearer" и пробел - важно указать для заголовка "Authorization", так как токен на предъявителя.
Отредактировать тело запроса на вкладке "JSON" согласно требованию и нажать на кнопку "Send".
В теле запроса указать только название проекта:
{ "title": "my project"}
_______________
Аутентификация через вкладку "Auth"
Разберем 2 способ через вкладку "Auth".
Выбрать вкладку "Auth" , нажать на стрелочку вниз (точнее раскрыть) и выбрать тип аутентификации "Bearer Token"
Отображается следующий вид:
Начать вводить значение {{_ в поле "TOKEN"
и выбрать переменную ".token". Нажать на кнопку "Send".
Создан новый проект! Ура!)
Дополнение про автоматизацию получения токена для методов, которые требуют токен на предъявителя.
Предусловие: Выбрать "Vikunja" окружение в левом верхнем углу -> Выбрать "Manage Environments" -> Добавить новую переменную c значением:
Request -> OAuth 2.0 Access Token
После того как выбрано данное значение будет следующий вид:
Нажать на {% request 'oauth2', '', 0 %}
Далее выполнить конфигурацию, выбрать "Response - reference values from other request's responses"
Будет отображено следующее окно, данные поля важно заполнить следующими значениями:
Атрибут - значение из тела ответа от сервера
Запрос - авторизация пользователя "POST Login"
Указать конкретный ключ, начиная с $., а именно $.token, и в "Live Preview" сразу отображается значение токена.
Trigger Behavior говорит о том, что когда токен затухает, то еще раз отправить запрос на авторизацию пользователя
Можно нажать на "Refresh", токен обновится
Нажать на "Done"
Будет отображаться следующее окно, ВАЖНО указать значение токена в кавычках!
"token": "Response -> Body Attribute"
сама команда выглядит так:
"token": "{% response 'body', 'req_d2e9a976eb4d4e6595011784f232df4a', 'b64::JC50b2tlbg==::46b', 'when-expired', 60 %}"
Закрыть окно "Manage Environments".
Выбрать вкладку "Auth" , нажать на стрелочку вниз (точнее раскрыть) и выбрать тип аутентификации "Bearer Token". Начать вводить значение {{ в поле "TOKEN" и выбрать переменную ".token". Нажать на кнопку "Send".
Ура! Проект создан! Главное не забываем создать пользователя, авторизоваться в систему, и токен таким способом будет получаться автоматически.
Для других запросов можно также "вытащить" необходимые значения.
Общая информация про Insomnia
Insomnia поддерживает отправку запросов через HTTP, gRPC, GraphQL, WebSocket.
для HTTP request:
Вкладки "Body" (указание тела запроса), "Auth" (указание типа авторизации), "Query" (указание параметров), ''Headers" (указание HTTP заголовков запроса), "Docs" (указание документации OpenApi для запроса
Для запроса можно сделать следующие действия:
Особенно важная функция как "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" -> Нажать на "+"
Система отображает всплывающее окно "Create New Design Document", оставить "my-spec.yaml" и нажать на кнопку "Create"
Создан New Document. Отображены три вкладки "DESIGN", "DEBUG", "TEST".
Нажать на кнопку "Import OpenAPI" -> Выбрать "File".
Выбрать наш файл docs.json, скачанный из https://try.vikunja.io/api/v1/docs
Отображена документация "Vikunja API".
Создание первого автотеста при создания пользователя
Выбрать вкладку "DEBUG" - > Добавить запрос на создание пользователя ->
Предупреждаю, что при повторном создании пользователя необходимо изменить почту и имя пользователя.
Так как я уже создала пользователя, то для автотеста я изменю значения почты и имени для пользователя.
Выбрать вкладку "TEST" - > Найти и нажать "New Test Suite" ->
Указать название "Tests" -> Нажать на кнопку "Create Suite"
Нажать на кнопку "New Test" -> Оставить дефолтное название "Returns 200" (так как при создании пользователя возвращается статус код 200) -> нажать на "New Test"
Выбрать dropdown "Select Request" -> Выбрать наш запрос на "Создание пользователя (регистрация)" из вкладки "DEBUG"
Insomnia предлагает дефолтный фрагмент кода:
const response1 = await insomnia.send();
expect(response1.status).to.equal(200);
Нажать на кнопку "Run Tests".
Успешно выполнен тест, статус указан "Passed".
Повторно нажать на кнопку "Run Tests".
Тест провален, статус указан "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)
morsmil
12.08.2023 09:02Через Insomnia не смог заставить с локальным гитлабом работать, на linux очень не стабильное приложение
TatyZL
Какой инструмент для тестирования API для вас удобнее, может быть понятнее? Чтобы вы посоветовали для автоматизации тестов - Postman или Insomnia?
ProTestingInfo_QA Автор
Добрый день, Postman - удобнее и для автоматизации тестов его рекомендую, так как есть много встроенных вариантов проверок в сниппетах, также появился AI, теперь можно генерирововать тесты с помощью Postbot. Запуск коллекции есть и проще, чем у Insomnia.
Дома я использую Postman, а на работе Insomnia, так как Postman запрещен кибербезопасностью.