翼度科技»论坛 编程开发 .net 查看内容

【性能测试】性能测试工具LoadRunner,参数化关联。全md文档笔记(已分享文

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18

本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1. LoadRunner介绍,2. 脚本录制、运行、参数化,3. 关联、检查点、事务、集合点。性能场景:1. 场景分类、场景设计、场景运行策略,2. 资源监控、SLA、IP Wizard应用。性能分析:1. 摘要报告、事务图表、图表合并,2. 交叉结果、拐点分析、Web项目资源分析。

全套笔记和代码自取移步gitee仓库: gitee仓库获取完整文档和代码

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

共 5 章,25 子模块



性能测试工具-LoadRunner

学习目标
  1. 1. 理解基于VuGen的脚本录制
  2. 2. 掌握参数化的使用方法
  3. 3. 掌握关联的使用方法
  4. 4. 掌握检查点的使用方法
  5. 5. 掌握事务的使用方法
  6. 6. 掌握集合点的应用
复制代码
VuGen-参数化

目标


  • 理解参数化的使用场景
  • 掌握参数化的使用方式
一、什么是参数化

根据需求动态的获取数据的过程
二、为什么要参数化?


  • 减少重复代码
  • 数据代码进行分离,方便维护
需求1
  1. 说明:由于虚拟机运行速度原因,我们使用 lr_output_message() 函数,来学习如何使用参数化
  2. 要求:输出 我要去北京;我要去上海;我要去广州;我要去深圳;
复制代码
三、参数化操作

3.1 打开参数化菜单

  1. 选中要参数化的文本 -> 鼠标右键 -> Replace with a Parameter
  2. 或者
  3. 菜单 Insert -> New Parameter...
复制代码
3.2 Replace with a Parameter 打开的窗口

  1. 1. Parameter name:参数化引用名称(参数化时使用)
  2. 2. Parameter type:File 【推荐】
  3. 3. Properties:属性-点击此按钮,可直接设置参数化引用名称对应的值;【点击】
  4. 提示:
  5.     1). 点击OK;参数化引用名称具体的值,需要再次设置;
复制代码
3.3 Properties 设置面板

  1. 1. Parameter type: 参数类型 File 【重点】
  2. 2. File:参数保存的文件类型及位置,一般为txt;【推荐】
  3. 3. Add Row:添加行,在当前表格编辑数据;【可选】
  4. 4. Edit with Notepad:在记事本内编辑数据;【推荐】
  5. 5. Select next row:运行或迭代时对行的选择方式
  6. 6. Update value on:运行或迭代时对值的选取方式
  7. 提示:
  8.     1). 其中5.Select next row 与 6.Update value on为组合关系,不同组合效果不同,我们单独来学习
复制代码
需求1 解决方案


  • 创建指定路径及txt文本格式 如:C:\lr11\scripts\city.txt
  • 使用 Edit with Notepad 编辑数据:北京、上海、广州、深圳
  • 编写脚本
  • 迭代次数 4
问题
  1. lr_output_message(“str”):函数为把str字符串输出到日志,但它自身并不能解析读取参数;
复制代码
函数(设置参数、读取参数)


  • lr_save_string()
  • lr_eval_string()
1. lr_save_string()

把字符串保存到指定的参数中

格式:lr_save_string("字符串","参数名")

示例:lr_save_string("北京","city");
2. lr_eval_string()

读取变量的值,并以Char类型返回;

格式:lr_eval_string("{参数名}");

示例:lr_eval_string("{city}");
  1. 提示:
  2.     1). 参数名称使用花括号{}包括
  3.     2). 参数使用双引号包括
复制代码
需求1 代码示例
  1. Action()
  2. {
  3.     lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
  4.     return 0;
  5. }
复制代码
3.4 Select next row 与 Update value on

Select next row

读取参数文件行的方式
方式:
  1. 1. Sequential:顺序,按照行的顺序读取数据,如果迭代次数大于行数,再次从第一行开始读取
  2. 2. Random:随机,随机读取行
  3. 3. Unique:唯一,每次读取唯一行,不重复;
  4. 4. Same line as xxx  取参数同行(需要两个以上参数,才能显示和使用)
复制代码
注意:
  1. 使用 Unique 选项时会激活 When out of values:
  2. 1) Abort Vuser:中止虚拟用户
  3. 2) Continue in a cyclic manner:以循环的方式继续
  4. 3) Continue with last value:继续使用最后一个值
复制代码
Update value on

参数值更新的方式
方式:
  1. 1. Each iteration:每次迭代以后更新
  2. 2. Each occurrence:每次出现参数时更新
  3. 3. Once:每出现一个虚拟用户(线程)更新一次
复制代码
组合


  • 行顺序 + 每次迭代更新值 Sequential + Each iteration
  • 行顺序 + 每次参数出现更新值 Sequential + Each occurrence
  • 行顺序 + 更新一次(单用户) Sequential + Once
说明:
  1. 1. 组合我们在这里就不穷举了,以行的顺序配合值的3种更新方式做演示
  2.     2. 因为组合内含occurrence,所以必须要两个Action,我们新增两个(Action1、Action2)两个代码相同
复制代码
代码
  1. Action1()
  2. {
  3.     lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
  4.     return 0;
  5. }
  6. Action2()
  7. {
  8.     lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
  9.     return 0;
  10. }
复制代码
Sequential + Each iteration

行为顺序,值为迭代更新一次;
预期:
  1. 1. 第一次迭代:Action1:北京;Action2:北京
  2. 2. 第二次迭代:Action1:上海;Action2:上海
  3. 3. 第三次迭代:Action1:广州;Action2:广州
  4. 4. 第四次迭代:Action1:深圳;Action2:深圳
复制代码
Sequential + Each occurrence

行为顺序,值为出现一次更新一次
预期:
  1. 1. 第一次迭代:Action1:北京;Action2:上海
  2. 2. 第二次迭代:Action1:广州;Action2:深圳
  3. 3. 第三次迭代:Action1:北京;Action2:上海
  4. 4. 第四次迭代:Action1:广州;Action2:深圳
复制代码
Sequential + Once

行为顺序,值为单用户只更新一次
预期:
  1. 1. 第一次迭代:Action1:北京;Action2:北京
  2. 2. 第二次迭代:Action1:北京;Action2:北京
  3. 3. 第三次迭代:Action1:北京;Action2:北京
  4. 4. 第四次迭代:Action1:北京;Action2:北京
复制代码
批量获取参数时,如果保证参数不重复?(扩展)
  1. 思路:添加时间戳
  2. 说明:web_save_timestamp_param("time_stamp",LAST) 为时间戳函数,返回:1970到现在的毫秒数;
  3. (time_stamp:参数为获取值后保存的参数名称,被引用时使用)
复制代码
示例:
  1. Action()
  2. {
  3.     web_save_timestamp_param("time_stamp",LAST);
  4.     lr_output_message("我要去%s",lr_eval_string("{NewParam}_{time_stamp}"));
  5.     return 0;
  6. }
复制代码
其他常用参数类型(了解)
  1. parameter type:
  2.     1. Date/Time
  3.     2. Random Number
复制代码
VuGen-关联

目标


  • 理解关联的概念
  • 掌握关联函数的使用
  • 了解LR自动关联的使用
一、为什么要学习关联?

  1. 1. 获取动态加载的数据,例如:Session ID(会话ID)
  2. 2. 测试的时候需要获取页面上指定的数据,注意是获取,而不是查找
  3. 说明:
  4.     Session ID:客户端与服务器交互时,服务器生成的一个唯一标识码;
  5.     (通过标识码服务器可以区分多次交互对象是否同一客户端,浏览器只要不关闭标识码就不变)
复制代码
二、什么是关联(correlation)?

动态获取指定的数据,并把获取的数据通过参数化的方式在另一处引用
三、LoadRunner 常用的关联方式


  • 手动关联【推荐】
  • 自动关联【了解】
3.1 手动关联【重点】

手动关联就是直接调用关联函数;
关联函数 web_reg_save_param()
  1. 1). 执行顺序:LR中函数内含reg为注册函数,注册函数是在下一个Action Function完成时执行。
  2. 2). 函数位置:注册函数【必须】放到下一个Action Function(要进行关联数据所在的函数)函数之前;
  3. 3). 如果关联的参数值超过256个字符,需要先调用 web_set_max_html_param_len("1024") 改变参数长度;
复制代码
案例 1


使用 web_reg_save_param() 函数把红框选中内容关联给Welcome参数
案例 1 脚本
  1. Action()
  2. {
  3.     web_url("WebTours",
  4.         "URL=http://127.0.0.1:1080/WebTours/",
  5.         "TargetFrame=",
  6.         "Resource=0",
  7.         "RecContentType=text/html",
  8.         "Referer=",
  9.         "Snapshot=t1.inf",
  10.         "Mode=HTML",
  11.         LAST);
  12.     return 0;
  13. }
复制代码
案例1 操作分析
  1. 1. 在web_url函数之前插入关联函数 web_reg_save_param()
  2. 2. 调用 lr_eval_string() 来读取关联函数的参数引用名称,并通过 lr_output_message() 函数输出到日志
复制代码
案例1 操作实施

1) 插入 web_reg_save_param()方法

  1. 1. 在web_url函数之前空白行,点击鼠标右键
  2. 2. 选择Insert菜单 -> New Step
复制代码
2) 输入要查找的函数:

  1. 1). 图1:输入要查找函数的关键词或全称
  2. 2). 图2:找到匹配出的函数,双击或点击图3
  3. 3). 图3:选中图2,点击图3进行选中函数参数设置
复制代码
3) 设置函数参数


参数:
  1. 1). Parameter Name:参数名称(被引用时使用)
  2. 2). Left Boundary(LB):左边界
  3. 3). Right Boundary(RB):右边界
  4. 4). Not Found:关联失败时,处理方式
  5. 5). Search in:匹配搜索响应代码范围
复制代码
注意:
  1. 单引号(')、双引号(")、反斜杠(\)、回车换行等需要转义字符,加上转义字符[\]
复制代码
4) 如何查看页面元素响应代码?


  • 通过LR查看响应代码
  • 通过页面查看源代码
1). 通过LR查看 【注意:必须是录制脚本-手动编写脚本没有快照】


提示:
  1. 1. 结构为Tree
  2. 2. url:为WebTours
  3. 3. 页面为/WebTours/home.html
复制代码
2). 通过页面源代码查看 关联

地址:http://127.0.0.1:1080/WebTours/home.html 参数化并输出到日志

代码:
  1. Action()
  2. {
  3.     web_reg_save_param("Webcome",
  4.         "LB=</H1>\n",
  5.         "RB=\n"
  6.         "
  7. ",
  8.         "NotFound=ERROR",
  9.         "Search=All",
  10.         LAST);
  11.     web_url("WebTours",
  12.         "URL=http://127.0.0.1:1080/WebTours/",
  13.         "TargetFrame=",
  14.         "Resource=0",
  15.         "RecContentType=text/html",
  16.         "Referer=",
  17.         "Snapshot=t1.inf",
  18.         "Mode=HTML",
  19.         LAST);
  20.     lr_output_message("Webcome值为:%s",lr_eval_string("{Webcome}"));
  21.     return 0;
  22. }
复制代码
3.2 自动关联 【了解】
  1. 1. 自动关联LoadRunner提供两种方式:
  2.     1). 录制时关联-在录制脚本的时候如果有符合关联规则的就自动进行关联;
  3.     注意:此种方式依赖于LR自带的规则或新建的自定义规则
  4.     2). 录制后关联-脚本录制完成并且运行完一次后,打开扫描工具,进扫描需要关联的数据进行关联;
  5.     注意:
  6.         ① 利用扫描工具必须要先运行一遍脚本
  7.         ② 扫描关联:很多时候LR扫描不到需要关联的信息(比如手写的脚本),所以一般不推荐使用;
  8. 2. 自动关联调用的是关联函数 web_reg_save_param_ex();
  9. (web_reg_save_param_ex与web_reg_save_param功能大致相同,它也可以使用正则表达式和过滤器)
复制代码
1) 自动关联-启用自动关联设置


启动自动关联位置:工具菜单(Tool) -> Recording Option
2) 自动关联-扫描工具



  • 启动:打开扫描工具-Ctrl+F8 或者菜单栏(Vuser) -> Scan Script for Correlations
  • 扫描:扫描之前先运行一遍脚本
  • 关联:图中个第二步Correlation Results内进行关联;
自动关联总结
  1. 1. 自动关联-录制时关联:采用自带或设定的规则在录制脚本的时候自动关联
  2. 2. 自动关联-录制后关联:前后运行两次,搜索两次不同之处为需要关联的数据,进行确认关联
  3. 3. 自动关联无论哪种方式,都是采用调用关联函数的方法,所以工具智能人更智能,因此推荐优先使用手动关联
复制代码
未完待续, 同学们请等待下一期

全套笔记和代码自取移步gitee仓库: gitee仓库获取完整文档和代码

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


来源:https://www.cnblogs.com/yinuo112/p/18024922
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具