1. loadrunner + json說明
使用lr測試json接口,向服務端發送json格式請求,接收處理傳回響應資料。
主要用到函數:
1)web_custom_request
2)web_reg_save_param (此函數常使用者處理動态參數,該方法在LoadRunner中被稱為Correlation(關聯))
2. web_custom_request 參數說明
Int web_custom_request (const char *RequestName, <List of Attributes>,[EXTRARES, <List of Resource Attributes>,] LAST );
傳回值:
LR_PASS(0)代表成功
LR_FAIL(1)代表失敗。
參數:
1、RequestName:步驟的名稱,VuGen中樹形視圖中顯示的名稱。
2、List of Attribute:支援的屬性有以下幾種:
1)URL:
頁面位址。
2)Method :
頁面的送出方式,POST或GET。
3)EncType
:編碼類型。此參數給出一個内容類型(Content-Type),指定其做為回放腳本時“Content-Type”請求頭的值,例如“text/html”。
4)BodyFilePath
: 作為請求體傳送的檔案的路徑。
5)UserAgent:
使用者代理,它是一個HTTP頭的名字,用來辨別應用程式,通常是浏覽器,它呈現的是使用者和伺服器的互動。
6)Binary:
“Binary=1”表示頁面請求體中的每一個以file://x/##形式出現的值(在這裡“##”代表2個十六進制數字),都會被替換為單位元組的十六進制的值。
7)ContentEncoding:
指定請求體的使用指定的方式(gzip或者deflate)進行編碼(例如,壓縮),相應的“Content-Encoding:” HTTP頭會和此請求一起發送。這個參數适用于web_custom_request和web_submit_data。
8)FtpAscii:
“1”使用ASCII模式處理FTP操作;"0" 使用二進制模式。
9)TargetFrame:
目前連結或資源所在Frame的名稱。除了Frame的名字,還可以指定下面的參數:
_BLANK:打開一個空視窗。
_PARENT:把最新更改過的的Frame替換為它的上級。
_SELF:替換最新更改過的的Frame。
_TOP:替換整個頁面。
10)RecContentType:
錄制腳本時響應頭的内容類型。例如text/html、 application/x-
JavaScript
等。當沒有設定Resource屬性時,用它來确定目标URL是否是可記錄的資源。此屬性包含主要的和次要的資源。最頻繁使用的類型是 text、application、image。次要的類型根據資源不同變化很多。例如:"RecContentType=text/html":表示html文本。"RecContentType=application/msword":表示目前使用的是Msword。
11)Referer:
目前頁面關聯的頁面。如果已經顯式指定了url的位址,此項可以省略。
12)Resource:
訓示URL是否屬于資源。1 是;0 不是。設定了這個參數後,RecContentType參數被忽略。
13)ResourceByteLimit:
web頁面下載下傳資源的極限大小。
14)Snapshot:
快照的檔案名。
15)Mode:
兩種錄制級别HTML、HTTP。HTML級别--在目前Web界面上錄制直覺的HTML動作。以一步步的web_url、web_link、web_image、web_submit_form來錄制這些動作。
16)ExtraResBaseDir:
根URL,放在EXTRARES組裡。
17)Body: 請求體。不同的應用中,請求體分别通過Body、BodyBinary或者BodyUnicode參數來傳遞。請求體可以隻使用其中一個參數,也可以使用一連串的分開的參數組成多請求體。注意:如果請求體大于100K,會使用一個變量來代替Body參數。變量是在 lrw_custom_body.h中定義的。
18)Raw Body: 請求體是作為指針傳遞的,此指針指向一串資料。
3、EXTRARES:表明下面的參數将會是List Of Resource Attributes了。
4、LAST :結尾的标示符。
5、List of Resource Attributes
僅僅當Recording Options--Recording --HTML-based script-- Record within the current script step選項被選中時,List of Resource Attributes才會被插入到代碼中。Web頁面中的非HTML機制産生了資源清單,包含了Javascript, ActiveX, Java applets and Flash所請求的資源。VuGen's 的Recording 選項中,可以設定把這些資源錄制在目前的操作中(預設是此設定)還是作為單獨的步驟來錄制。
3. 具體執行個體如下(包含發送json,擷取響應資料,設定關聯、設定檢查點):
/*
定義事務:
1)使用者注冊
2)使用者登入
3)使用者簽到
接口為:application/json
思路:
1)app注冊,獲到mobile
2)使用擷取到的mobile登入,擷取tokenid和userid。
參數化:手機号碼、裝置号
*/
Action()
{
//定義接口url
char *Interface_Url;
lr_save_string("http://192.168.0.1:8080/action.a","Interface_Url");
//注冊事務開始
lr_start_transaction("使用者注冊");
lr_rendezvous("register");
//檢查使用者是否注冊成功
web_reg_find("Search=Body",
"Text=createTime",
"SaveCount=createTime",
LAST);
//web_set_max_html_param_len("10000000");
//擷取使用者注冊後響應資料,并傳給mobile
web_reg_save_param("mobile",
"LB=\"mobile\":\"", //設定左邊界
"RB=\",", //設定右邊界
"Ord=1",
"Notfound=empty",
"Search=Body",
LAST);
web_custom_request("register",
"Url={Interface_Url}", //設定url
"Method=POST", //設定方法,post或get
"Mode=HTTP",
"EncType=application/json", //編碼類型
"RecContentType=application/json",
"Body={\"c\":\"1001\",\"p\":{\"code\":\"9051\",\"mobile\":\"{phone}\",\"pwd\":\"123456\",\"model\":\"{model}\",}}", //請求主體,json格式,分号前需要加斜杠
LAST);
lr_vuser_status_message("注冊事務,虛拟使用者數 #%s",lr_eval_string("{phone}"));
lr_end_transaction("使用者注冊",LR_AUTO);
//登入事務開始
lr_start_transaction("使用者登入");
lr_rendezvous("login");
web_reg_find("Search=Body",
"Text=lastLoginTime",
"SaveCount=lastLoginTime",
LAST);
//擷取使用者登入後響應資料tokenId,并傳給pdl_dynamic_tokenId
web_reg_save_param("pdl_dynamic_tokenId",
"LB=\"tokenId\":\"",
"RB=\"",
"Ord=1",
"Notfound=empty",
"Search=Body",
LAST);
//從使用者登入響應資料中,擷取pdl_user_id
web_reg_save_param("pdl_user_id",
"NotFound=warning",
"LB=\"id\":",
"RB=,\"inviteCode",
"Ord=1",
"Search=Body",
LAST);
web_custom_request("login",
"Url={Interface_Url}",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={\"c\":\"1002\",\"p\":{\"mobile\":\"{pdl_mobile}\",\"pwd\":\"123456\"}}",
LAST);
lr_end_transaction("使用者登入",LR_AUTO);
//使用者簽到
lr_start_transaction("使用者簽到");
lr_rendezvous("Sign_in");
web_reg_find("Search=Body",
"Text=signDate",
"SaveCount=signDate",
LAST);
web_custom_request("pdl_Sign_in",
"Url={Interface_Url}",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={\"c\":\"1014\",\"p\":{\"userId\":\"{pdl_user_id}\",\"tokenId\":\"{pdl_dynamic_tokenId}\"}}",
LAST);
lr_end_transaction("使用者簽到",LR_AUTO);
return 0;
}