postman接口測試系列:接口參數化和參數的傳遞

接着上一個章節時間戳和加密繼續,上一節中咱們使用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);

部分代碼參考 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"
}

經過這兩處不一樣的接口響應結果的取值,對於這種構造類型的響應結果的取值能夠輕鬆應對。之後若是在遇到其餘接口的響應結果取值,再慢慢積累吧......

相關文章
相關標籤/搜索