根据邮递员中的参数重复发送API请求

时间:2018-11-30 00:09:19

标签: postman postman-collection-runner

我有一个大约有4,000条记录的数据库表(当前)。对API调用(POST,JSON)的响应为我提供了该表的数据,每个API调用最多可包含1,000条记录。参数“ PageNo”定义了从4,000条记录中选择的哪条(例如,PageNo = 1会给我记录1-1000)。在示例4中,响应的标头数据包含“ PageCount”。我能够检索到“ PageCount”,并且下面的测试遍历PageNo(在Postman Console中的结果= 1 2 3 4)。

我如何在循环中重复调用同一请求,并使用PageNo(i)的值作为该请求的参数,如下所示:

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

在我的示例中,我希望请求以PageNo2 = 1、2、3、4运行4次。

我知道我可以使用CSV文件并遍历Collection Runner中的请求,但是PageCount发生了变化(即表中的记录数发生了变化),我需要经常运行此循环,因此需要为每个循环实际上都不是一个选择。

邮递员测试:

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 :(得分:1)

使用postman.setNextRequest(),您可以将呼叫请求设置为同一请求。但是您需要一个退出策略,否则该请求将被称为无限次。这仅适用于收集运行器。

  1. 在您的第一个(!)请求中,存储页数并创建一个计数器。
  2. 增加计数器。如果它小于页面数,则将当前请求设置为下一个请求。
  3. 否则,请勿设置下一个请求。收集运行器将继续其正常流程。 (可选)删除页面和计数器变量。

您可以通过不初始化页面和计数器变量的数量来让请求检测到它是第一次迭代。

答案 1 :(得分:1)

使用postman-echo API为您的用例执行POC。

  1. 先决条件脚本->处理对端点的初始请求,以检索PageSize并将其设置为环境变量。还将迭代计数初始化为1(如env var)
  2. 测试脚本->检查当前迭代编号并执行测试。

这是一个工作中的邮递员收藏。 如果您熟悉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": []
        }
    ]
}