運用LoadRunner進行HTTP接口自動化測試

最近接到一個項目的性能測試任務,其中會涉及到HTTP接口,因此自己花了一點時間對該部分進行了詳細地瞭解。性能測試部分我有在其他文章中進行闡述,在此就不重複進行說明了,具體地址:http://blog.csdn.net/jiang1986829/article/details/47981189
LoadRunner是一個很強大的工具,它不僅能做性能測試,同時也能做功能測試,特別是針對於接口的功能測試,既然能做功能測試,那麼就需要想辦法實現其自動化,接下來我將自己整理的一個簡單的自動化測試框架進行描述。
測試框架總體流程如下:
這裏寫圖片描述

vuser_init代碼如下:

//定義結果文件變量
long file_stream;
//定義測試結果變量
char V_Result[1024];
vuser_init()
{
    //取得文件名種子-----系統時間
    lr_save_datetime("%Y%m%d%H%M%S",DATE_NOW,"now_date");
    //拼接測試結果文件名稱
    strcpy(V_Result,"f:\\test\\Result\\");
    strcat(V_Result,lr_eval_string("{IFaceName}"));
    strcat(V_Result,"_");
    strcat(V_Result,lr_eval_string("{now_date}"));
    strcat(V_Result,".html");
    //生成並打開測試結果文件
    if ((file_stream = fopen(V_Result, "w+")) == NULL) { 
        lr_error_message ("創建 %s 文件失敗", V_Result); 
        return -1; 
    }
    //寫入測試文件頭部html信息
    strcpy(V_Result,"<html><table  border='1'><tr><td>接口名稱</td><td>登錄名</td><td>預期值</td><td>實際值</td><td>結果</td></tr>");
    fputs(V_Result,file_stream);
    return 0;
}

Action代碼如下:

Action()
{
     //存儲測試結果狀態
    char V_testStatus[1024];
    //定義預期值與實際值的比較結果
    int result;
    //取得登錄名
    char *V_UserName=lr_eval_string("{UserName}");
    //獲取服務器還回的請求狀態state
    web_reg_save_param_ex(
        "ParamName=sucStatusParam",
        "LB=\"state\":",
        "RB=,",
        "NOTFOUND=warning",
        SEARCH_FILTERS,
        "Scope=Body",
        "IgnoreRedirections=Yes",
        "RequestUrl=*/MiddleWare/*",
        LAST);

    //發送請求
    web_custom_request("login",
        "URL=http://{IP}/MiddleWare/mem/login?",
        "Method=POST",
        "Resource=0",
        "RecContentType=application/json",
        "Referer=",
        "Mode=HTTP",
        //"EncType=application/json",
        "Body=params={\"param\":{\"userAccount\":\"{UserName}\",\"passWord\":\"e10adc3949ba59abbe56e057f20f883e\",\"device\":\"IOS\"},\"version\":\"v1.0\",\"loginLog\":\"2015-09-11 09:09:09\"}",
        LAST);

    //比較預期值和實際值是否相等
    result=strcmp(lr_eval_string("{YQJG}"),lr_eval_string("{sucStatusParam}"));
    if(result==0){
        strcpy(V_testStatus,"PASS");
    }else{
        strcpy(V_testStatus,"FAIL");
    }
    strcpy(V_Result,"<tr>");
    //寫入接口名稱
    strcat(V_Result,"<td id='interFaceName'>");
    strcat(V_Result,lr_eval_string("{IFaceName}"));
    strcat(V_Result,"</td>");

    //寫入測試參數
    strcat(V_Result,"<td id='uname'>");
    strcat(V_Result,V_UserName);
    strcat(V_Result,"</td>");

    //寫入預期結果
    strcat(V_Result,"<td id='expected'>");
    strcat(V_Result,lr_eval_string("{YQJG}"));
    strcat(V_Result,"</td>");

    //寫入實際結果
    strcat(V_Result,"<td id='reality'>");
    strcat(V_Result,lr_eval_string("{sucStatusParam}"));
    strcat(V_Result,"</td>");

    //寫入測試狀態
    strcat(V_Result,"<td id='status'>");
    strcat(V_Result,V_testStatus);
    strcat(V_Result,"</td></tr>");
    fputs(V_Result,file_stream);
    return 0;
}

vuser_end代碼如下:

vuser_end()
{
    //結束並關閉文件
    strcpy(V_Result,"</table></html>");
    fputs(V_Result,file_stream);
    if (fclose(file_stream)) 
        lr_error_message ("文件 %s 關閉出錯", V_Result); 
    return 0;
}

效果圖如下:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章