LR脚本增强 - 关联
前言
举个例子,使用LR录制网上下单,在下单之前要选择商品,然后加购物车,下单。
思考: 每次请求商品列表,商品ID可能会发生变化,如何模拟真实用户,每次随机选择一个商品进行下单测试?这个时候就可以用关联。
什么是关联?
关联是将服务器返回的数据通过一定的规则过滤出来,将其保存成参数,并且在后续脚本中使用这个参数进行逻辑处理。
什么情况下需要使用关联?
1. 服务器返回的数据是动态的,并且,
2. 脚本中需要对这个动态数据做处理
关联的分类
分为自动关联和手动关联
自动关联: LR内置了一些关联规则,在录制脚本的时候,会自动创建关联。LR也可以对比录制和回放时服务器数据存在的差异,提示用户进行关联。
比如:

手动关联:用户根据业务数据规则,使用LR提供的关联函数进行数据相关操作。这种方式灵活性更高,工作中常用这种方式。
关联函数工作原理
某接口返回数据格式为{"msg":"success"},想动态获取success这个值
1. 先确定想获取的数据为success
2. 在关联函数中设置如下过滤规则
a) 数据的左边界为 {"msg":"
b) 数据的右边界为"}
c) 将符合这个搜索条件的数据保存到参数param中
3. LR中发起HTTP请求调用接口
4. LR获取HTTP响应数据,并按照设定的规则进行过滤
5. 保存数据到参数param中
LR关联函数
LR提供了web_reg_save_param函数来实现关联功能
函数定义
int web_reg_save_param( const char *ParamName, <List of Attributes>, LAST);
注意要点:
- 关联函数是注册型函数,必须放在对应的HTTP请求之前
举个例子:你不想出门,想让室友帮你带饭回来。首先你要告诉室友你想要吃什么,然后室友才能按照你的需求去买,否则他不知道买什么。相同的,下单之前,你要告诉服务器,你想要获取的数据的左边界和右边界,等到服务器响应的时候,才会给你取相对应的数据。
- 使用关联函数保存下来的值,必须在对应HTTP请求之后才可使用
- 先注册,后使用
使用LR自带的函数窗口生成关联函数
点击:Insert- new step- 搜索web_reg_save_param

关键设置
- Parameter Name: 最终保存数据的参数名称
- Left Boundary: 左边界
- Right Boundary: 右边界
- Instance: 保存的数据个数
- all: 保存符合条件的所有数据
- n: 保存符合条件的第n条数据(n为数字)
关联总结
- 关联主要用于获取服务端返回的动态数据
- 关联函数的注册型的,必须先注册、后使用
- 在一个HTTP请求前可以添加多个关联函数
- 如果关联函数中左右边界中存在特殊字符,需要\进行转义
- 关联函数中如果指定ord=all,那么保存下来的数据就是一个数组;ord=n,保存的是具体的值
关联案例
登陆OA系统,在论坛模块里,随机选择一个版块进行发帖
思路:随机选择一个版块进行发帖,首先要获取所有的版块ID,当点击论坛的时候,服务器会返回所有的版块ID。
"LB=forumAction_show.action?id=",
"RB=\"",
"Ord=all",
LAST);
web_url("论坛",
"URL=http://localhost:8080/TestOA/forumAction_list.action",
"TargetFrame=right",
"Resource=0",
"RecContentType=text/html",
"Referer=http://localhost:8080/TestOA/homeAction_left.action",
"Snapshot=t3.inf",
"Mode=HTML",
EXTRARES,
"Url=style/blue/images/title_bg.gif", ENDITEM,
"Url=style/blue/images/title_bg_head.gif", ENDITEM,
"Url=style/blue/images/inputPageHeadBg.gif", ENDITEM,
"Url=style/blue/images/title_bg_end.gif", ENDITEM,
LAST);
srand(time(NULL));
lr_save_string(lr_paramarr_random("mybids"),"mybid");
"URL=http://localhost:8080/TestOA/forumAction_show.action?id={mybid}",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://localhost:8080/TestOA/forumAction_list.action",
"Snapshot=t4.inf",
"Mode=HTML",
EXTRARES,
"Url=style/blue/images/pageSelector_bg.gif", "Referer=http://localhost:8080/TestOA/forumAction_show.action?id={mybid}", ENDITEM,
LAST);


浙公网安备 33010602011771号