postman接口测试系列:接口参数化和参数的传递

https://www.cnblogs.com/LOVEYU/p/7929471.html

接着上一个章节时间戳和加密继续,上一节中我们使用Pre-Request Script可以正确获取时间戳和加密后的数据,接口响应结果也达到了预期目标。这里先简单说明一下接口的用例设计的测试点,截图所示

接口的测试点

那么接下来就是创建会话的接口用例(实际上接口用例的设计和一般模块的功能测试的用例原理是一样的),这里简单截图说明一下,如图

这样创建会话认证的接口已经测试完成!

接下来就进入第二个接口-使用者信息录入。这个接口参数中需要用到第一个接口中的返回值result作为此接口的入参session,这里该如何操作呢?
实际上我们在第一个接口:创建会话中已经做了操作了,这里再详细解释一下,代码如下

if(responseCode.code === 200){
// 判断是否存在 'success' 值  
tests["Body matches code"] = responseBody.has("0");
//获取响应结果result,作为下一个接口的入参
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("sessionId",jsonData.result);
tests[`[INFO] Request params: ${JSON.stringify(request.data)}`] = true;
// tests["have result "]=jsonData.hasOwnProperty("error")!==true;
tests["have result "]=jsonData.hasOwnProperty("result")===true;
tests[`[INFO] Response timeout: ${responseTime}`] = responseTime < 6000;
}else{
//接口请求失败
tests["Waring:Request Failed. Please Fix!"] = false;
}

针对创建会话的接口响应结果代码如下

{
"result": "******45****",
"code": "0"
}

在上面的代码中,我们可以看到这样的描写

//获取响应结果result,作为下一个接口的入参
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("sessionId",jsonData.result);

这样我们就得到了第二个接口的入参sessionID的参数值信息,那么接下来就是使用md5加密进行接口用例编写喽。
我们先看一下接口文档描述,如图所示


根据接口文档描述,postman中接口信息,如图所示


这里根据接口描述,添加用户的身份证号码和手机号是唯一的,如果我们运行一次用例修改一次身份证号码和手机号岂不是很麻烦,这样也不利于后期的接口自动化操作。如果每次运行该接口用例的时候,录入的身份证号码和手机号都是变化的参数就可以实现后期的接口自动化操作了,那么该如何实现呢?

随机

让请求参数有点变化

postman中可以使用randomInt达到每次运行的参数都是变化的,

/**使用者变量信息 -重用的随机构造  */

const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;  // 随机整数
const getRandomValue = list => list[randomInt(0, list.length - 1)];  // 随机选项

接下来就是实现用户姓名、昵称、身份证号码和手机号以及输入性别的随机输入操作,代码如下

/**使用者变量信息   */

const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;  // 随机整数
const getRandomValue = list => list[randomInt(0, list.length - 1)];  // 随机选项
//随机生成一个字符串作为用户名 
postman.setGlobalVariable("compellation", ("0000" + 
(Math.random()*Math.pow(36,7) << 0).toString(36)).slice(-7));

//用户昵称,随机2-6字姓名
const charsInName = ['赵', '钱', '孙', '李', '王', '张'];
const numOfChars = randomInt(2, 6);
let randomName = '';
for (let i = 0; i < numOfChars; i++) {
let index = randomInt(0, 5);
randomName += charsInName[index];
}
//environment.nickname = randomName;
postman.setGlobalVariable("nickname",randomName);

/**
//随机生成一个字符串作为昵称 
postman.setEnvironmentVariable("nickname", ("0000" + 
(Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
    */
//用户性别
const divisions = ['O', 'M', 'F'];
//为什么使用environment无法设置变量? 原因environment是引用环境变量的操作
//environment.sex = getRandomValue(divisions);
postman.setGlobalVariable("sex",getRandomValue(divisions));
//postman.setEnvironmentVariable("sex","O");
//用户身份证号码
//postman.setEnvironmentVariable("card","500106200412055816");
postman.setGlobalVariable("card",`50010620001208${randomInt(1000, 9999)}`);
// 随机生日(时间戳)
// 假设今天是2017-1-1,距1970-1-1 47年,则生日范围为 1923-1-1 ~ 2017-1-1
//environment.birthday = randomInt(0 - Date.now(), Date.now());
//postman.setEnvironmentVariable("birthday",Date.now());
/**
//获取系统当前时间,并组装成固定格式时间戳
var d = new Date();
//将日期组装成2位
var timeDate = d.getDate().toString();
if(timeDate.length == 1){
timeDate = "0" + timeDate;
}
//组装整个时间戳
var timesDate = d.getFullYear() + "-"+(d.getMonth()+1).toString() +"-"+ timeDate; 
postman.setEnvironmentVariable("birthday", timesDate);
    */
postman.setGlobalVariable("birthday", '2000-12-08');
//身高
//environment.height = '${randomInt(120, 221)}';
//environment.height = randomInt(120, 221);
postman.setGlobalVariable("height",randomInt(120, 221));
//体重
//environment.weight = '${randomInt(40, 150)}';
//environment.height = randomInt(40, 150);
postman.setGlobalVariable("weight",randomInt(40, 150));
//remark
//随机生成一个字符串作为remark 
postman.setGlobalVariable("remark", ("test" + 
(Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
// 随机手机
//environment.phone = `18${randomInt(100000000, 999999999)}`;
postman.setGlobalVariable("phone",`18${randomInt(100000000, 999999999)}`);

这样就实现了接口的参数化,那么录入用户的接口Pre-Request Script代码如下

//获取全局变量值
sessionId = postman.getGlobalVariable("sessionId");
customerCode = postman.getGlobalVariable("customerCode");
timestamp = postman.getGlobalVariable('timestamp');
ytoken = postman.getGlobalVariable("ytoken");
unicode = postman.getGlobalVariable("unicode");
var pytokenstr = sessionId + customerCode+unicode+timestamp+ytoken;

//postman.setEnvironmentVariable("str",str);
//environment.str = str;
postman.setGlobalVariable("pytokenstr",pytokenstr);
//var md5 = CryptoJS.MD5(str).toString().toLowerCase();
//使用md5加密得到ptoken
//var strmd5 = CryptoJS.MD5(str).toString();
var ptoken = CryptoJS.MD5(pytokenstr);
//environment.strmd5 = strmd5;
postman.setGlobalVariable('ptoken',ptoken);

/**使用者变量信息   */

const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;  // 随机整数
const getRandomValue = list => list[randomInt(0, list.length - 1)];  // 随机选项
//随机生成一个字符串作为用户名 
postman.setGlobalVariable("compellation", ("0000" + 
(Math.random()*Math.pow(36,7) << 0).toString(36)).slice(-7));

//用户昵称,随机2-6字姓名
const charsInName = ['赵', '钱', '孙', '李', '王', '张'];
const numOfChars = randomInt(2, 6);
let randomName = '';
for (let i = 0; i < numOfChars; i++) {
let index = randomInt(0, 5);
randomName += charsInName[index];
}
//environment.nickname = randomName;
postman.setGlobalVariable("nickname",randomName);

/**
//随机生成一个字符串作为昵称 
postman.setEnvironmentVariable("nickname", ("0000" + 
(Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
    */
//用户性别
const divisions = ['O', 'M', 'F'];
//为什么使用environment无法设置变量? 原因environment是引用环境变量的操作
//environment.sex = getRandomValue(divisions);
postman.setGlobalVariable("sex",getRandomValue(divisions));
//postman.setEnvironmentVariable("sex","O");
//用户身份证号码
//postman.setEnvironmentVariable("card","500106200412055816");
postman.setGlobalVariable("card",`50010620001208${randomInt(1000, 9999)}`);
// 随机生日(时间戳)
// 假设今天是2017-1-1,距1970-1-1 47年,则生日范围为 1923-1-1 ~ 2017-1-1
//environment.birthday = randomInt(0 - Date.now(), Date.now());
//postman.setEnvironmentVariable("birthday",Date.now());
/**
//获取系统当前时间,并组装成固定格式时间戳
var d = new Date();
//将日期组装成2位
var timeDate = d.getDate().toString();
if(timeDate.length == 1){
timeDate = "0" + timeDate;
}
//组装整个时间戳
var timesDate = d.getFullYear() + "-"+(d.getMonth()+1).toString() +"-"+ timeDate; 
postman.setEnvironmentVariable("birthday", timesDate);
    */
postman.setGlobalVariable("birthday", '2000-12-08');
//身高
//environment.height = '${randomInt(120, 221)}';
//environment.height = randomInt(120, 221);
postman.setGlobalVariable("height",randomInt(120, 221));
//体重
//environment.weight = '${randomInt(40, 150)}';
//environment.height = randomInt(40, 150);
postman.setGlobalVariable("weight",randomInt(40, 150));
//remark
//随机生成一个字符串作为remark 
postman.setGlobalVariable("remark", ("test" + 
(Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
// 随机手机
//environment.phone = `18${randomInt(100000000, 999999999)}`;
postman.setGlobalVariable("phone",`18${randomInt(100000000, 999999999)}`);
console.log(pytokenstr);

部分代码参考 https://testerhome.com/topics/6641

然后在potman中body中设置如图所示

之后在Tests中增加断言信息,代码如下

// 推荐用全等 ===,确保类型和值都一致
//tests['Status code is 200'] = responseCode.code === 200); 
// 判断是否存在 'success' 值  
if(responseCode.code===200 & responseBody !== null & responseBody.has("code") ){
tests["Body matches code"] = responseBody.has("0");

var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("userId",jsonData.result.user_id);

tests[`[INFO] Request params: ${JSON.stringify(request.data)}`] = true;
//可以考虑判断user_id,后续升级考虑
tests["have result "]=jsonData.hasOwnProperty("result")===true;
tests[`[INFO] Response timeout: ${responseTime}`] = responseTime < 6000;

}
else{
//接口请求失败
tests["Waring:Request Failed. Please Fix!"] = false;
}

在上面这段代码中,使用var jsonData = JSON.parse(responseBody); postman.setGlobalVariable("userId",jsonData.result.user_id);再次获取了该接口的响应结果中的user_id的值作为下一个接口的参数,而该接口的响应结果代码如图

{
"result": {
    "birthday": "2000-12-08",
    "phone": "18271263485",
    "sex": "O",
    "register_time": "2017-11-30 10:49:43",
    "weight": "109",
    "height": "184",
    "remark": "fdn1",
    "organization_id": "1149",
    "compellation": "-pm6eil",
    "card": "500106200012081705",
    "user_id": 1638
},
"code": "0"
}

通过这两处不同的接口响应结果的取值,对于这种构造类型的响应结果的取值可以轻松应对。以后如果在遇到其他接口的响应结果取值,再慢慢积累吧......

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、PostMan接口参数化操作步骤; 2、环境变量设置步骤; 3、A接口返回值例如token赋值给B接口请求参数操作步骤; 图文并茂 1 接口参数化 第一步:点击右上角图标,打开环境配置页面,选择Globals,设置全局变量; 第二步:添加变量名称,设置对应的变量值,保存; 第三步:接口地址或者需要取值的参数value设置;注意需要取值的设置为{{变量名}},双大括号,即可取全局变量设置的值。 TIPS: 如果需要批量修改接口参数等,可导出后编辑,批量替换,再导入即可,注意需要修改接口地址以及下方的参数取值。 2 接口返回值存入环境变量 第一步:查看接口返回值; { "data": { "leaguerId": "161", "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNjEiLCJjcmVhdGVkIjoxNTI5NTcyNTkzMTI5LCJleHAiOjE1Mjk1Nzk3OTN9.U6qmR-Qa9sJpwxShLOC8WLPBlhLxWWiQTv5bZtyOV0mdyCSHnFBb_p6T5PBY20m_0m2AmrQZGfrv6hvHCPAaow" }, "status": 200 } 第二步:在接口的TESTS页签中输入以下内容(视返回值情况修改): pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); // 把responseBody转为json字符串 var Jsondata = JSON.parse(responseBody); // 设置环境变量access-token,供后面的接口引用 pm.environment.set("access-token ", Jsondata.data.token ); 第三步:重新发送上一个接口参数信息测试,执行后查看环境变量;如图,则表示环境变量的值已经正常存储; 3 参数化取其他接口的返回值 第一步:修改需要引用上述token值的接口参数取值,参数值value设置为{{access-token}}({{变量名}}),测试接口,正确返回即可;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值