wordpress限制ip訪問次數(shù)網(wǎng)站seo報(bào)價(jià)
一、前言
由于系統(tǒng)業(yè)務(wù)流程很復(fù)雜,在不同的階段需要不同的數(shù)據(jù),且數(shù)據(jù)無法重復(fù)使用,每次造新的數(shù)據(jù)特別繁瑣,故想著能不能使用jmeter一鍵造數(shù)據(jù)
二、創(chuàng)建錄制模板
可參考:jmeter錄制接口
首先創(chuàng)建一個(gè)錄制模板
因?yàn)闀?huì)有各種請求頭,cookies,簽名,認(rèn)證信息等原因,導(dǎo)致手動(dòng)復(fù)制粘貼的的全面導(dǎo)致接口調(diào)用失敗,當(dāng)然如果你對系統(tǒng)特別熟悉,可以忽略這個(gè)步驟
錄制后可以復(fù)制請求到線程組中,這樣就可以直接復(fù)制
三、 新增線程組
修改線程組名稱
2.1給線程組添加用戶定義變量
定義多個(gè)用戶定義變量,給不同的模塊使用
2.2新增查看結(jié)果樹
2.3新增測試片段
上圖測試片段,按照不同的模塊創(chuàng)建不同的片段,因?yàn)閳?zhí)行的時(shí)候,我們只需要把數(shù)據(jù)流轉(zhuǎn)到某個(gè)階段就行了, 創(chuàng)建測試片段,可以對不同模塊的接口統(tǒng)一管理,不需要禁用這個(gè)測試片段就行了
四、新增http請求
在測試片段下新增http請求
五、對http請求的處理
對http請求會(huì)遇到以下這些問題
- 登入
- 添加請求頭,認(rèn)證信息,簽名,隨機(jī)數(shù)等
- 請求參數(shù)加密
- 響應(yīng)結(jié)果解析并應(yīng)用到下一次請求
- 請求的執(zhí)行順序
- 響應(yīng)斷言
5.1登入
登入http請求
添加前置處理器JSR223 PreProcessor
用于獲取時(shí)間戳,隨機(jī)數(shù),生成簽名
下面含有md5加密,可參考Jmeter使用js對入?yún)⑹褂肕D5加密
load("md5.js")
// 時(shí)間戳
var timestamp = new Date().getTime();
// 隨機(jī)數(shù)
var nonce = Math.round(Math.random() * 100000);
// 生成簽名
var signature = hex_md5(timestamp + "=" + nonce + "function");
vars.put("timestamp", timestamp);
vars.put("nonce", nonce);
vars.put("signature", signature);
添加http請求頭
添加JSON提取器獲取登入后的token信息
解析返回參數(shù),可參考Jmeter對請求結(jié)果進(jìn)行解析
通過下面的json提取器可以獲取到登入后返回的token,這個(gè)token是一個(gè)變量,可以用于下一次請求
在查詢接口的請求頭中使用token
5.2請求參數(shù)加密
可參考Jmeter使用js對入?yún)⑹褂肕D5加密
5.3響應(yīng)結(jié)果解析并應(yīng)用到下一次請求
可參考:Jmeter對請求結(jié)果進(jìn)行解析
5.4請求的執(zhí)行順序
如何保證請求的執(zhí)行順序呢?
http請求是可以拖動(dòng)移動(dòng)順序的,展示的順序,就是執(zhí)行的先后順序,建議命名的時(shí)候加上需要,這樣在多個(gè)接口同事執(zhí)行的時(shí)候能夠快速的定位到時(shí)哪一個(gè)接口
5.5響應(yīng)斷言
六、整理流程展示
七、特殊場景處理
場景1:附件上傳
參考:jmeter附件上傳
場景2:當(dāng)前接口需要需要上一個(gè)接口的返回值
第一個(gè)接口,當(dāng)創(chuàng)建一個(gè)項(xiàng)目后,返回一個(gè)項(xiàng)目id
第二個(gè)接口,需要獲取項(xiàng)目id作為入?yún)⑷ヌ峤豁?xiàng)目
創(chuàng)建接口
創(chuàng)建入?yún)?br />
JSR233 獲取請求頭信息
設(shè)置請求頭
JSON提取器,獲取創(chuàng)建成功的項(xiàng)目id
延遲3s,保證接口調(diào)用的先后順序
提交接口
場景3:從form表單提取參數(shù),作為下一個(gè)接口的入?yún)?/h4>
前一個(gè)接口的JSR223 后置處理器
// 獲取響應(yīng)數(shù)據(jù)
var response = prev.getResponseDataAsString();
// 解析 JSON 數(shù)據(jù)
var data = JSON.parse(response);
// 獲取變量(這是個(gè)對象,不是一個(gè)字符串)
var designPeoples = data.data.designPeoples;
// 項(xiàng)目名稱
var itemName = data.data.item.name;
var itemId = data.data.item.id;
// 使用 for 循環(huán)遍歷數(shù)組并修改每個(gè)元素
for (var i = 0; i < designPeoples.length; i++) {designPeoples[i].linkusername = "諸葛亮";designPeoples[i].linkway = "13888888888";
}
vars.put("itemId", itemId);
vars.put("itemName", itemName);
// 應(yīng)為是一個(gè)對象,使用JSON.stringify把對象轉(zhuǎn)化為字符串,在使用的時(shí)候應(yīng)該為 ${designPeoples} 而不是 '${designPeoples}' 不需要引號(hào)
vars.put("designPeoples", JSON.stringify(designPeoples));
后一個(gè)接口的入?yún)?/p>
{"item": {"id": "${itemId}","mainid": "${mainId}","name": "${itemName}","type": "項(xiàng)目"},"designPeoples": ${designPeoples}
}