Loadrunner和Jmeter移動端錄製指令碼以及token的處理
***Loadrunner 錄製移動客戶端指令碼***
1.首先保證移動端和電腦在同一個網段。檢視電腦Ip, 用這個ip設定手機代理和埠。
2.開啟Loadrunner(我用的版本是12.53),建立一個新的指令碼,選擇Mobile>Web-HTTP/HTML。
3.選擇錄製按鈕,在Start Recording頁面選擇Remote Application via LoadRunner Proxy, 埠號8899. 點選Start Recording.
4.然後開始操作移動端。
5.錄製結束後發現關鍵的訂單提交請求沒有錄製成功。(更奇葩的是公司的幾臺電腦只發現一臺能錄製成功,對loadrunner移動端錄製功能也是醉了!!!)
偶然看到給視訊是關於Jmeter錄製移動端指令碼,於是乎改用jmeter錄製,沒想到jmeter不但不挑電腦,錄製的請求還非常完整。Very good!!!下面說一下如何用jmeter錄製指令碼。
***Jmeter 錄製移動客戶端指令碼***
1.新建一個jmeter指令碼,在測試計劃下新增一個執行緒組,然後在工作臺選擇新增>非測試原件>HTTP代理伺服器。
2.開始配置代理和埠,在目標控制器選擇測試計劃>執行緒組。RequestsFiltering還有過濾功能,因為我們這個指令碼請求比較少,沒有用到,如果interesting大家可以百度自行查詢。
3.點選啟動。然後開始錄製指令碼。下面是我錄製的指令碼。
4.然後按照Loadrunner的格式把其餘幾個loadrunner沒有錄上的請求補充上,這樣一個錄製的完整指令碼就基本get到了。下面是補充的幾個post請求的指令碼。
5.問題來了,過了一會回放發現數據庫沒有入庫成功!!!大腦數百萬的神經元細胞緊張
運轉了24小時,發現是token惹的貨。。。token失效了。。。於是乎發現每次替換伺服器返回token值,可以繞開這個問題,不過這並非長久之計。於是考慮關聯。但是這個返回的資料太奇葩了,json還帶轉義字元,loadrunner返回的結果就更奇葩了,還帶兩個轉義字元。如下分別是loadrunner和jmeter入的返回值。
師傅大腦數百萬的神經元細胞緊張運轉了48小時終於搞定了loadrunner的關聯問題(這坑足夠深,一般人估計出不來,哈哈)。雙引號前面狂加\\,終於可以搞定了!!!下面是關聯部分的程式碼:
web_reg_save_param_ex(
“ParamName=sessionid”,
“LB/BIN=token\\\”:\\\”“,
“RB/BIN=\\\”“,
“NotFound=warning”,
SEARCH_FILTERS,
“Scope=Body”,
LAST);
把指令碼所有的token值都替換成{sessionid},執行指令碼,可以成功入庫了。
然後就是引數化,壓測,這些將在以後的文章中介紹,這些雖然不難,但是引數的設定還有很多小竅門,對師傅每次都心算搞定幾百萬的大資料的引數化設定問題,深表膜拜!!!
下面說一下用 Jmeter處理關聯token的問題:
雖然看過一下jmeter處理token的問題,但是遇到實際問題的時候還是一臉懵逼!!!這個指令碼每個請求都有一個http資訊頭管理器。Token就是通過http資訊頭管理器傳遞的。下面是jmeter的原始指令碼(禁用的除外):
經過分析發現後面的http請求都是用登陸請求返回的token值。於是乎,新建一個正則表示式,並且新增debug sampler。因為jmeter返回的token的json值帶有轉義字元,需要加轉義,於是乎,在每個雙引號前加了轉義字元,還要特別注意的是檢查的相應欄位一定要選擇主體,選擇響應資訊,響應程式碼都沒有取到token.
執行指令碼,發現debug sampler 返回了三個token值,我們取token_g1. 於是乎把下面所有請求的http資訊頭管理器的token值都用{token_g1}替換。
執行指令碼,查詢替班車間成功~再也不是那個讓我心碎無數次的響應超時了,token值成功傳遞,哦也~
最後可以選擇一個報文頭最全的Http資訊頭管理器,放在指令碼最上面。指令碼所有請求都公用這個Http資訊頭管理器。