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。

 web_reg_save_param("mybids",
  "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));
 //随即选取一个版块id, 并转换为web参数
 
 lr_save_string(lr_paramarr_random("mybids"),"mybid");
 web_url("技术交流",
  "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);

 

posted @ 2019-07-16 20:52  王杨杨  阅读(165)  评论(0)    收藏  举报