JMeter、Postman接口测试之(参数化)断言

本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/116660097

之前分享过 JMeter、Postman接口测试之读取csv文件、参数化。这次来说些断言的。

个人博客:https://blog.csdn.net/zyooooxie

需求:一组参数值,返回的某字段值不同,如何断言

某项目有个接口,是传入某int,返回值 类似:“data”:[{“month”:1,“csdn”:“zyooooxie”},{“month”:3,“csdn”:“zyooooxie”},{“month”:6,“csdn”:“zyooooxie”}……]

细说:
传50时,data list只有一个元素,校验month的字段值为1;
传500时,data list有两个元素,校验month的字段值为1, 3;
传1500时,data list有三个元素,校验month的字段值为1, 3, 6;
传2500时,data list有四个元素,校验month的字段值为1, 3, 6, 9;
传4000时,data list有五个元素,校验month的字段值为1, 3, 6, 9, 12;

这样的情形下,我想对返回的字段值做断言;要咋做呢?

可以按部就班,发5个请求,传某int,做 相对应的断言;

但我想把这个断言也做成参数化,怎么实现呢?

我的思路:准备一个CSV文件,将参数值、断言一起写入;使用工具(JMeter、Postman),读取每行的数据,将其设置为变量p、a(可能有a1、a2、a3、a4、a5);请求参数 使用p,得到响应后,将对应的a 和实际获得的返回值做断言。

参数化文件

有些断言值 故意设错

第1种 JMeter适用:

p,a1,a2,a3,a4,a5
50,1
500,1,3
1500,11,3,6
2500,1,31,6,9
4000,11,3,6,9,12

第2种 Postman 适用:

p,a1,a2,a3,a4,a5
50,1,NULL,NULL,NULL,NULL
500,1,3,NULL,NULL,NULL
1500,11,3,6,NULL,NULL
2500,1,31,6,9,NULL
4000,11,3,6,9,12

Mock返回值

我本地 建了 5个json文件,作为 请求时的返回值。

{"success":true,"errorCode":null,"errorMessage":null,"data":[{"month":1,"csdn":"zyooooxie"}]}
{"success":true,"errorCode":null,"errorMessage":null,"data":[{"month":1,"csdn":"zyooooxie"},{"month":3,"csdn":"zyooooxie"}]}
{"success":true,"errorCode":null,"errorMessage":null,"data":[{"month":1,"csdn":"zyooooxie"},{"month":3,"csdn":"zyooooxie"},{"month":6,"csdn":"zyooooxie"}]}
{"success":true,"errorCode":null,"errorMessage":null,"data":[{"month":1,"csdn":"zyooooxie"},{"month":3,"csdn":"zyooooxie"},{"month":6,"csdn":"zyooooxie"},{"month":9,"csdn":"zyooooxie"}]}
{"success":true,"errorCode":null,"errorMessage":null,"data":[{"month":1,"csdn":"zyooooxie"},{"month":3,"csdn":"zyooooxie"},{"month":6,"csdn":"zyooooxie"},{"month":9,"csdn":"zyooooxie"},{"month":12,"csdn":"zyooooxie"}]}

Moco框架 返回本地文件

常常用的是 直接写死返回值,但这次想着搞点不同的:response中 返回本地的文件。

下面提供2种方式:

moco 直接返回本地文件

https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md#attachment

File: all.json

[
{"description":"send request 50",
"request": {"uri": "/zyooooxie","method":"get","queries":{"zy":"50","test":"TEST"}},
"response":{"file":"50.json","headers" :{"content-type" : "application/json"}}},

{"description":"send request 500",
"request": {"uri": "/zyooooxie","method":"get","queries":{"zy":"500","test":"TEST"}},
"response":{"file":"500.json","headers" :{"content-type" : "application/json"}}},

{"description":"send request 1500",
"request": {"uri": "/zyooooxie","method":"get","queries":{"zy":"1500","test":"TEST"}},
"response":{"file":"1500.json","headers" :{"content-type" : "application/json"}}},

{"description":"send request 2500",
"request": {"uri": "/zyooooxie","method":"get","queries":{"zy":"2500","test":"TEST"}},
"response":{"file":"2500.json","headers" :{"content-type" : "application/json"}}},

{"description":"send request 4000",
"request": {"uri": "/zyooooxie","method":"get","queries":{"zy":"4000","test":"TEST"}},
"response":{"file":"4000.json","headers" :{"content-type" : "application/json"}}}
]
moco的template用法 返回本地文件

https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md#file-name-template

File: new.json

[
{
"description":"send request",
"request": {"uri": "/zyooooxie","method":"get","queries":{"test":"TEST"}},
"response":{ "file": {"name": {"template": "${req.queries['zy']}.json"}},"headers" :{"content-type" : "application/json"}}
}
]

使用requests请求

def send_request(req_num: int):
    data_dict = {"zy": req_num, "test": "TEST"}
    res = requests.get('http://127.0.0.1:12306/zyooooxie', params=data_dict)
    print(res.json())
    data_list = res.json()['data']
    order_list = [d['month'] for d in data_list]

    return order_list

JMeter来做

我的思路:

1,CSV Data Set Config,设置1个传参变量、5个断言变量【某些断言变量没赋值,就不存在】;

在这里插入图片描述

2,If Controller 判断某断言变量是否存在【不同判断条件 对应 不同断言内容】;

https://jmeter.apache.org/usermanual/component_reference.html#If_Controller

在这里插入图片描述

在这里插入图片描述

3,使用传参变量发请求;

在这里插入图片描述

4,Regular Expression Extractor 后置提取 实际返回值中 所有断言的value;

在这里插入图片描述

在这里插入图片描述

5,断言(N个断言变量的值 和 实际返回值);

在这里插入图片描述

在这里插入图片描述

6,结果

在这里插入图片描述

Postman来做

我的思路:

0,请求中 传参为 本地CSV文件中的变量;断言变量需要 特别留意【每个断言变量都要有值,我设置为NULL(读取后是str格式)】;

在这里插入图片描述

1,请求中,请求体 使用传参变量;

在这里插入图片描述

2,后置Tests脚本:if判断 某断言变量是否为’NULL’,若不为’NULL’,断言此断言变量的值 和实际返回值;

在这里插入图片描述


pm.test("Your test name", function () {
    
    var jsonData = pm.response.json();
    
    pm.expect(jsonData.data[0].month).to.eql(pm.variables.get("a1"));
    
    if (pm.variables.get("a2") != "NULL"){
        pm.expect(jsonData.data[1].month).to.eql(pm.variables.get("a2"));
    }
    
    if (pm.variables.get("a3") != "NULL"){
        pm.expect(jsonData.data[2].month).to.eql(pm.variables.get("a3"));
    }
    
    if (pm.variables.get("a4") != "NULL"){
        pm.expect(jsonData.data[3].month).to.eql(pm.variables.get("a4"));
    }
    if (pm.variables.get("a5") != "NULL"){
        pm.expect(jsonData.data[4].month).to.eql(pm.variables.get("a5"));
    }
}
);

3,Collection中 Data设置使用本地CSV文件、Iteration设置请求次数、Preview Data查看实际读取的数据;

在这里插入图片描述

在这里插入图片描述

本文链接:https://blog.csdn.net/zyooooxie/article/details/116660097

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 的? 对于接口之间的关联,我通常使用变量来传递数据,并将前一个接口返回的数据保存在变量中。这样,后续接口需要使用到这个数据时,就可以直接从变量中获取。设置断言时,我会对接口返回的数据进行判断,如果满足预期结果,则认为测试通过,否则测试失败。 关于参数化,我通常使用csv文件来存储不同的参数组合,然后在测试计划中使用CSV Data Set Config来读取文件中的数据,并将数据传递给接口进行测试。这样做可以避免手动修改每个请求,提高测试效率。 ### 回答2: 在postman接口测试中,我可以通过使用变量来实现接口之间的关联。具体而言,我可以通过设置前一个接口的响应信息的参数值为一个变量,并在后续的接口中使用该变量作为参数。这样,在后续的接口中,我就可以获取到前一个接口的响应信息,进而实现接口之间的关联。 关于断言的设置,我可以在Postman中通过在测试脚本中使用断言函数来实现。根据接口的具体情况,我可以使用不同的断言函数来验证不同的响应结果。例如,可以使用`pm.response.to.have.status`来验证响应的状态码、`pm.test`来验证响应的内容等。 在使用jmeter进行接口测试时,参数化可以通过不同的方式来实现。一种常见的方式是使用CSV文件进行参数化。我可以在jmeter中设置CSV数据文件,并在接口的参数中使用变量来引用CSV文件中的数据。这样,在每次的请求中,jmeter会自动读取下一个数据行,实现参数化的效果。除了CSV文件,我也可以使用其他类型的数据文件如Excel等来实现参数化。另外,jmeter还提供了很多其他的参数化方式,如使用Counter、Random等元件来生成不同的参数值。这些都可以根据具体的需求来选择适合的参数化方式。 ### 回答3: 在Postman接口测试中,我通常使用不同的方法来实现接口之间的关联。其中,最常用的方法包括使用环境变量、全局变量或者通过发送请求获取响应中的数据。 首先,我可以选择设置环境变量,将一个接口的响应数据作为一个变量,然后在另一个接口中使用该变量作为请求参数或者请求头。这样可以保证接口之间的数据传递和关联。 其次,我可以将接口的响应数据保存为全局变量。全局变量可以在多个请求中共享,这样可以实现接口之间的关联。 此外,我也可以通过发送请求获取响应中的数据,然后使用JavaScript脚本来解析和提取所需的数据。然后,我可以将这些数据作为参数传递给其他接口。 对于断言的设置,我通常使用Postman提供的断言功能来验证接口返回的数据是否符合预期。通过在请求的Tests选项中编写JavaScript脚本来实现断言。我可以使用脚本来检查响应的状态码、响应时间、响应体中的特定字段或值等等。 除了Postman,我也使用过JMeter进行接口测试。在参数化方面,JMeter提供了多个参数化的方法。最常见的方法是使用CSV文件作为数据源,将不同的参数存储在CSV文件中,然后在测试计划中通过CSV数据集配置元件来读取和使用这些参数。这样可以实现在一次测试中使用不同的参数来运行相同的接口。同时,JMeter还支持使用其他数据源,比如数据库、Excel等来进行参数化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值