如何在使用纽曼运行时将输入数据文件(JSON文件)中的变量用于Postman集合

b1payxdu  于 2023-10-18  发布在  Postman
关注(0)|答案(1)|浏览(133)

我有一个json格式的输入数据表,我想从这个表中选择值name和passsword,并使用pre-request脚本将其传递到postman请求的请求体中。这是输入表:

[
  {
    "num_of_steps": "1",
    "testcases": [
      {
        "comment": "Login",
        "test case": "1",
        "data": {
          "version": "2.1"
        },
        "Input": {
          "name": "panda",
          "password": "apple123"
        }
      }
    ]
  }
]

那么,postman中的语句/表达式是什么呢?选择要在pre-requuest脚本中写入的名称和密码,我已经尝试过pm.iterationData.get("name");,但只有当值直接出现在inputsheet中时才有效,没有任何分支。

t3irkdon

t3irkdon1#

您可以在here中使用Newman command options

-d, --iteration-data [file] : Specify a data file to use, either JSON or CSV.

#1保存为data.json

这个数据,我想你的数据就是这个数组格式的对象。

[
    {
        "num_of_steps": "1",
        "testcases": [
          {
            "comment": "Login",
            "test case": "1",
            "data": {
              "version": "2.1"
            },
            "Input": {
              "name": "panda",
              "password": "apple123"
            }
          }
        ]
    },
    {
        "num_of_steps": "2",
        "testcases": [
          {
            "comment": "Login",
            "test case": "1",
            "data": {
              "version": "2.1"
            },
            "Input": {
              "name": "monkey",
              "password": "strong_password1234"
            }
          }
        ]
    }
]

2设置全局变量

在Postman的Pre-request Script选项卡中分配

pm.globals.set("jsonBody", JSON.stringify(pm.iterationData.toObject()));
var jsonData = JSON.parse(pm.globals.get("jsonBody"))
var input = jsonData["testcases"][0]["Input"];
pm.globals.set("username", input?.name);
pm.globals.set("password", input?.password);

POST调用后将设置usernamepassword的全局变量。

3访问输入体变量

在POST调用的输入正文中

{
    "username": "{{username}}",
    "password": "{{password}}"
}

#4 Postman的Tests选项卡中的设置测试

var jsonData = JSON.parse(responseBody);

var username = jsonData["username"]
var password = jsonData["password"]

pm.test('Check username = ' + JSON.stringify(username), function () {
    pm.expect(username).to.equal(pm.globals.get("username"));
});

pm.test('Check password = ' + JSON.stringify(password), function () {
    pm.expect(password).to.equal(pm.globals.get("password"));
});

5导出集合

6 Python的Flask演示服务器

它将从输入体的POST回放到输出体
保存为server.py文件名。

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/user", methods=["POST"])
def post_test():
    content_type = request.headers.get('Content-Type')
    if (content_type == 'application/json'):
        json = request.get_json()
        return json, 201
    else:
        return 'Content-Type not supported!'

if __name__ == "__main__":
    app.run(debug=True)

7安装flask并运行server

pip install flask
python server.py

8使用data.json和集合文件运行newman

newman run ./demo.postman_collection.json  --iteration-data ./data.json

您可以看到用户和密码返回到输出体。这些值来自JSON对象数组文件。
结果检测

相关问题