Перейти к основному содержимому

Нагрузочное тестирование с использованием Postman

· 6 мин. чтения

1. Обзор

Нагрузочное тестирование является важной частью жизненного цикла разработки программного обеспечения (SDLC) для современных корпоративных приложений. В этом руководстве мы будем использовать коллекции Postman для выполнения простого нагрузочного тестирования .

2. Настройка

Мы можем загрузить и установить настольный клиент , совместимый с операционной системой нашей системы. Кроме того, мы можем создать бесплатную учетную запись Postman и получить доступ к веб-клиенту .

Теперь давайте создадим новую коллекцию под названием «Google Apps — нагрузочное тестирование», импортировав несколько примеров HTTP-запросов, доступных в Postman's Collection Format v2.1:

{
"info": {
"_postman_id": "ddbb5536-b6ad-4247-a715-52a5d518b648",
"name": "Google Apps - Load Testing",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Get Google",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.google.com",
"protocol": "https",
"host": [
"www",
"google",
"com"
]
}
},
"response": []
},
{
"name": "Get Youtube",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.youtube.com/",
"protocol": "https",
"host": [
"www",
"youtube",
"com"
],
"path": [
""
]
}
},
"response": []
},
{
"name": "Get Google Translate",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://translate.google.com/",
"protocol": "https",
"host": [
"translate",
"google",
"com"
],
"path": [
""
]
}
},
"response": []
}
]
}

Мы должны использовать опцию «Необработанный текст» при импорте данных : Вот и все! Нам просто нужно выполнить задачу импорта, щелкнув действие «Продолжить», и наша тестовая коллекция будет готова в Postman.

./c15c6a0a09064ed04449278420caaf60.png

3. Использование Postman Collection Runner

В этом разделе мы рассмотрим, как мы можем использовать Postman's Collection Runner для выполнения запросов API в коллекции «Google Apps — нагрузочное тестирование» и выполнения базового нагрузочного тестирования.

3.1. Базовая конфигурация

Мы можем запустить Collection Runner, щелкнув правой кнопкой мыши коллекцию:

./beee6a3c65f8514c893578ce189978ec.png

В режиме Runner настроим запуск, указав порядок выполнения, количество итераций и задержку между последовательными обращениями к API :

./c36bc46ad71d2797634b2dc0e45cc276.png

Затем давайте нажмем «Запустить Google Apps — нагрузочное тестирование», чтобы начать базовое нагрузочное тестирование запросов API в коллекции:

./b483ab4a8c5373de9881df5801c80300.png

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

3.2. Расширенная настройка с использованием тестовых сценариев

Используя графический интерфейс Postman, мы смогли контролировать порядок выполнения API. Однако мы можем получить более точный контроль над потоком выполнения, используя функцию Test Scripts в Postman.

Допустим, мы хотим включить API «Google Translate» в рабочий процесс только в том случае, если обращения к «API Google» возвращаются с кодом состояния HTTP 200 . В противном случае мы хотим напрямую обратиться к «Youtube API»:

./cd00f13f0854c9c721eaa81fb10a4e74.png

Мы начнем с добавления простого условного оператора в раздел «Тесты» для запроса «Получить Google»:

if (pm.response.code == 200) {
postman.setNextRequest("Get Google Translate");
}
else {
postman.setNextRequest("Get Youtube");
}

Затем мы установим «Получить Youtube» в качестве последующего запроса, который будет выполняться после «Получить Google Translate»:

postman.setNextRequest("Get Youtube");

Более того, мы знаем, что «Получить Youtube» — последний запрос в потоке, поэтому следующий за ним запрос мы установим как null :

postman.setNextRequest(null);

Наконец, давайте посмотрим полную коллекцию с тестовыми скриптами:

{
"info": {
"_postman_id": "ddbb5536-b6ad-4247-a715-52a5d518b648",
"name": "Google Apps - Load Testing",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Get Google",
"event": [
{
"listen": "test",
"script": {
"exec": [
"if (pm.response.code == 200) {",
" postman.setNextRequest(\"Get Google Translate\");",
"}",
"else {",
" postman.setNextRequest(\"Get Youtube\");",
"}"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.google.com",
"protocol": "https",
"host": [
"www",
"google",
"com"
]
}
},
"response": []
},
{
"name": "Get Youtube",
"event": [
{
"listen": "test",
"script": {
"exec": [
"postman.setNextRequest(null);"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://www.youtube.com/",
"protocol": "https",
"host": [
"www",
"youtube",
"com"
],
"path": [
""
]
}
},
"response": []
},
{
"name": "Get Google Translate",
"event": [
{
"listen": "test",
"script": {
"exec": [
"postman.setNextRequest(\"Get Youtube\");"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://translate.google.com/",
"protocol": "https",
"host": [
"translate",
"google",
"com"
],
"path": [
""
]
}
},
"response": []
}
]
}

Как и ранее, мы можем использовать Collection Runner для выполнения этого пользовательского потока.

4. Использование Newman Runner

Мы можем использовать утилиту Newman CLI для запуска коллекции Postman через командную строку. Такой подход открывает более широкие возможности для автоматизации .

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

newman run -n2 "Custom Flow Google Apps - Load Testing.postman_collection.json"

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

./8aa17c7af90e1583de13687dab871439.png

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

5. Использование Grafana k6

Postman — это самый простой способ сформулировать поток сбора и выполнения запросов. Однако при использовании Postman или Newman мы последовательно вызываем запросы один за другим .

В практическом сценарии нам нужно протестировать наши системы на наличие запросов, поступающих от нескольких пользователей одновременно. Для такого случая использования мы можем использовать утилиту Grafana k6 .

Во-первых, нам нужно преобразовать нашу существующую коллекцию Postman в формат, совместимый с k6. Мы можем использовать библиотеку postman-to-k6 для этой вехи:

postman-to-k6 "Google Apps - Load Testing.json" -o k6-script.js

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

k6 run --duration 3s --vus 2 k6-script.js

По завершении мы получаем подробный статистический отчет, показывающий такие метрики, как среднее время отклика, количество итераций и многие другие:

./338c439a3cada05ec6e8215e7e49b9ef.png

6. Заключение

В этом руководстве мы использовали коллекции Postman для выполнения базового нагрузочного тестирования с использованием графического интерфейса и средства запуска Newman. Кроме того, мы узнали об утилите k6, которую можно использовать для расширенного нагрузочного тестирования запросов в коллекции Postman.