Повторно отправлять запрос API на основе параметров в Почтальон - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть таблица базы данных с приблизительно 4000 записями (в настоящее время).Ответ на вызов API (POST, JSON) дает мне данные этой таблицы максимум для 1000 записей на вызов API.Параметр PageNo определяет, какая из 4000 записей выбрана (например, PageNo = 1 дает мне запись 1-1000).Данные заголовка ответа включают в себя «PageCount», в моем примере 4. Я могу получить этот «PageCount», и приведенный ниже тест проходит через PageNo (результат в Postman Console = 1 2 3 4).

Как я могу повторно вызывать один и тот же запрос в цикле и использовать значения PageNo (i) в качестве параметра для этого запроса, например, так:

{{baseUrl}} / v1 / Units / Search?PageNo = {{i}}

В моем примере я ожидаю, что запрос будет выполнен 4 раза с PageNo2 = 1, 2, 3, 4.

Я знаю, что могу использоватьCSV-файл и цикл по запросу в Collection Runner, но изменяется PageCount (т. Е. Изменяется число записей в таблице), и мне нужно часто запускать этот цикл, поэтому создание нового CSV-файла для каждого цикла на самом деле не вариант.

Тест почтальона:

pm.environment.set('Headers2', JSON.stringify(pm.response.headers));
var Headers2 = JSON.stringify(pm.response.headers);

pm.environment.set('PageCount2', JSON.parse(Headers2)[10].value);
var i;
for (i = 1; [i] <= pm.environment.get('PageCount2'); i++) {
    console.log(i);
    postman.setNextRequest('custom fields | json Copy');

}

Запрос почтальона:

{
  "Location":"{{TestingLocation}}",
  "Fields":[
    "StockNo",
    "BrandDesc"
    ],
  "Filters": {
      "StatusCode":"{{TestingUnitSearchStatusCode}}"
  },
  "PageSize":1000,
  "PageNo" : "{{i}}"
}

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Выполнение POC для вашего сценария использования с использованием API postman-echo.

  1. Pre-req script -> Обрабатывает начальный запрос к конечной точке, чтобы получить PageSize и установить его какenv var.Также инициализирует iterationCount к 1 (как env var)
  2. Test Script -> Проверяет текущий номер итерации и выполняет тесты.

Вот рабочая коллекция почтальона.Если вы знакомы с newman, вы можете просто запустить:

newman run <collection-name>

Вы также можете импортировать эту коллекцию в приложение Postman и использовать бегунок коллекции.

{
    "info": {
        "_postman_id": "1d7669a6-a1a1-4d01-a162-f8675e01d1c7",
        "name": "Loop Req Collection",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "Run_Req",
            "event": [
                {
                    "listen": "test",
                    "script": {
                        "id": "dac5e805-548b-4bdc-a26e-f56500414208",
                        "exec": [
                            "var iterationCount = pm.environment.get(\"iterationCount\");",
                            "if (pm.environment.get(\"iterationCount\") <= pm.environment.get(\"pageSize\")) {",
                            "    console.log(\"Iteration Number: \" + iterationCount);",
                            "",
                            "    pm.test(\"Status code is 200\", function() {",
                            "        pm.response.to.have.status(200);",
                            "    });",
                            "",
                            "    pm.test(\"Check value of pageNo in body is equal to iterationCount\", function() {",
                            "        var jsonData = pm.response.json();",
                            "        return jsonData.json.PageNo == iterationCount;",
                            "",
                            "    });",
                            "    iterationCount++;",
                            "    pm.environment.set(\"iterationCount\", iterationCount);",
                            "    postman.setNextRequest('Run_Req');",
                            "}",
                            "if (pm.environment.get(\"iterationCount\") > pm.environment.get(\"pageSize\")) {",
                            "    console.log(\"Cleanup\");",
                            "    pm.environment.unset(\"pageSize\");",
                            "    pm.environment.set(\"iterationCount\", 1);",
                            "    postman.setNextRequest('');",
                            "    pm.test(\"Cleanup Success\", function() {",
                            "        if (pm.environment.get(\"pageSize\") == null && pm.environment.get(\"iterationCount\") == null) {",
                            "            return true;",
                            "        }",
                            "    });",
                            "}"
                        ],
                        "type": "text/javascript"
                    }
                },
                {
                    "listen": "prerequest",
                    "script": {
                        "id": "3d43c6c7-4a9b-46cf-bd86-c1823af5a68e",
                        "exec": [
                            "if (pm.environment.get(\"pageSize\") == null) {",
                            "    pm.sendRequest(\"https://postman-echo.com/response-headers?pageSize=4\", function(err, response) {",
                            "        var pageSize = response.headers.get('pageSize');",
                            "        var iterationCount = 1;",
                            "        console.log(\"pre-req:pageSize= \" + pageSize);",
                            "        console.log(\"pre-req:iterationCount= \" + iterationCount);",
                            "        pm.environment.set(\"pageSize\", pageSize);",
                            "        pm.environment.set(\"iterationCount\", iterationCount);",
                            "    });",
                            "",
                            "}"
                        ],
                        "type": "text/javascript"
                    }
                }
            ],
            "request": {
                "method": "POST",
                "header": [
                    {
                        "key": "Content-Type",
                        "name": "Content-Type",
                        "value": "application/json",
                        "type": "text"
                    }
                ],
                "body": {
                    "mode": "raw",
                    "raw": "{\n  \"Location\":\"{{TestingLocation}}\",\n  \"Fields\":[\n    \"StockNo\",\n    \"BrandDesc\"\n    ],\n  \"Filters\": {\n      \"StatusCode\":\"{{TestingUnitSearchStatusCode}}\"\n  },\n  \"PageSize\":1000,\n  \"PageNo\" : \"{{iterationCount}}\"\n}"
                },
                "url": {
                    "raw": "https://postman-echo.com/post",
                    "protocol": "https",
                    "host": [
                        "postman-echo",
                        "com"
                    ],
                    "path": [
                        "post"
                    ]
                }
            },
            "response": []
        }
    ]
}
0 голосов
/ 30 ноября 2018

С помощью postman.setNextRequest() вы можете установить запрос вызова как тот же запрос.Но вам нужна стратегия выхода, иначе этот запрос будет вызываться бесконечное количество раз.Это работает только с исполнителем коллекции.

  1. По первому (!) Запросу сохраните количество страниц и создайте счетчик.
  2. Увеличить счетчик.Если он меньше количества страниц, установите текущий запрос в качестве следующего запроса.
  3. В противном случае не устанавливайте следующий запрос.Бегун коллекции продолжит свой нормальный поток.При необходимости удалите страницы и переменные счетчика.

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

...