Loadrunner笔记
2021年11月27日
一、loadrunner介绍
1.loadrunner组成
A.Virtual User Generator(虚拟用户生成器)
模拟虚拟用户动作。是用来录制、生成、编辑、调试脚本所用的工具。
B.LoadRunner Controller(测试控制器)
是用来设计,实现场景,执行场景,集成监控,实时监测的一个组件。是执行负载测试管理和监控的中心。在这里指定具体的性能测试方案,执行性能测试,收集测试数据,监控测试指标。
C.LoadRunner Analysis(结果分析器)
通过图表,分析进行收集、整理测试结果,提供简单的概要报告、图表,并且提供必要的选项来帮助测试工程师来分析性能测试结果、定位性能瓶颈。
2.性能,负载,压力测试
A.性能测试
通过模拟生产运行的业务压力和使用场景组合测试系统的性能是否满足生产性能要求。
B.负载测试
通过在被测系统上不断增加压力,知道性能指标例如响应时间超过预定的指标或资源达到上限。这种测试可以找到系统的处理极限,为系统提供调优提供数据。(慢慢增加用户数和并发数)
C.压力测试
测试系统在一定饱和状态下,例如CPU,内存饱和等,系统能够处理的会话能力,以及系统是否会出现错误。(高并发,高用户的情况下)
3.loadrunner工作流程
计划和设计测试----->创建VU脚本(虚拟用户)----->创建测试场景----->运行测试场景----->分析测试结果------>对系统进行调优
二、loadrunner 常用操作
事务:lr_start_transaction("start") lr_end_transaction("start", LR_AUTO)
检查点:web_reg_find
集合点:lr_rendezvous("aaa");
思考时间:lr_think_time(5)
参数化1:右击选择Replace with a Parameter,弹出窗口Select or Create Parameter
参数化2:工具栏有个P的图标(parameter type)
三、负载测试流程
1.负载测试流程通常由五个阶段组成:
计划、脚本创建、场景定义、场景执行和结果分析。
(1)计划负载测试:定义性能测试要求,例如并发用户的数量、典型业务流程和所需响应时间。
(2)创建 Vuser 脚本:将最终用户活动捕获到自动脚本中。
(3)定义场景:使用 LoadRunner Controller 设置负载测试环境。
(4)运行场景:通过 LoadRunner Controller 驱动、管理和监控负载测试。
(5)分析结果:使用 LoadRunner Analysis 创建图和报告并评估性能。
2.负载测试流程细分
A、计划测试
定义明确的测试计划将确保制定的 LoadRunner场景能完成您的负载测试目标。
B、创建 Vuser 脚本
Vuser通过与基于 Web 的应用程序的交互来模拟真实用户。Vuser 脚本包含场景执行期间每个 Vuser 执行的操作。
(1)每个 Vuser 执行
(2)同时多个 Vuser 执行
(3)选择具体的事务度量
C、创建场景
使用 LoadRunner Controller 创建场景。场景描述测试会话期间发生的事件。场景中包括运行 Vuser 的计算机列表、Vuser 运行的脚本列表以及场景执行期间运行的指定数量的 Vuser 或 Vuser 组。
通过定义 Vuser 组(将为这些组分配一些单独的 Vuser)、Vuser 脚本和运行脚本的负载生成器来创建场景。
或使用百分比模式来创建场景,在该模式下,您可以定义场景中要使用的 Vuser 的总数、负载生成器计算机以及要分配给每个 Vuser 脚本的 Vuser 占总数的百分比
D、运行场景
通过指示多个 Vuser 同时执行任务来模拟服务器上的用户负载。增加或减少同时执行任务的 Vuser 数可以设置负载级别。
创建手动场景模式:
运行场景之前,需要设置场景配置和计划。这将决定运行场景时所有负载生成器和 Vuser 的行为。可以运行整个场景、Vuser 组或单个 Vuser。场景运行时,LoadRunner 将度量并录制每个 Vuser 脚本中定义的事务。还可以联机监控系统的性能。
E、监控场景
使用 LoadRunner 监控运行时、事务、系统资源、Web 资源、Web 服务器资源、Web 应用程序服务器资源、数据库服务器资源、网络延时、流媒体资源、防火墙服务器资源、ERP/CRM 服务器资源、Java 性能、J2EE/.NET 事务细分、应用程序部署、中间件性能、应用程序组件和基础结构资源监控器来监控场景执行。
F、分析测试结果
在场景执行期间,LoadRunner 将录制不同负载下应用程序的性能。您可以使用 LoadRunner 的图和报告来分析应用程序的性能。
四、性能测试指标
1.十个指标
性能指标
1) 吞吐量(throughput):指单位时间内处理的客户端请求数量。直接体现软件系统的性能承载能力。
2) 并发数量(concurrency):多个同事并发的业务操作。如:100个用户谈事点击登录界面的“登录”按钮操作。
3) 思考时间(think time):录制脚本过程中,每个请求之间的时间间隔,即操作过程中停顿的时间。
4) 响应时间:指用户从客户端发起一个请求开始,到客户端接受到服务器端返回结果的响应结束,结果信息展现在客户端整个过程所耗费的时间。
5) 点击数:它是统计根据客户端向Web服务器发了多少次HTTP请求计算的。
6) 性能计数器(counter):是描述相关服务器、操作系统、中间件等性能的一些数据指标。如:Windows系统的内存数(memory inusage)、进程时间(total processtime)都是常见的计数器。
7) 资源利用率:资源利用率通常是指系统各种资源的使用情况,一般用“资源使用量”/“总的资源可用量”× 100%。
8) 网络吞吐量:指在网络工作正常的情况下,单位时间内通过的数据数量。该指标用于衡量系统对于网络设备或链路传输能力的需求。
9) 错误率:指系统在负载的情况下,失败交易的概率。错误率= 失败交易次数/交易总数×100%。
10)系统稳定性:用户提出的重要指标,如:稳定运行时间7*24等。
A.Tps,错误数,平均响应时长,90%的平均响应时长,结果准确性,线程数
B.某个线程使用cpu过高导致服务整体慢等都可以通过在这些命令辅助linux命令看出来。
top,vmstat,sar,dstat,traceroute,ping,nc,netstat,tcpdump,ss等等具体请百度。
负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
2.压力测试(Stress Testing):
强度测试也就是压力测试,压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
3.容量测试(Volume Testing):
确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试、压力测试参考答案如上题。
五、其他
1.接口脚本
Action()
{
// 第一个接口:登录账号并获取token值
// 保存请求返回参数为token,取第一个access_token的值
web_reg_save_param("token", "LB=access_token\":\"", "RB=\"", "Ord=1", LAST);
// 添加HTTP信息头
web_add_header("Content-type","application/json");
// 添加登录开始事务
lr_start_transaction("login");
// 登录接口POST
web_custom_request("login",
"Method=POST",// 接口类型
"URL=http://frontend.lryex-api.test/site/login", // 添加URL
"Body={\"login_type\":\"10\",\"password\":\"a1234567\",\"username\":\"17555555555\"}",LAST ); // 添加请求参数
// 添加登录完成事务
lr_end_transaction("login", LR_AUTO);
// 第二个接口:用登录接口获取的token进行下单
// 添加HTTP信息头:扩展
web_add_header("Content-type","application/json");
// 添加HTTP信息头:获取token
web_add_header("Authorization","{token}");
// 保存请求返回参数为msg,取第一个msg的值
web_reg_save_param("msg", "LB=msg\":\"", "RB=\"", "Ord=1", LAST);
// 添加下单开始事务
lr_start_transaction("order");
// 下单接口POST
web_custom_request("order",
"Method=POST", // 接口类型
"URL=http://frontend.lryex-api.test/otc-order/create", // 添加URL
"Body={\"otc_advert_id\":\"2021112448975198\",\"password\":\"a1234567\",\"volume\":\"20\"}",LAST );// 添加请求参数
//打印返回信息msg
lr_convert_string_encoding ( lr_eval_string ("{msg}"),LR_ENC_UTF8 ,NULL,"tomsg");
//打印转码后的响应报文tomsg
lr_output_message ( "\nlistGames :%s",lr_eval_string ("{tomsg}"));
//转码到tomsg,保证msg不是乱码显示
lr_convert_string_encoding(lr_eval_string("{msg}"), LR_ENC_UTF8 , LR_ENC_SYSTEM_LOCALE,"tomsg");
//tomsg = 操作完成时代表接口成功,否则就是失败(和Jmeter的断言一样)
if
(strcmp(lr_eval_string("{tomsg}"),"操作完成")==0)
{ lr_end_transaction("order", LR_PASS);}
else
{lr_end_transaction("order", LR_FAIL);}
return 0;
}
2.LoadRunner获取返回值作为下一个接口的参数
1、获取需要的返回值
web_reg_save_param(“参数名”,“LB=返回值名称”:"",“RB=”",“Search=Body”,LAST);
2、引用
在需要引用的位置填写“{参数名}”