這兩天給公司一個新項目做上線前的壓力測試,這個項目主要的接口有兩個,獲取訂單號(getOrderId)和確認訂單(confirm),需要重點壓測。開始,我們選擇用python寫測試例,python的好處是開發迅速,但是併發能力不夠;我就想試試用tsung,tsung是用erlang寫的,併發肯定沒問題,但我以前只用來測試過靜態網站,沒有測試過動態API,查了查文檔,發現tsung是支持用erlang腳本生成動態參數的,於是我決定用tsung。
tsung的安裝略過,看一下getorderId的配置:
<request subst="true">
<dyn_variable name="order_id" jsonpath="data.order_id"/>
<http url="/v5/order/getOrderId/" method="POST" version="1.1" contents="token=%%anysdk:get_token%%json_data=and"/>
</request>
說明:
subst = "true" 表示啓用動態參數,兩個%%中間的內容即是參數所調用的erlang腳本,格式爲module:fun,module爲模塊名,fun爲函數名。
對應的erlang代碼:
-module(anysdk).
-export([get_token/1]).
get_token({Pid, DynData}) ->
{ MegaSec, Second, MicroSec } = erlang:now(),
TimeStamp = MegaSec * 1000000 + Second + MicroSec/1000000,
T2 = trunc(TimeStamp),
StrTime = integer_to_list(T2),
base64:encode_to_string(StrTime).
說明:
Pid爲當前用戶的進程號,貌似沒啥用處,DynData是動態參數列表,用來從tsung傳遞參數,get_token不需要參數,所以也沒用。
<dyn_variable name="order_id" jsonpath="data.order_id"/>
這句話是用來捕獲服務端返回值的,getOrderId返回一個json串,這個指令通過jsonpath捕獲到相應的對象並存到動態變量order_id中,供後續操作使用。