首页 文章

根据Postman中的参数反复发送API请求

提问于
浏览
0

我有一个数据库表,大约有4,000条记录(目前) . 对API调用(POST,JSON)的响应为我提供了此表的数据,每个API调用最多可记录1,000条记录 . 参数'PageNo'定义了4,000条记录中的哪一条被选中(例如,PageNo = 1给我记录1-1000) . 响应的 Headers 数据包括一个'PageCount',在我的例子中4.我能够检索到'PageCount',下面的测试循环遍历PageNo(结果在Postman Console = 1 2 3 4) .

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

{{的baseUrl}} / V1 /单位/搜索?您做生意= {}

在我的例子中,我希望请求以PageNo2 = 1,2,3,4运行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 回答

  • 1

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

    • 在您的第一个(!)请求中,存储页面数量并创建一个计数器 .

    • 递增计数器 . 如果它小于页面数量,请将当前请求设置为下一个请求 .

    • 否则,请勿设置下一个请求 . 收集运动员将继续正常流动 . (可选)删除页面和计数器变量 .

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

  • 1

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

    • Pre-req脚本 - >处理对 endpoints 的初始请求以检索PageSize并将其设置为env var . 还将iterationCount初始化为1(作为env var)

    • 测试脚本 - >检查当前的迭代编号并执行测试 .

    这是一个工作邮递员系列 . 如果你熟悉纽曼,你可以运行:

    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": []
            }
        ]
    }
    

相关问题