【问题标题】:Repeatedly send API request based on parameters in Postman根据 Postman 中的参数重复发送 API 请求
【发布时间】:2019-03-27 14:10:45
【问题描述】:

我有一个包含大约 4,000 条记录的数据库表(目前)。对 API 调用(POST、JSON)的响应为我提供了该表的数据,每个 API 调用最多 1,000 条记录。参数“PageNo”定义选择了 4,000 条记录中的哪一条(例如,PageNo = 1 给我记录 1-1000)。响应的标题数据包括一个“PageCount”,在我的示例 4 中。我能够检索该“PageCount”并且下面的测试循环通过 PageNo(Postman 控制台的结果 = 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}}"
}

【问题讨论】:

    标签: postman postman-collection-runner


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢阿南特。我能够遍历页面并以这种格式获取我的数据:[{“StockNo”:“0001”,“BrandDesc”:“Brand1”},[{“StockNo”:“0002”,“BrandDes”:” Brand2”}] 这是 4,000 条记录中的两条记录,它们都在一行中返回。有没有办法在 API 响应中添加换行符?我还可以选择 txt、xmll 或 csv 格式来删除[{]} 个字符,但又没有换行符。理想情况下,我希望得到以下格式的响应:StockNo, BrandDesc 0001, Brand1 0002, , Brand2 谢谢您的帮助。
    【解决方案2】:

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

    1. Pre-req 脚本 --> 处理对端点的初始请求以检索 PageSize 并将其设置为 env var。还将迭代计数初始化为 1(作为 env var)
    2. 测试脚本 --> 检查当前迭代次数并执行测试。

    这是一个正在工作的邮递员收藏。 如果你熟悉 newman,你可以运行:

    newman run &lt;collection-name&gt;

    您也可以在 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": []
            }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2019-10-15
      相关资源
      最近更新 更多