Postman:基于CSV数据动态生成请求体多轮运行登录API并定制断言
实现步骤
一、准备CSV测试数据
按需求设计CSV列,包含userName、password、remember、expectedCode(断言用的预期响应码)、expectedMsg(预期响应信息)等字段。其中remember列留空时,对应仅传必填参数的场景。示例CSV内容:
userName,password,remember,expectedCode,expectedMsg testUser1,123456,,200,登录成功 testUser2,abc789,true,200,登录成功(记住密码) testUser3,xyz123,false,200,登录成功(不记住密码)
二、动态生成请求体
以下是主流API测试工具的实现方式:
1. JMeter实现
- 添加
CSV Data Set Config,配置文件路径、编码,变量名设为userName,password,remember,按需勾选Recycle on EOF。 - 在登录请求的
Body Data中用Groovy脚本构造JSON:
def requestBody = [:] requestBody.put("userName", vars.get("userName")) requestBody.put("password", vars.get("password")) def rememberVal = vars.get("remember") if (rememberVal != null && rememberVal != "") { requestBody.put("remember", Boolean.parseBoolean(rememberVal)) } new groovy.json.JsonBuilder(requestBody).toPrettyString()
- 将请求内容类型设为
application/json,选择Body Data并插入上述脚本。
2. Postman实现
- 添加
CSV数据源,在Run Collection时选择该文件,确保变量名与CSV列名匹配。 - 在登录请求的
Pre-request Script中构造请求体:
let requestBody = { userName: pm.variables.get("userName"), password: pm.variables.get("password") }; const remember = pm.variables.get("remember"); if (remember && remember !== "") { requestBody.remember = remember === "true"; } pm.request.body.raw = JSON.stringify(requestBody, null, 2);
三、设置专属断言
每轮迭代根据CSV中的预期值执行断言:
1. JMeter实现
- 用
JSR223 Assertion做灵活断言:
def response = new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString()) def expectedCode = vars.get("expectedCode") as Integer def expectedMsg = vars.get("expectedMsg") if (response.code != expectedCode) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("响应码不匹配,预期:${expectedCode},实际:${response.code}") } if (!response.msg.contains(expectedMsg)) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("响应信息不匹配,预期包含:${expectedMsg},实际:${response.msg}") }
- 也可直接用
Response Assertion,勾选Response Code和Text Response,分别填入${expectedCode}和${expectedMsg}。
2. Postman实现
在Tests标签中编写断言脚本:
const expectedCode = pm.variables.get("expectedCode"); const expectedMsg = pm.variables.get("expectedMsg"); const response = pm.response.json(); pm.test(`响应码匹配预期:${expectedCode}`, function () { pm.response.to.have.status(expectedCode); }); pm.test(`响应信息包含预期内容:${expectedMsg}`, function () { pm.expect(response.msg).to.include(expectedMsg); });
四、执行与验证
运行测试集合/线程组,工具会自动遍历CSV每行数据,动态生成对应请求体并执行专属断言,最后通过测试报告确认每轮迭代的结果是否符合预期。
内容的提问来源于stack exchange,提问作者Koushic
相关产品推荐
相关产品推荐

