記錄2018年初,和平台組開發同事開展執行的一次性能測試計划過程。
准備階段
1.公共區域
圖一:配置頭信息
圖二:銀行項目每筆交易都需要唯一的交易流水,通過"${ }"可以引用函數、變量或計數器
圖三:每個接口的請求內容均由Comm_req、Sys、Input三部分組成,Input區屬於業務區,Comm_req區除了交易流水其他字段基本固定,將Comm_req作為變量方便后續調用
圖四:http請求默認值設置,eval()函數引用包含變量的變量
圖五:響應文本斷言,交易成功的標志是"status":"S"和"erorcd":"0000"
圖六:將請求報文區的三部分Comm_req、Sys、Input拼接成變量request,eval()調用
2.業務區域
圖一:以開客戶號交易舉例,添加線程組,設置為單線程
圖二:錄入請求報文的input區內容,存在兩個需要參數化的變量contact_content1和contact_content2得從外部引用
圖三:定義變量contact_content1
圖四:定義變量contact_content2
圖五:給交易的線程組添加http請求,jmeter自動讀取公共區域http請求默認值,每個線程組下必須有請求
圖六:提取響應結果賦值給變量cust_no,方便后續交易使用
圖七:確認響應結果提取成功
3.驗證請求結果
圖一:請求參數中需要參數化的字段,通過函數、變量或計數器均已正常生成
圖二:響應結果包含請求成功的交易碼和標識
改進:使用Test Fragment模塊化腳本構建
執行測試
略
總結
1.點擊jmeter啟動按鈕,請求發不出去,查詢結果樹沒有響應
原因:服務沒有注冊或啟動,測試過程中存在清庫等等,服務有時沒有啟動
2.4400交易需要已激活的卡號,得在數據庫改狀態,可以通過jmeter發送jdbc請求,jdbc連接配置中的變量名與jdbc請求中的變量名一致
注:配置過程中尾部一定不要留空格,否則可能報錯:Cannot create PoolableConnectionFactory (Access denied for user 'root '@'localhost
3.用計數器生成003301開頭的20位卡號,若使用starting value 為1,number format為00330100000000000000,卡號的頭兩位0會省略掉
解決辦法:starting value為00330100000000000001,number format為00000000000000000000
4.混合壓測中,可能會因為get("prcscd")而隨機取交易碼,這樣會導致不能按要求實現混合並發
解決辦法:將BeanShell PreProcessor添加到每個線程組中並取得具體的交易碼,String prcscd = vars.get("prcscd交易碼")
5.監控插件使用
參看:http://www.cnblogs.com/Ryana/p/8377356.html
6.慢SQL查詢
通過xshell登陸mysql所在的服務器
開啟慢查詢:set global log_slow_queries = on
查詢/設置慢查詢參數(查詢時間單位:sec):show global variables like 'long_query_time'; set global long_query_time =1;
查詢慢查詢存放日志:show variables like 'slow_query_log_file';
eg:4400交易慢查詢查找
閥值(ms) |
執行時間(ms) |
位置(sql) |
10 |
35 |
TabDpBusiMain.dpa_account.Entity.selectByIndex_odb1 |
10 |
34 |
TabDpBusiMain.dpa_card.Entity.selectByIndex_odb1 |
10 |
39 |
DpAcctQuery.selSubAcctRelateRecord |
10 |
42 |
TabDpInterest.dpa_interest_rate.Entity.selectByIndex_odb1 |
10 |
28 |
DpFroze.selWholeBalFrozeSource |
10 |
36 |
TabDpProtocol.dpb_withdrawl_protect.Entity.selectByIndex_odb4 |
10 |
39 |
DpAcctQuery.selSubAcctRelateRecord |
結果定位
1). DpAcctQuery.selSubAcctRelateRecord [命名sql join on 聯表查詢]
更多分析:http://blog.jobbole.com/107256/
7.GC指標及調優:
相關知識學習:JVM-GC原理、JVM-GC收集器、監控GC、診斷GC
Minor GC執行迅速(50毫秒以內)
Minor GC執行不頻繁(間隔10秒左右一次)
Full GC執行迅速(1秒以內)
Full GC執行不頻繁(間隔10分鍾左右一次)
【NewRatio=2】老年:新生=2:1
【SuvivorRatio=6】Eden:Survivor=6:1
注:括號內容並非不可變,需要考慮具體的服務
打開appCtrl文件查看CMS收集器參數,開發同事提醒這些參數得小心點改,不然沒什么效果,小白弱弱的表示不會改。。。