1. Обзор

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

2. Настройка

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

Создадим новую коллекцию под названием «Google Apps – Load Testing», импортировав несколько примеров HTTP-запросов, доступных в формате коллекций Postman 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": []
    }
  ]
}

Во время импорта данных используем опцию “Raw text”:

Вот и все! Нажимаем на «Продолжить», и наша тестовая коллекция готова в Postman.

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

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

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

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

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

Теперь нажмем на «Run Google Apps – Load Testing», чтобы начать базовое нагрузочное тестирование API-запросов в коллекции:

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

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

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

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

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

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

Затем мы установим “Get Youtube” в качестве запроса, который будет выполняться после “Get Google Translate”:

postman.setNextRequest("Get Youtube");

Более того, мы знаем, что “Get 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"

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

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

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

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

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

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


Приглашаем всех желающих на открытое занятие «Расчет сценария нагрузочного тестирования», на котором мы изучим, как рассчитываются параметры сценария НТ для различных инструментов нагрузочного тестирования. Регистрация по ссылке.

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


  1. gurovofficial
    16.07.2022 17:49

    Чем плох curl и подстановки?


  1. gigimon
    17.07.2022 00:38

    Зачем тут postman, если используется k6?