Для начинающих специалистов по тестированию
Автор: Надежда Дудник
Заранее хочу сказать, что мне нравится 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" Кнопка "Import"](https://habrastorage.org/getpro/habr/upload_files/820/d71/f69/820d71f69caf5639e65655cd1b306f4e.png)
Найти кнопку "Import" и нажать на нее. Insomnia предлагает загрузить данные.
![Import to project Import to project](https://habrastorage.org/getpro/habr/upload_files/218/8de/844/2188de844305dda9e7da4ae390ceaafd.png)
Выбрать наш файл docs.json, скачанный из https://try.vikunja.io/api/v1/docs
![Импорт выбранного файла Импорт выбранного файла](https://habrastorage.org/getpro/habr/upload_files/ea4/8f6/66d/ea48f666de1e8c203ceb69d569d43d0e.png)
Нажать на кнопку "Scan" -> "Import"
Коллекция загружена:
![](https://habrastorage.org/getpro/habr/upload_files/79c/1d2/a43/79c1d2a435f8755372a3f0ee69c5c1f4.png)
Выбрать коллекцию, и открывается содержимое коллекции:
![](https://habrastorage.org/getpro/habr/upload_files/888/b14/96d/888b1496da7e9b74f260af9f8bc70bf5.png)
Создание пользователя
Разберу самый первый запрос, который связан с регистрацией пользователя на сайте.
Папка "auth" -> запрос POST Register
![Папка "auth" -> запрос POST Register Папка "auth" -> запрос POST Register](https://habrastorage.org/getpro/habr/upload_files/f1c/c05/42f/f1cc0542f83432b5b249d4bc8163619d.png)
Работа с переменными и окружение
Прежде чем разобраться с отправкой самого запроса, проанализирую, а где создать переменную, и где она хранится.
В адресной строке для POST запроса отображена переменная ".base_url".
Выбрать "No Environment" в левом верхнем углу
![Выбор "No Environment" в левом верхнем углу Выбор "No Environment" в левом верхнем углу](https://habrastorage.org/getpro/habr/upload_files/3aa/7f8/e7e/3aa7f8e7ef83566ebf4ad41cf49620f3.png)
Нажать на "Manage Environments".
![](https://habrastorage.org/getpro/habr/upload_files/e32/547/e60/e32547e6036fbbeb0b44889e5f9759ae.png)
Нажать на "+".
Указать название новой коллекции "Vikunja", создать переменную base_url внести данные как
{"base_url": "https://try.vikunja.io/api/v1"}
![Создание переменной base_url Создание переменной base_url](https://habrastorage.org/getpro/habr/upload_files/618/797/55c/61879755c8398ebb795b28ec775a5e9f.png)
Нажать на кнопку "Close".
Окружение "Environment" как "Vikunja" выбрано сразу по умолчанию.
Нажать на ".base_url" в адресной строке -> откроется всплывающее окно для редактирования переменной в окружении.
Проверить, что наше созданное значение base_url имеет следующий вид:
![Всплывающее окно для редактирования переменной в окружении. Всплывающее окно для редактирования переменной в окружении.](https://habrastorage.org/getpro/habr/upload_files/40e/6ef/143/40e6ef143127080073ef5d011b1c9635.png)
Нажать на кнопку "Done".
Указать в теле запроса значения на вкладке "Body -> JSON":
{
"email": "infotestingqa@gmail.com",
"id": 0,
"password": "123455",
"username": "UserName"
}
![Тело запроса в формате JSON Тело запроса в формате JSON](https://habrastorage.org/getpro/habr/upload_files/bd6/b4d/b90/bd6b4db90b2cb8ca84731e67108016da.png)
Нажать на кнопку "Send". Создан новый пользователь в системе. Ура :)!
![Создание пользователя. Отображение ответа от сервера. Создание пользователя. Отображение ответа от сервера.](https://habrastorage.org/getpro/habr/upload_files/0d1/1bb/d10/0d11bbd10e9dd1a6f1fb6f2e5b313a69.png)
Также есть вкладки "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"
}
![Запрос на авторизацию пользователя. Запрос на авторизацию пользователя.](https://habrastorage.org/getpro/habr/upload_files/5b1/cd4/b8e/5b1cd4b8eeb3c97b114b6a7e3e5c6abe.png)
Нажать на кнопку "Send". Пользователь авторизован в систему. Получен токен. Ура :)!
![Полученик Полученик](https://habrastorage.org/getpro/habr/upload_files/ee2/3e4/bbb/ee23e4bbbe8b4303b3d47a59ff9f5412.png)
Создание проекта
Теперь используем созданный токен в запросе для создания проекта.
Найти папку "project", раскрыть ее, выбрать запрос
Папка "project" -> PUT Creates a new project
![Подготовка к отправке запроса на создание проекта Подготовка к отправке запроса на создание проекта](https://habrastorage.org/getpro/habr/upload_files/f3e/449/202/f3e449202620acd8de5f53be635c752b.png)
Есть два способа, где можно указать переменную для токена (время жизни токена 30 минут или пользователь будет удален из системы через 30 минут).
способ через вкладку "Headers"
способ через вкладку "Auth"
Предусловие: Выбрать "Vikunja" окружение в левом верхнем углу -> Выбрать "Manage Environments" -> Добавить новую переменную c значением:
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6IiIsImVtYWlsUmVtaW5kZXJzRW5hYmxlZCI6ZmFsc2UsImV4cCI6MTY5MjYyNTE3NSwiaWQiOjIsImlzTG9jYWxVc2VyIjp0cnVlLCJsb25nIjp0cnVlLCJuYW1lIjoiIiwidHlwZSI6MSwidXNlcm5hbWUiOiJVc2VyTmFtZSJ9.QFcn0BDkmh2bF2fpZocxOrUoVVSra8c1cNE9beROYZA"
![Добавление новой переменной в окружение Добавление новой переменной в окружение](https://habrastorage.org/getpro/habr/upload_files/337/3a0/91a/3373a091affa682f117867f678dae921.png)
Нажать на кнопку "Close".
_______________
Аутентификация через вкладку "Headers"
Разберем 1 способ через вкладку "Headers".
Выбрать вкладку "Headers".
![Аутентификация через вкладку "Headers" Аутентификация через вкладку "Headers"](https://habrastorage.org/getpro/habr/upload_files/2b2/15c/c67/2b215cc67d8bb17e1160ba2158952688.png)
Нажать на ".api_key" -> откроется всплывающее окно для редактирования переменной в окружении.
Отредактировать ".api_key" на ".token" и нажать на кнопку "Done"
![Выбор значения token Выбор значения token](https://habrastorage.org/getpro/habr/upload_files/e1a/bd9/1da/e1abd91da179b2c9fe33a379c3a9b2f3.png)
Установленная переменная имеет вид как ".token", и в начале обязательно добавить слово "Bearer" и пробел - важно указать для заголовка "Authorization", так как токен на предъявителя.
![Отображение Bearer _.token Отображение Bearer _.token](https://habrastorage.org/getpro/habr/upload_files/a84/164/7cb/a841647cbbd2f211b780b8b522d0352a.png)
Отредактировать тело запроса на вкладке "JSON" согласно требованию и нажать на кнопку "Send".
В теле запроса указать только название проекта:
{ "title": "my project"}
![Создание нового проекта через вкладку "Headers" Создание нового проекта через вкладку "Headers"](https://habrastorage.org/getpro/habr/upload_files/436/2df/99c/4362df99cdd4f25108675fc84b6641c3.png)
_______________
Аутентификация через вкладку "Auth"
Разберем 2 способ через вкладку "Auth".
Выбрать вкладку "Auth" , нажать на стрелочку вниз (точнее раскрыть) и выбрать тип аутентификации "Bearer Token"
![Аутентификация через вкладку "Auth" Аутентификация через вкладку "Auth"](https://habrastorage.org/getpro/habr/upload_files/c68/048/7aa/c680487aa14ca2f398fbb93c74e7d1ec.png)
Отображается следующий вид:
![Вкладка "Bearer" Вкладка "Bearer"](https://habrastorage.org/getpro/habr/upload_files/092/fba/318/092fba3184521043e605c0ef6aee3cc7.png)
Начать вводить значение {{_ в поле "TOKEN"
![_.token _.token](https://habrastorage.org/getpro/habr/upload_files/78b/67a/d8b/78b67ad8b473df7c22567c696853e2e9.png)
и выбрать переменную ".token". Нажать на кнопку "Send".
![Выбор значение token и отправка запроса на создание проекта. Выбор значение token и отправка запроса на создание проекта.](https://habrastorage.org/getpro/habr/upload_files/e4f/cac/01b/e4fcac01bdda9f1d9735a5f2163de340.png)
Создан новый проект! Ура!)
![Создание нового проекта через вкладку "Auth" Создание нового проекта через вкладку "Auth"](https://habrastorage.org/getpro/habr/upload_files/de3/d8f/ff0/de3d8fff06c76249932d355578e9089d.png)
Дополнение про автоматизацию получения токена для методов, которые требуют токен на предъявителя.
Предусловие: Выбрать "Vikunja" окружение в левом верхнем углу -> Выбрать "Manage Environments" -> Добавить новую переменную c значением:
Request -> OAuth 2.0 Access Token
![Автоматизация получения токена для методов, которые требуют токен на предъявителя Автоматизация получения токена для методов, которые требуют токен на предъявителя](https://habrastorage.org/getpro/habr/upload_files/996/277/eab/996277eab38870c8989086a1736a7bc2.png)
После того как выбрано данное значение будет следующий вид:
![Выбор Request -> OAuth 2.0 Access Token Выбор Request -> OAuth 2.0 Access Token](https://habrastorage.org/getpro/habr/upload_files/936/f08/db0/936f08db0b996569a2e6a39fb3532df2.png)
Нажать на {% request 'oauth2', '', 0 %}
![Редактирование переменной Редактирование переменной](https://habrastorage.org/getpro/habr/upload_files/b06/ac3/bbf/b06ac3bbfc19e7afa32a17c169ff8107.png)
Далее выполнить конфигурацию, выбрать "Response - reference values from other request's responses"
![Выбор "Response - reference values from other request's responses" Выбор "Response - reference values from other request's responses"](https://habrastorage.org/getpro/habr/upload_files/ebf/bc4/4c9/ebfbc44c90362daa9264554dfd1c294d.png)
Будет отображено следующее окно, данные поля важно заполнить следующими значениями:
Атрибут - значение из тела ответа от сервера
Запрос - авторизация пользователя "POST Login"
Указать конкретный ключ, начиная с $., а именно $.token, и в "Live Preview" сразу отображается значение токена.
Trigger Behavior говорит о том, что когда токен затухает, то еще раз отправить запрос на авторизацию пользователя
Можно нажать на "Refresh", токен обновится
Нажать на "Done"
![Внесение необходимых данных Внесение необходимых данных](https://habrastorage.org/getpro/habr/upload_files/be5/e8e/f41/be5e8ef41e9a69c36675d47fb5029ede.png)
Будет отображаться следующее окно, ВАЖНО указать значение токена в кавычках!
"token": "Response -> Body Attribute"
сама команда выглядит так:
"token": "{% response 'body', 'req_d2e9a976eb4d4e6595011784f232df4a', 'b64::JC50b2tlbg==::46b', 'when-expired', 60 %}"
!["token": "Response -> Body Attribute" "token": "Response -> Body Attribute"](https://habrastorage.org/getpro/habr/upload_files/d9c/72a/cdd/d9c72acddb8ccf551d0482f992906961.png)
Закрыть окно "Manage Environments".
Выбрать вкладку "Auth" , нажать на стрелочку вниз (точнее раскрыть) и выбрать тип аутентификации "Bearer Token". Начать вводить значение {{ в поле "TOKEN" и выбрать переменную ".token". Нажать на кнопку "Send".
![Отображение необходимых данных Отображение необходимых данных](https://habrastorage.org/getpro/habr/upload_files/92c/cb0/491/92ccb049150c9560aa949f630a6e94a9.png)
Ура! Проект создан! Главное не забываем создать пользователя, авторизоваться в систему, и токен таким способом будет получаться автоматически.
Для других запросов можно также "вытащить" необходимые значения.
Общая информация про Insomnia
Insomnia поддерживает отправку запросов через HTTP, gRPC, GraphQL, WebSocket.
![Отправка запросов через HTTP, gRPC, GraphQL, WebSocket. Отправка запросов через HTTP, gRPC, GraphQL, WebSocket.](https://habrastorage.org/getpro/habr/upload_files/7f1/121/26a/7f112126a1fa741b21e9f2103cae9ff2.png)
для HTTP request:
Вкладки "Body" (указание тела запроса), "Auth" (указание типа авторизации), "Query" (указание параметров), ''Headers" (указание HTTP заголовков запроса), "Docs" (указание документации OpenApi для запроса
![для HTTP request для HTTP request](https://habrastorage.org/getpro/habr/upload_files/3b7/2ad/faa/3b72adfaa9c98ae2e3dae61423d528ee.png)
![Выбор формата передачи данных JSON Выбор формата передачи данных JSON](https://habrastorage.org/getpro/habr/upload_files/814/153/31d/81415331d9e44e1a229ff4759b8f2955.png)
Для запроса можно сделать следующие действия:
![Действия с запросом Действия с запросом](https://habrastorage.org/getpro/habr/upload_files/924/2f4/bca/9242f4bcacd6f259a51a2c1ad9872342.png)
Особенно важная функция как "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
и т.д.
![Параметра для ответа от сервера Параметра для ответа от сервера](https://habrastorage.org/getpro/habr/upload_files/dd3/0ca/755/dd30ca7550b748e6a27bec34aa072cdf.png)
Установка сертификата
Про установку сертификата (например, для финтеха это самое первое, что нужно сделать прежде чем отправить запрос).
![](https://habrastorage.org/getpro/habr/upload_files/951/36f/93d/95136f93d35acc3468ef1fcd9f2921d1.png)
Выбрать "Collection Settings" -> "Client Certificates". Нажать на "New Certificate".
![Окно Добавления сертификата Окно Добавления сертификата](https://habrastorage.org/getpro/habr/upload_files/c12/adc/973/c12adc9734527b4902d4674820828c95.png)
Все необходимые файлы и хосты должны предоставить коллеги (админы, спросите в общем чате).
Указать "Host", нажать на "Choose Cert" и "Choose Key", добавить файлы.
![Заполнение окна для сертификата Заполнение окна для сертификата](https://habrastorage.org/getpro/habr/upload_files/728/2eb/67b/7282eb67b6faf5a8e29e91470243b726.png)
Нажать на кнопку "Create Certificate"
Режим просмотра:
![Отображение внесенных данных, сертификат выбран по умолчанию. Отображение внесенных данных, сертификат выбран по умолчанию.](https://habrastorage.org/getpro/habr/upload_files/13b/67a/c70/13b67ac70b205aa6fa84d3548e0a36ca.png)
Для нашей работы в настройках запроса убрать галочки в чек-боксах "Send cookies automatically" и "Store cookies automatically":
![](https://habrastorage.org/getpro/habr/upload_files/25c/4ee/233/25c4ee2332fe2a84861393345e75ba42.png)
___________________
Возможности автоматизации
Инструмент позволяет сделать тестовые сценарии: негативные и позитивные, используется язык JS для автоматизации, позволяет проводить прогоны и получать отчет прогона и сформировать CI для автозапуска из консоли.
Импорт OpenAPI документации
Нажать на иконку "Домашняя страница" -> Найти "All Files" -> "Documents" -> Нажать на "+"
![Импорт Open API документации Импорт Open API документации](https://habrastorage.org/getpro/habr/upload_files/2e5/94e/a3b/2e594ea3b7e2ca057c6d06689b955cd4.png)
Система отображает всплывающее окно "Create New Design Document", оставить "my-spec.yaml" и нажать на кнопку "Create"
![my-spec.yaml my-spec.yaml](https://habrastorage.org/getpro/habr/upload_files/4cb/467/7e3/4cb4677e33f5c89f846be3963fd0dc6e.png)
Создан New Document. Отображены три вкладки "DESIGN", "DEBUG", "TEST".
![Создан New Document Создан New Document](https://habrastorage.org/getpro/habr/upload_files/ffb/90c/410/ffb90c410046cee7c1e12cd3ad0dc041.png)
Нажать на кнопку "Import OpenAPI" -> Выбрать "File".
Выбрать наш файл docs.json, скачанный из https://try.vikunja.io/api/v1/docs
![Отображение Open API документации Отображение Open API документации](https://habrastorage.org/getpro/habr/upload_files/c32/dad/4e8/c32dad4e8b5016d62706e34999b78a5b.png)
Отображена документация "Vikunja API".
Создание первого автотеста при создания пользователя
Выбрать вкладку "DEBUG" - > Добавить запрос на создание пользователя ->
![](https://habrastorage.org/getpro/habr/upload_files/2e7/8ac/3b4/2e78ac3b406cc3e8a3ce0a72f83b83cd.png)
Предупреждаю, что при повторном создании пользователя необходимо изменить почту и имя пользователя.
Так как я уже создала пользователя, то для автотеста я изменю значения почты и имени для пользователя.
Выбрать вкладку "TEST" - > Найти и нажать "New Test Suite" ->
![](https://habrastorage.org/getpro/habr/upload_files/35f/253/ceb/35f253ceb79a159c27217418934e25bc.png)
Указать название "Tests" -> Нажать на кнопку "Create Suite"
![Создание теста Создание теста](https://habrastorage.org/getpro/habr/upload_files/83f/498/a98/83f498a980f4c5fe60eda515faf55d46.png)
Нажать на кнопку "New Test" -> Оставить дефолтное название "Returns 200" (так как при создании пользователя возвращается статус код 200) -> нажать на "New Test"
![Returns 200 Returns 200](https://habrastorage.org/getpro/habr/upload_files/ac7/8cc/e6e/ac78cce6e774ea5bd5de35f949bdc557.png)
![](https://habrastorage.org/getpro/habr/upload_files/413/d74/5ec/413d745eccf712756a38ceaa93773f1b.png)
Выбрать dropdown "Select Request" -> Выбрать наш запрос на "Создание пользователя (регистрация)" из вкладки "DEBUG"
![Запрос на "Создание пользователя (регистрация)" из вкладки "DEBUG" Запрос на "Создание пользователя (регистрация)" из вкладки "DEBUG"](https://habrastorage.org/getpro/habr/upload_files/cec/bb8/377/cecbb83770ad50841aa5c1202afcd6ea.png)
Insomnia предлагает дефолтный фрагмент кода:
const response1 = await insomnia.send();
expect(response1.status).to.equal(200);
![Отображение дефолтного кода Отображение дефолтного кода](https://habrastorage.org/getpro/habr/upload_files/4d5/49b/949/4d549b949f3c6665384edb119d2e3b79.png)
Нажать на кнопку "Run Tests".
![Статус указан "Passed" Статус указан "Passed"](https://habrastorage.org/getpro/habr/upload_files/a57/8d3/727/a578d372717deb2b3a30ee6a43a5972d.png)
Успешно выполнен тест, статус указан "Passed".
Повторно нажать на кнопку "Run Tests".
![статус указан "Failed" статус указан "Failed"](https://habrastorage.org/getpro/habr/upload_files/f59/066/4ff/f590664ff4d10bd2876d8d48f9b5fc4d.png)
Тест провален, статус указан "Failed".
Ура, написан простейший автотест.
Еще примеры:
Предусловия: изменены почта и имя пользователя на вкладке "DEBUG"
![](https://habrastorage.org/getpro/habr/upload_files/bf8/49f/f0e/bf849ff0e43e7de28996531609f7b7d8.png)
Добавлены два теста на отправку регистрации пользователя "Response body has property Id" и ''Response body is json object". Каждый раз отправляется новый тест, поэтому второй тест будет отображать ошибку, что такой пользователь существует (для этого случая будет создан новый тест "User already exists".
![](https://habrastorage.org/getpro/habr/upload_files/727/26a/c57/72726ac57dc17412874e8d27cddbff39.png)
Код для тренировки:
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").
![Тест на проверку, что пользователь уже существует в системе Тест на проверку, что пользователь уже существует в системе](https://habrastorage.org/getpro/habr/upload_files/2c5/ea1/879/2c5ea1879c11fcd9f98a849792aee28f.png)
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 запрещен кибербезопасностью.