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

Wesley13
• 阅读 612

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这