理解LoadRunner,基于此工具进行后端性能测试的详细过程(下)

news2025/1/13 17:00:00

5、录制并增强虚拟用户脚本

从整体角度看,用LoadRunner 开发虚拟用户脚本主要包括下面四步骤:

识别测试应用使用的协议

录制脚本

完善录制得到的脚本

验证脚本的正确性

识别被测应用使用的协议

如果明确知道了被测系统所采用的协议,可以跳过这一步。如果还不知道可以使用Virtual User Generator 模块自带的 Protocol Advisor 识别被测应用使用的协议,具体的操作方法:

在 Virtual User Generator 中依次点击 File、Protocol、AdvisorAnalyze、Application,展开这些菜单

在打开的界面上按要求填写被测应用的信息

Protocol Advisor 会自动运行被测系统。如果是网页应用,就会打开浏览器

在页面上执行典型业务操作,完成业务操作后点击 “Stop Analyzing” 按钮停止录制

Protocol Advisor 会根据刚才录制的内容自动分析被测应用使用的协议,并给出最终的建议

接下来,就可以使用 Protocol Advisor 建议的录制协议开始脚本录制工作了。如图就是 Protocol Advisor 给出的建议录制协议界面。

1)录制脚本

基本原理是,通过GUI 界面对被测系统进行业务操作,Virtual User Generator 模块在后台捕获 GUI 操作所触发的客户端与服务器端的所有交互,并生产基于 C 语言的虚拟用户脚本文件。

即录制脚本的过程需要通过GUI 实际执行业务操作,所以在开始录制脚本前,可以先多次演练需要这些 GUI 操作步骤,并明确知道哪些操作步骤会对服务器端发起请求。

要知道哪些操作步骤会对服务器发起请求的原因是,要将这些操作步骤在虚拟用户脚本中封装成“事务”(Transaction)。封装为“事务”的目的是统计响应时间,因为 LoadRunner 中的响应时间都是以“事务”为单位的。

具体的录制步骤包括下面三步:

选择 Create/Edit Scripts 进入 Virtual User Generator 创建脚本的协议选择界面。

选择正确的协议后进入 Start Recording 界面,选择需要录制的应用类型,填写应用的详细信息。如果是 Web 应用,Application type 就应该选择Internet Application,然后选择浏览器并填写这个 Web 应用的 URL,完成后自动打开浏览器。

在该浏览器中执行业务操作,Virtual User Generator 模块会记录所有的业务操作,并生成脚本。

由于LoadRunner 脚本的可读性并不好,在录制完的脚本中添加事务定义的难度大。所以在录制脚本的过程中,最好直接对发起后端调用的操作添加事务定义,而不要脚本生成后添加。

在录制过程中,直接添加事务操作也很简单,主要包括如下三步:

在开始执行 GUI 操作前,点击下图的“事务开始”并填写事务名称

执行 GUI 操作

操作完成后,点击下图的“事务结束”

这样刚才执行GUI 操作的脚本就会被 lr_start_transaction(“事务名称”) 和 lr_end_transaction(“事务名称”,LR_AUTO) 包围起来,也就完成了添加事务的定义。

2)完善录制得到的脚本

Virtual User Generator 模块录制的脚本不能直接使用,我们还需要对录制的脚本做以下处理:

两个事务之间加入思考时间(Think Time)

对界面输入的数据参数化(Parameterization)操作

完成脚本的关联(Correlation)操作

加入检查点(Check Point)

这4 步处理操作是虚拟用户脚本开发中最关键的地方,不仅需要知道为什么要进行这些处理,更要能够完成这些处理,否则录制的脚本无法成功回放。

第一,在两个事务之间加入思考时间

思考时间是用户在实际使用系统时,并不会连续不断地向后端服务器发起请求,在两次发起请求之间往往会有一个时间的间隔,这个时间间隔主要来自于两个方面:

用户操作的人为等待时间,因为用户不可能像机器人那样快速地执行操作

用户可能需要先在页面上填写很多信息后之后,才能提交操作,那么填写这些信息就需要花费一定的时间

为了让虚拟用户脚本能够更真实地模拟实际用户的行为,就需要在两个事务之间加入一定的等待时间。即 LoadRunner 中的思考时间。

只需直接调用LoadRunner 提供的 lr_think_time() 函数,就可以在两个事务之间加入思考时间。但是,这个思考时间到底设置为多少,并没有那么容易知道。思考时间往往会涉及多方面的因素,严格计算的话会非常复杂。

在实际项目中,可先粗略估计一个值(比如15 s),然后在实际执行负载场景的过程中,再根据系统吞吐量调整。

后续调整思考时间时,无需逐行修改虚拟用户脚本代码,可以在Run-time Settings(运行时设置)中很方便地完成。如图,Run-time Settings 中支持多种方式调整思考时间。

第二,对界面输入的数据做参数化操作

假设,录制的虚拟用户脚本完成的是用户登录操作,那么由于脚本回放时需要支持多用户的并发,所以必须要把脚本中的用户名和密码独立出来,放入专门的数据文件中,然后在这个文件中提供所有可能被用到的用户名和密码。

以下是参数化配置的界面截图,LoadRunner 支持的参数化的数据源很丰富,既可以是 excel 文件,也可以是数据库中的表等。

凡参数文件中使用的测试数据,都需要在执行性能测试前在被测系统中准备好。以用户登录的脚本为例,假定你的参数文件中提供了5000 个用于并发执行的用户信息,那么这 5000 个用户必须是已经实际存在于系统中的,这就要求你要在开始测试前事先准备好这 5000 个用户。

所以,参数化操作其实由两部分组成:

性能测试脚本和测试数据的分离

事先建立性能测试的数据

第三,完成脚本的关联操作

关联操作直接关系到脚本是否可以回放成功。主要作用是取出前序调用返回结果中的某些动态值,传递给后续的调用。

举个例子:

假设,每次客户端连接服务器端时,服务器端都会用当前的时间戳(Time Stamp)计算 CheckSum,然后将 Time Stamp 和 CheckSum 返回给客户端。然后,客户端就把 Time Stamp + CheckSum 的组合作为唯一标识客户端的 Session ID。录制脚本时,录制得到的一定是硬编码(hardcode)的 Time Stamp 值和 CheckSum 值。

下图是交互过程,录制得到Time Stamp 的值是 TS,而 CheckSum 的值是 CS。
在这里插入图片描述
采用 Time Stamp + CheckSum 的组合作为 Session ID 的方式,在回放这个脚本的时候就有问题了。因为回放时,这段硬编码已经有了新的 Time Stamp 值和 CheckSum 值,并且显然与之前的值不同,所以服务器无法完成 Session ID 的验证,也就导致了脚本回放失败。

解决方法就是,在脚本回放的过程中,实时抓取Time Stamp 值和 CheckSum 值,然后用实时抓取到的值替换后续需要使用这两个值的地方。这个过程就是“关联”。

如下图,关联就是解析服务器端的返回结果,抓取新的Time Stamp 值和 CheckSum 值,然后后续的操作都使用新抓取的值,这样脚本就能回放成功了
在这里插入图片描述
理解了关联操作,在脚本中处理关联就比较简单了,LoadRunner 提供了功能强大的关联函数 web_reg_save_param()。这个关联函数支持多种动态值的获取方式,用得最多的是基于“前序字符串匹配”加上“后续字符串匹配”的方式。其中,字符串匹配,支持正则表达式。

看个具体的例子:

假设,服务器端返回的结果是:

“LB=name=timestamp value=8888.LB=name=CheckSum”,

那么为了能够获取到“8888”这个动态值,我们就可以用“前序字符串 =LB=name=timestamp value=”和“后续字符 =.LB=name=CheckSum”来“框出” 8888”这个动态值。

另外,需要特别注意的是web_reg_save_param() 函数是注册型函数,必须放在获取动态值所属的请求前面,相当于先声明,后调用。更多的关联函数用法,你可以参考 LoadRunner 官方文档.

第四,加入检查点

检查点,类似于功能测试中的断言。但是,性能测试脚本,不像功能测试脚本那样需要加入很多的断言,往往只在一些关键步骤后加入很少量的检查点即可。这些检查点的主要作用是,保证脚本按照原本设计的路径执行。

最常用的检查点函数是web_reg_find(),作用是通过指定左右边界的方式“在页面中查找相应的内容”。这里需要注意的是,这个函数也是注册型函数,即需要放在所检查的页面之前,否则会检查失败。更多的检查点函数以及用法也可参考 LoadRunner 官方文档

3)验证脚本的正确性

可以以下顺序检查脚本的准确性:

以单用户的方式,在有思考时间的情况下执行脚本,确保脚本能够顺利执行,并且验证脚本行为以及执行结果是否正确;

以单用户的方式,在思考时间为零的情况下执行脚本,确保脚本能够顺利执行,并且验证脚本行为以及执行结果是否正确;

以并发用户的方式,在有思考时间的情况下执行脚本,确保脚本能够顺利执行,并且验证脚本行为以及执行结果是否正确;

以并发用户的方式,在思考时间为零的情况下执行脚本,确保脚本能够顺利执行,并且验证脚本行为以及执行结果是否正确;

上述四个测试全部通过,就可以拿到虚拟用户脚本。

6、创建并定义性能测试场景

就是在LoadRunner Controller 中设置性能测试场景。目的是要描述性能测试过程中所有与测试负载以及监控相关的内容。通常来讲,性能测试场景设计主要会涉及以下部分:

并发用户数是多少;

测试刚开始时,以什么样的速率来添加并发用户?比如,每秒增加 5 个并发用户;

达到最大并发用户数后持续多长时间;

测试结束时,以什么样的速率来减少并发用户?比如,每秒减少 5 个并发用户;

需要包含哪些业务操作,各个业务操作的占比是多少?比如,10% 的用户在做登录操作,70% 的用户在做查询操作,其他 20% 的用户在做订单操作;

一轮虚拟用户脚本执行结束后,需要等待多长时间开始下一次执行;

同一虚拟用户脚本中,各个操作之间的等待时间是多少;

需要监控哪些被测服务器的哪些指标;

脚本出错时的处理方式是什么?比如,错误率达到 10% 时,自动停止该脚本;

需要使用多少台压力产生器;

7、执行性能测试场景

一般是在LoadRunner Controller 中完成。你可以通过 Controller 发起测试、停止测试、调整性能测试场景的各种参数,还可以监控测试的执行过程

8、分析测试报告

执行完性能测试后,LoadRunner 会根据自己的标准并结合性能测试场景中定义的系统监控器指标,生成完整的测试报告。在 Analysis 中,不仅可以以图形化的方式显示单个指标,也可以将多个指标关联在一起进行比较分析。

下图展示了使用LoadRunner Analysis 展示事务平均响应时间的界面,我们可以看到图片右下角各个事务的最小响应时间、最大响应时间和平均响应时间。
在这里插入图片描述
文章来源:网络 版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java小区物业水电费管理系统springboot+vue

智能小区管理系统被人们投放于现在的生活中进行使用,该款管理类软件就可以让管理人员处理信息的时间介于十几秒之间。在这十几秒内就能完成信息的编辑等操作。有了这样的管理软件,智能小区管理信息的管理就离无纸化办公的目标更贴近了。 这次开发的智能小…

RFID智能制造应用:助力企业提升制造效率!

随着企业间竞争加剧,如何提升企业生产效率,降低成本成为不少制造企业持续追求的目标。利用智能制造中的RFID设备,可以对企业入库、盘点、生产、出库等流程进行监控,本文将探讨智能制造中的RFID设备如何帮助企业提升制造效率&#…

Maven打包知识点

一.前言 今天在工作中需要给测试同学提供一个jar包&#xff0c;里面包含了pom里面得外部依赖&#xff0c;我依旧按照往常得方式进行打包 二.外部依赖变成jar包里面的class 发现打的jar包里面并没有外部依赖。 直接上代码 <plugins><plugin><artifactId>ma…

如何实现前端数据持久化(LocalStorage、IndexedDB等)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

TIA博途软件中如何设置在程序中自动显示变量的注释信息?

TIA博途软件中如何设置在程序中自动显示变量的注释信息? 本例以TIA博途V15为例进行举例说明 如下图所示,新建一个项目后,打开PLC变量表,这里我选择几个变量进行举例说明,给这几个变量添加注释信息, 打开OB1,编写一句简单的程序,如下图所示,可以看到此时变量只显示名称…

第三章 运算符与表达式Pro

三、运算符与表达式 C语言一共有34个运算符&#xff0c;记这些运算符时从以下几个方面记&#xff1a; 运算符的书写形式&#xff1b; 运算符的运算规则;(两个整数相除,结果为整数) 所能进行的操作数&#xff1b;&#xff08;取余运算符%&#xff0c;操作数只能是整数&#xff0…

面试题:Java反射和new效率对比,差距有多大?

文章目录 一、基础概念二、new 对象和反射创建对象的效率对比所以下面我们来探讨一下为什么这么大差别?总结起来有下面几个原因 三、反射和new 的使用场景反射的部分使用场景new对象和反射的区别 一、基础概念 Java中&#xff0c;一般我们创建一个对象可能会选择new一下个实例…

回顾vmware 补充细节

安装好esxi后怎么直接在DCUI界面&#xff08;直接控制台用户界面&#xff09;进入命令行页面 在该界面使用 ALT F1 进入 ALT 退出 I界面&#xff08;直接控制台用户界面&#xff09;用户需要在机房直连服务器上才可以看到该界面 VSphere 在老的CPU是不支持的 三种方式访…

调试神器--Rlog

概述 在现代软件开发中&#xff0c;日志记录系统是不可或缺的一部分。它不仅可以帮助开发人员在应用程序中定位和解决问题&#xff0c;还可以用于监控、性能分析、安全审计等方面。本文将介绍日志记录系统的基本概念、重要性以及如何构建一个高效的日志记录系统。 为什么需要…

AI时代Excel数据分析提升之道

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

Oculus经验记录

它的Unity插件以前的版本V39跟V40有问题。V40最奇葩&#xff0c;inputOVR组件中几乎什么都没有&#xff0c;V39还好&#xff0c;只是OVRcameraRG无法拖动倒inputOVR组件上&#xff0c;因类型差一点点&#xff08;这个我记得以前自己遇到过&#xff0c;有解决的记录&#xff0c;…

洗眼镜超声波清洗机品牌哪个值得买?眼镜超声波清洗机推荐

现在大部分人都离不开眼镜来辅助我们看远处的东西&#xff0c;不单单是眼镜&#xff0c;现在墨镜的使用量也很大&#xff0c;墨镜可以再太阳大的时候遮挡一下视线&#xff0c;近视眼镜可以辅助那些有近视眼的朋友看到更远处的地方。随着眼镜使用量越来越大&#xff0c;也有很多…

WSL Ubuntu 22.04.2 LTS 安装paddlepaddle-gpu==2.5.1踩坑日记

环境是wsl的conda环境。 使用conda安装paddlepaddle-gpu: conda install paddlepaddle-gpu2.5.1 cudatoolkit11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge 等待安装... 报错处理&#xff1a; (1)PreconditionNotMetError: Cannot lo…

虹科分享 | 2023Gartner®终端安全发展规律周期:AMTD引领未来

导语&#xff1a;在2023年Gartner终端安全发展规律周期中&#xff0c;自动移动目标防御&#xff08;AMTD&#xff09;崭露头角&#xff0c;虹科Morphisec被誉为AMTD领域的样本供应商。该周期呈现出终端安全领域的最新创新&#xff0c;旨在帮助安全领导者更好地规划、采纳和实施…

我与COSCon的故事【时光的故事】

曾经 2019年的时候&#xff0c;我还在日本读研究生&#xff0c;做一些物联网 (Internet of Things, IoT) 网络中的底层P2P (Peer to Peer) 通讯仿真模拟。这个方向是新来的Nguyen老师的新方向&#xff0c;它跟计算机强相关&#xff0c;但是很小众&#xff0c;实验室里也没有前辈…

汽车数据安全事件频发,用户如何保护隐私信息?

面对日益增多的汽车数据安全事件&#xff0c;对于广大用户来说&#xff0c;有没有既廉价又安全的解决方案&#xff1f; 频发的汽车数据安全事件 随着汽车“新四化”大潮的来临&#xff0c;汽车用户从电动化、网联化、智能化、共享化中切实体验到了越来越多的便利&#xff0c;各…

spark stream入门案例:netcat准实时处理wordCount(scala 编程)

目录 案例需求 代码 结果 解析 案例需求&#xff1a; 使用netcat工具向9999端口不断的发送数据&#xff0c;通过SparkStreaming读取端口数据并统计不同单词出现的次数 -- 1. Spark从socket中获取数据&#xff1a;一行一行的获取 -- 2. Driver程序执行时&#xff0c…

用CRM系统实现销售目标的步骤

每个销售都要有自己的目标计划&#xff0c;在定销售计划时要把握方面问题&#xff0c;一个严格执行&#xff0c;另一个是可控。明确销售目标后&#xff0c;合理分配时间&#xff0c;运用销售基本工作方法严格把控销售进度。那我们该如何用CRM销售管理系统实现销售目标&#xff…

js面向对象(工厂模式、构造函数模式、原型模式、原型和原型链)

1.封装 2. 工厂模式 function createCar(color, style){let obj new Object();obj.color color;obj.style style;return obj;}var car1 createCar("red","car1");var car2 createCar("green","car2"); 3. 构造函数模式 // 创建…

Mybatis-Plus3.x的使用

MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为 简化开发、提高效率而生。 一、引入 创建步骤&#xff1a; 1.创建Spring Boot工程 2.添加依赖 引入 Spring Boot Starter 父工程&am…