Loadrunner测试json接口实例以及 web_custom_request 函数详解

原创
2017/04/22 17:35
阅读数 4.2K

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;
}
整合链接:
http://www.cnblogs.com/smstars/p/5098663.html
http://blog.csdn.net/dongmu1986/article/details/24380941

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部