天天看點

Loadrunner測試json接口執行個體以及 web_custom_request 函數詳解

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;
}