摘要:
本次jmeter接口測試實(shí)踐,其中涉及到數(shù)據(jù)參數(shù)化氮双、動態(tài)獲取參數(shù)值昭伸、使用第三方j(luò)ar導(dǎo)入編寫代碼進(jìn)行MD5加密、并發(fā)測試同步定時(shí)器离陶、測試計(jì)劃承上啟下的接口組裝等知識點(diǎn)的使用稼虎。
一、接口定義:
-
繳費(fèi)訂單生成接口
http://*******/portal/wallet/online/consume
請求方式: POST方法
Content-Type : application/json
-
免密支付接口
請求例子:
以上接口使用到的privateKey值由第三方的設(shè)備生成招刨,測試環(huán)境使用privateKey=##########
三霎俩、生成訂單接口與免密支付接口使用場景測試點(diǎn)分析(本次只實(shí)踐功能測試):
由于兩個接口中的入?yún)ⅲ际莵碇罰HP后端接口輸出沉眶,入?yún)⒋嬖诳鐢?shù)據(jù)庫服務(wù)器使用打却,
并且java接口內(nèi)部邏輯中還存在回調(diào)PHP端接口進(jìn)行參數(shù)一致性的校驗(yàn);
因此谎倔,不能隨便給個參數(shù)值進(jìn)行測試柳击,需要從接口業(yè)務(wù)使用場景上進(jìn)行分析與測試
1. 用戶與車牌未綁定
2. 正常繳費(fèi)訂單免密支付
3. 支付金額與訂單消費(fèi)金額不一致
4. 最高金額小于200
5. 余額不足校驗(yàn)
6. 訂單超時(shí)后,再進(jìn)行免密支付
7. 同用戶綁定多個車牌片习,并發(fā)繳費(fèi)
四腻暮、構(gòu)造測試數(shù)據(jù):
本次測試使用數(shù)據(jù)驅(qū)動的方法測試,測試數(shù)據(jù)保存在txt文件中毯侦,jmeter測試計(jì)劃參數(shù)化引用txt文件哭靖,讀取參數(shù)數(shù)據(jù)達(dá)到測試不同目的
- 數(shù)據(jù)構(gòu)造方法
-
PHP后端數(shù)據(jù)庫中,db.nonsecret_payment表增加測試數(shù)據(jù)侈离,創(chuàng)建某用戶進(jìn)行開通免密支付數(shù)據(jù)
-
在db.nonsecret_payment_permission表中增加測試數(shù)據(jù)试幽,創(chuàng)建某用戶綁定車牌號,一個用戶可以綁定多個
-
在db.payment_records表中增加某用戶某車牌號停車消費(fèi)金額
-
在錢包java 服務(wù)端數(shù)據(jù)庫中設(shè)置該用戶錢包余額db.user_wallet表中設(shè)置用戶余額
五起宽、jmeter構(gòu)建接口測試框架
-
參數(shù)化定義
訂單接口入?yún)?shù)據(jù)參數(shù)化定義保存于consume.txt文件:
goodsDetail //對應(yīng)訂單接口中的goodsDetail參數(shù)
memberId //對應(yīng)訂單接口中的memeberId參數(shù)
merOrderId //對應(yīng)訂單接口中的merOrderId參數(shù)
orderAmount //對應(yīng)訂單接口中的orderAmount參數(shù)
tranType //對應(yīng)訂單接口中的tranType參數(shù)
privateKey //對應(yīng)訂單接口中的privateKey參數(shù)
assert //斷言期望結(jié)果參數(shù)超時(shí)訂單免密支付入?yún)?shù)據(jù)參數(shù)化定義保存于orderId.txt文件:
orderId //對應(yīng)超時(shí)繳費(fèi)訂單ID
privateKey //加密用的第三方privateKey
assert //斷言期望結(jié)果參數(shù)模擬多個出口繳費(fèi)并發(fā)參數(shù)保存于concurrency.txt文件中:
參數(shù)定義同consume.txt -
用例數(shù)據(jù)
-
jmetr組裝接口業(yè)務(wù)用例流程步驟
數(shù)據(jù)參數(shù)化實(shí)現(xiàn)
用戶需要在微信端進(jìn)行登錄錢包后坯沪,才可以進(jìn)入生成繳費(fèi)訂單接口擒滑、免密支付接口執(zhí)行, 實(shí)現(xiàn)方法:使用jmeter直接調(diào)用錢包的登錄接口,post請求傳入個人微信號的openId與unionId
登錄接口: http://*******/portal/user/login
jmeter獲取token方法:
請求接口后库车,增加一個正則表達(dá)式提取器后置處理器
設(shè)置一個引用名稱token,提取token值柠衍,該token名稱會在別地方當(dāng)做變量天引用
在全局的header信息頭管理器中,引用token變量
根據(jù)接口定義芦岂,其中有一個sign參數(shù),需要進(jìn)行md5加密禽最,加密的參數(shù)需要用例入?yún)⑺袇?shù),而這些參數(shù)值都不是固定袱饭,由PHP后端調(diào)用傳入.因此, jmeter需要動態(tài)獲取入?yún)⑦M(jìn)行MD5加密川无,獲取動態(tài)sign值:-
找開發(fā)要MD5加密算法的類,創(chuàng)建一個java工程虑乖,編寫一個MakeMd5類懦趋,定義實(shí)現(xiàn)兩個加密方法
-
找開發(fā)要MD5加密算法的類,創(chuàng)建一個java工程虑乖,編寫一個MakeMd5類懦趋,定義實(shí)現(xiàn)兩個加密方法
- 導(dǎo)出以上類方法為jar包,把該jar放入apache-jmeter-3.0\lib\ext路徑中疹味,注意此時(shí)需要重啟jmeter仅叫,否則import該包是不成功的。
-
在訂單接口請求上一步驟添加一個BeanShell Sampler取樣器糙捺,導(dǎo)入MD5加密包诫咱,并根據(jù)方法中定義的參數(shù)順序,傳入?yún)?shù)值進(jìn)行MD5加密
我們使用正則表達(dá)式提取器獲取:
-
超時(shí)訂單支付例的編寫同以上的用例框架
同用戶多車輛在不同出口進(jìn)行并發(fā)免密支付用例組裝基本同以上框架,但是有一點(diǎn)必須得注意拾给,即是在哪個點(diǎn)上進(jìn)行并發(fā)祥得,本用例是在支付接口那里進(jìn)行并發(fā),因此在請求支付接口前鸣戴,需要加一個同步定時(shí)器配置等待多少個線程到達(dá)此處時(shí)啃沪,就可以同時(shí)進(jìn)行并發(fā)請求
六、執(zhí)行結(jié)果
整個測試計(jì)劃與執(zhí)行結(jié)果如下:
由結(jié)果看拯爽,用例根據(jù)數(shù)據(jù)毯炮,逐條執(zhí)行
各接口請求情況: