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

效果图如下:
这里写图片描述

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