接着上一个章节时间戳和加密继续,上一节中咱们使用Pre-Request Script能够正确获取时间戳和加密后的数据,接口响应结果也达到了预期目标。这里先简单说明一下接口的用例设计的测试点,截图所示html
那么接下来就是建立会话的接口用例(实际上接口用例的设计和通常模块的功能测试的用例原理是同样的),这里简单截图说明一下,如图json
这样建立会话认证的接口已经测试完成!session
接下来就进入第二个接口-使用者信息录入。这个接口参数中须要用到第一个接口中的返回值result做为此接口的入参session,这里该如何操做呢?
实际上咱们在第一个接口:建立会话中已经作了操做了,这里再详细解释一下,代码以下dom
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; }
针对建立会话的接口响应结果代码以下post
{ "result": "******45****", "code": "0" }
在上面的代码中,咱们能够看到这样的描写测试
//获取响应结果result,做为下一个接口的入参 var jsonData = JSON.parse(responseBody); postman.setGlobalVariable("sessionId",jsonData.result);
这样咱们就获得了第二个接口的入参sessionID的参数值信息,那么接下来就是使用md5加密进行接口用例编写喽。
咱们先看一下接口文档描述,如图所示加密
根据接口文档描述,postman中接口信息,如图所示设计
这里根据接口描述,添加用户的身份证号码和手机号是惟一的,若是咱们运行一次用例修改一次身份证号码和手机号岂不是很麻烦,这样也不利于后期的接口自动化操做。若是每次运行该接口用例的时候,录入的身份证号码和手机号都是变化的参数就能够实现后期的接口自动化操做了,那么该如何实现呢?code
让请求参数有点变化htm
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);
而后在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" }
经过这两处不一样的接口响应结果的取值,对于这种构造类型的响应结果的取值能够轻松应对。之后若是在遇到其余接口的响应结果取值,再慢慢积累吧......