根据Postman中的参数重复发送API请求
我有一个数据库表,大约有4000条记录(目前)。对API调用(POST,JSON)的响应为我提供此表的数据,每个API调用最多1000条记录。参数“PageNo”定义选择4000条记录中的哪一条(例如,PageNo=1表示记录1-1000)。在我的示例4中,响应的头数据包括一个“PageCount”。我能够检索“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会更改(即表中的记录数更改),我需要经常运行此循环,因此为每个循环创建新的CSV文件实际上不是一个选项 邮差测验:根据Postman中的参数重复发送API请求,postman,postman-collection-runner,Postman,Postman Collection Runner,我有一个数据库表,大约有4000条记录(目前)。对API调用(POST,JSON)的响应为我提供此表的数据,每个API调用最多1000条记录。参数“PageNo”定义选择4000条记录中的哪一条(例如,PageNo=1表示记录1-1000)。在我的示例4中,响应的头数据包括一个“PageCount”。我能够检索“PageCount”,下面的测试通过PageNo循环(结果是Postman控制台=1 2 3 4) 如何在循环中重复调用同一请求,并使用PageNo(I)的值作为该请求的参数,如下所示:
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');
}
使用
postman.setNextRequest()
可以将调用请求设置为相同的请求。但您需要一个退出策略,否则该请求将被称为无限次。这仅适用于收集运行程序
{
"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": []
}
]
}
您可以通过未初始化页数和计数器变量,让请求检测到这是它的第一次迭代。使用
postman.setNextRequest()
可以将调用请求设置为相同的请求。但您需要一个退出策略,否则该请求将被称为无限次。这仅适用于收集运行程序
{
"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": []
}
]
}
您可以通过没有初始化页面和计数器变量的数量,让请求检测到这是它的第一次迭代。使用postman echo API为您的用例执行POC
newman跑
您还可以在Postman应用程序中导入此集合并使用collection runner
{
"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": []
}
]
}
{
“信息”:{
“邮递员id”:“1d7669a6-a1a1-4d01-a162-f8675e01d1c7”,
“名称”:“循环请求集合”,
“架构”:https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
“项目”:[
{
“名称”:“运行要求”,
“事件”:[
{
“倾听”:“测试”,
“脚本”:{
“id”:“dac5e805-548b-4bdc-a26e-F5650414208”,
“执行官”:[
“var iterationCount=pm.environment.get(\“iterationCount\”);”,
“如果(pm.environment.get(\“iterationCount\”)pm.environment.get(\“pageSize\”){”,
“console.log(\“Cleanup\”);”,
“pm.environment.unset(\“pageSize\”);”,
“pm.environment.set(\“iterationCount\”,1);”,
“邮递员。setNextRequest('');”,
“pm.test(\'Cleanup Success\',function(){”,
“如果(pm.environment.get(\“pageSize\”)==null&&pm.environment.get(\“iterationCount\”)==null){”,
“返回true;”,
" }",
" });",
"}"
],
“类型”:“文本/javascript”
}
},
{
“侦听”:“预请求”,
“脚本”:{
“id”:“3d43c6c7-4a9b-46cf-bd86-c1823af5a68e”,
“执行官”:[
“如果(pm.environment.get(\“pageSize\”)==null){”,
“pm.sendRequest(\”https://postman-echo.com/response-headers?pageSize=4\“,函数(错误,响应){”,
“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);”,
" });",
"",
"}"
],
“类型”:“文本/javascript”
}
}
],
“请求”:{
“方法”:“发布”,
“标题”:[
{
“键”:“内容类型”,
“名称”:“内容类型”,
“值”:“应用程序/jso”