Разбор переменных и скриптов в Insomnia

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Памятка для инженеров по тестированию ПО.

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

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

Введение

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

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

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

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

Скачать готовую коллекцию для данного сайта, которую составляли по написанным тест-кейсам API в рамках статьи.

На момент написании статьи используется версия Insomnia: 8.6.0 для Windows.

Base Environment

Начну показывать переменные через созданное окружение "Vikunja Environment".

Всевозможные переменные
Всевозможные переменные

Структуру переменных для сайта Vikunja можно выстроить в формате JSON.

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

Переменные для сайта Vikunja в Manage Environments (композиция переменных в JSON структуре)
Переменные для сайта Vikunja в Manage Environments (композиция переменных в JSON структуре)
{
	"hosts": {
		"base_URL": "https://try.vikunja.io/api/v1",
		"sm_URL": ""
	},
	"headers": {
		"content-type": "application/json"
	},
	"users": {
		"username": "Nadezhda_test1",
		"email": "user_testing1@test.com",
		"password": "Qq1234568"
	},
	"auth": {
		"Token": "Response -> Body Attribute"
	},
	"projects": {
		"project_Id": "Response -> Body Attribute",
		"title": "project_title",
		"hex_color": "7f23ff"
	},
	"tasks": {
		"task_Id": "Response -> Body Attribute",
		"title_task": "title_task"
	},
	"labels": {
		"label_Id": "Response -> Body Attribute"
	}
}

Динамические переменные

Динамические переменные в Insomnia
Динамические переменные в Insomnia
+ еще переменные
+ еще переменные
Переменные из Response и Request
Переменные из Response и Request
Переменные из Request
Переменные из Request

Разберу несколько из выше показанных переменных.

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

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

Объявление динамических переменных в теле запроса
Объявление динамических переменных в теле запроса

Значение переменной можно увидеть, нажав на данную выбранную переменную, и откроется всплывающее окно "Edit Tag".

  1. UUID -> Version - генерация UUID - значения

    uuid
    uuid
  2. Timestamp - get the current time

    timestamp
    timestamp
  3. Base64 - encode or decode values - для URL

  4. OS - get OS info - всевозможные функции

    Характеристика OS
    Характеристика OS
  5. Использование JSONPath

    Определение значения из JSON string
    Определение значения из JSON string
  6. Hash - apply hash to a value для Base64

  7. Из ответа от сервера Response можно "вытащить" следующие значения:

    • Значение из тела ответа от сервера

    • Тело ответа от сервера

    • Значение заголовка из ответа сервера

    • URL-адрес инициирующего запроса

  8. Из запроса Request можно "вытащить" следующие значения:

    URL-адрес инициирующего запроса
    1. Например, Значение заголовка из запроса

    2. Значение Cookie по названию

      и т.д..

      Также отдельно есть прочтение содержимого из файла, использование входных данных для пользователя. Я разобрала те переменные, которые часто используются в работе, особенно используется "Body Attribute - value of response body"

Вкладка Tests -> New Test Suite -> New Test

Примеры скриптов для регистрации пользователя для сайта Vikunja c использованием chaijs

Написание скриптов для запроса регистрации пользователя на вкладке Tests
Написание скриптов для запроса регистрации пользователя на вкладке Tests
const response2 = await insomnia.send('req_0ca37b8e2a0f40a7a610250ef48f4697'); 
//отправка запроса POST /register

expect(response2.status).to.equal(200) // проверка статус кода

const res_body = JSON.parse(response2.data)//парсинг тела ответа от сервера на язык js
console.log(res_body)//отображение тела ответа от сервера в консоли

expect(res_body).to.be.an('object')//тело ответа от сервера является объектом
expect(res_body.username).to.be.a('string')//значение ключа username является строкой
expect(res_body.username).not.has.length(0)//ключ username не пустой

expect(res_body.email).to.be.a('string')
expect(res_body.email).not.has.length(0)

const expected_keys = [
	"id",
	"name",
	"username",
	"email",
	"created",
	"updated"
]
//Проверка ожидаемых ключей в теле ответа от сервера
expect(res_body).to.have.all.keys(expected_keys)

expect(res_body.username).to.equal("<Указать значение из окружения>")
expect(res_body.email).to.equal("<Указать значение из окпужения>")

Хочу отметить, что можно выбрать запрос через "Select a request", а можно отправить запрос внутри самого теста.

Например, я указываю так:

Отправка запроса внутри теста вместо поля “Select a request”
Отправка запроса внутри теста вместо поля “Select a request”

Примеры скриптов для авторизации пользователя

const response2 = await insomnia.send('req_c6319e16d41a4ed593fec04d92f7183c');
//отправка запроса POST /login
expect(response2.status).to.equal(200);

const res_body = JSON.parse(response2.data)
console.log(res_body)
expect(res_body).to.be.an('object')

expect(res_body.token).to.be.a('string')//значение ключа token является строкой
expect(res_body.token).not.has.length(0)
console.log(res_body.token)

Примеры скриптов для создания проекта пользователем на сайте (Create Project)

const response2 = await insomnia.send('req_b8be8c6b91e24343af7e2c1ae1ffa7fc');
//отправка запроса PUT /projects

expect(response2.status).to.equal(201);

const res_body = JSON.parse(response2.data)
console.log(res_body)
expect(res_body).to.be.an('object')

expect(res_body.id).to.be.a('number')
expect(res_body).to.have.property('id')
expect(res_body.id).to.equal(<Указать ожидаемое значение>)
console.log(res_body.id)

//примеры
expect(res_body.title).to.be.a('string')
expect(res_body.owner.username, "поле username должно быть строкой").to.be.a('string')

expect(res_body.is_archived).to.equal(false)

Примеры скриптов для получения всех проектов Get all Projects

const response2 = await insomnia.send('req_716ace9255e34ac1970bfc7571dc6ab0');
//отправка запроса GET /projects
expect(response2.status).to.equal(200);

const res_body = JSON.parse(response2.data)
const project_id1 = res_body[0].id
console.log(project_id1)

//для примера - и то эксперимент
const expected_colors = ["7f23ff"]
const actual_colors = res_body.map(item => item.hex_color)
expect(actual_colors).to.include.members(expected_colors)
console.log(actual_colors)

Из https://www.chaijs.com/api/bdd/ и https://docs.insomnia.rest/insomnia/unit-testing можно использовать различные конструкции, чтобы составить свои проверки на вкладке tests.

Заключение

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

Также я предлагаю просмотреть мой вебинар на тему "Тестирование API с использованием Insomnia"

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

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

И желаю достичь своей цели!

Источник: https://habr.com/ru/articles/791826/


Интересные статьи

Интересные статьи

Доброго времени суток всем читателям Хабр. Поиск работы в it сфере сильно отличается от обычных профессий и порог вхождения на любую позицию в it намного выше большинства профессий. Традиционно п...
Блог Acquires Multiple опубликовал расшифровку интервью известного американского финансиста Джона Хэмптона, в котором он рассказал о рисках, связанных с игрой на понижение и испол...
Только что вышла первая версия разработанного мной статически типизированного встраиваемого скриптового языка Umka. Он призван сочетать гибкость привычных скриптовых языков с защитой от ошибок ...
Продолжая серию заметок о менее известных функциях bash, покажу вам семь переменных, о которых вы могли не знать. 1) PROMPT_COMMAND Возможно, вы уже в курсе, как манипулировать приглашением p...
Всем привет! Закончилась одна из самых хардкорных конференций по Java – JPoint 2019, она проходила в седьмой раз и как всегда побила рекорд по посещаемости, в этот раз мероприятие привлек...