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

孟佳

关注

阅读 206

2022-06-16

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



精彩评论(0)

0 0 举报