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

1、LoadRunner 的基本原理

后端性能测试工具通过虚拟用户脚本生成器生成基于协议的虚拟用户脚本,然后根据性能测试场景设计的要求,通过压力控制器控制协调各个压力产生器以并发的方式执行虚拟用户脚本,并且在测试执行过程中,通过系统监控器手机各种性能指标以及系统资源占用率,最后通过测试结果分析器展示结果数据。

在 LoadRunner 中,Virtual UserGenerator 对应的是虚拟用户脚本生成器,Controller 对应的是压力控制器和系统监控器,Load Generator 对应的就是压力产生器,Analysis 对应的是测试结果分析器。

以下我们把 LoadRunner 每个模块类比手工操作放大理解工作过程:

1)首先,我们需要一批测试机器,每台测试机器雇佣一个测试人员;
2)然后,一个调度员来统一控制,比如 “1-10 号测试人员开始执行登录操作,10-20 号测试人员 5 分钟之后执行搜索操作”,同时调度员还会要求每个测试人员记录操作花费的时间;
3)测试完成后,调度员会要求性能工程师分析测试中记录的数据。
4)通过类比:

测试调度员以及完成数据记录的部分就是 Controller;

大量的测试机器以及操作这些机器的人就是 Load Generator;

操作这些机器的人的行为就是 Virtual User Generator 产生的虚拟用户脚本;

对测试数据的分析就是 Analysis 模块;

2、LoadRunner 的主要模块
1)Virtual User Generator
用于生成模拟用户行为的测试脚本,生成的手段主要是基于协议的录制,也就是由性能测试脚本开发人员在通过 GUI 执行业务操作的同时,录制客户端和服务器之间的通信协议,并最终转化为代码化的 LoadRunner 的虚拟用户脚本。
这样转化得到的虚拟脚本还需要经历数据参数化(Parameterization)、关联建立(Correlation),以及运行时设置(Run Time Settings)等操作,然后才能用于性能测试场景中。

2)LoadRunner Controller
Controller 相当于性能测试执行的控制管理中心,负责控制 Load Generator 产生测试负载,以执行预先设定好的性能测试场景;同时,还负责收集各类监控数据。
在实际执行性能测试时,Controller 是和性能工程师打交道最多的模块,性能工程师会在 Controller 的 UI 界面上完成性能测试场景的设计、运行时的实时监控、测试负载的开始与结束等操作。

3)LoadRunner Analysis
Analysis 是 LoadRUnner 中一个清大的分析插件。不仅能图形化展示测试过程中收集的数据,还能对国歌指标做关联分析,找出他们的因果关系。它最根本的目的就是:分析出系统可能的性能瓶颈点以及潜在的性能问题。

3、如何基于 LoadRunner 性能测试?

从宏观角度讲,可以分为五个阶段:

性能需求收集及负载计划制定
录制并增强虚拟用户脚本
创建并定义性能测试场景
执行性能测试场景
分析测试报告

我觉得在性能测试中获取这些测试需求和测试结果分析与性能问题定位是比较难得两个点。而类似于性能测试脚本开发、场景设计等偏向于机械性地重复工作。

这 5 个阶段,按照先后顺序及各个模块作用排序如下:
在这里插入图片描述
4、性能需求收集及负载计划制定

其实无论什么类型测试,第一步都要根据测试目的明确测试具体需求。常需要包括以下内容:

系统整体的并发用户数比如,高峰时段会有 10 万用户同时在线;

并发用户业务操作的分布情况比如,20%的用户做登录操作,30%用户做订单操作,其他50%用户做搜索;

单一业务操作的用户行为模式比如,两个操作之间的典型停留时间,完成统一业务的不同操作路径等;

并发用户高峰期的时间分布规律比如,早上8点有大量用户登录,晚上 6 点后用户主键退出;

达到最高峰负载的时间长度比如,并发用户从0到10万花费的总时间。等等~~

前面说获取测试需求是比较难做的,因为绝大多数情况下没人会明确告诉你具体的性能需求。好比功能测试,如果需求不明确可以求助产品经理。

而性能测试产品通常无法准确告诉各个业务所占的百分比,也无法说出准确的用户行为模型。往往只能获取一些定性描述,然后自己去计算或根据过往经验得到具体定量需求。

测试目的不同,采用方法也不同,如何获取明确性能需求?这里提供测试需求的思考方式:

在性能测试指标中提到的体检例子,比如产品经理对体检的性能要求是“每天支持完成 8000 个体检”,这个需求看似具体,但还可以细化在很多方面。

首先,要明确这里的“每天”是否指的是 24 小时这取决于产品本身的属性。比如,产品是为单一时区的用户提供服务,还是要面向全球所有时区的用户。那么,根据体检中心的属性,可以确定“每天”一定是指 8 小时的工作时间。因为,体检中心是在一个确定的时区,并且不会 24 小时营业。

**然后,你明确了这个 8 小时后,那么原始需求是不是可以转化为“每小时支持完成 1000 个体检”?**若照这个套路设计后续的性能测试,会发现即使测试顺利完成,且各项性能指标都达标,可一旦上线后,系统还是很有可能被压垮。因为实际情况是,验血往往需要空腹,所以上午往往是体检中心的高峰时段,体检者会在上午集中涌入体检中心。也就是说,这 8000 个体检并不是平均分布在 8 小时内完成的,而是有明显的高峰时段。

最后,你可以采用 80/20 原则对高峰时段的用户负载进行建模比如 80% 的体检(6400 个)是发生在上午 20% 的时间(96 分钟)里。为了使模型更接近真实的情况,还应该分析历史数据,然后对该模型做进一步的修正。

另外,在得到了负载模型后,往往还会在此基础上加入一定的负载冗余,比如在峰值的基础上再额外放大 20%,以增强系统上线后稳定运行的信心。

完成了性能测试需求分析后,就已经明确了要开发哪些性能测试脚本。接着就要看开发性能测试脚本的步骤,以及相关的技术细节。

文章来源:网络 版权归原作者所有
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法|双指针系列No.7】leetcodeLCR 007. 三数之和

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

华为OD机考B卷 | 100分】阿里巴巴找黄金宝箱(JAVA题解——也许是全网最详)

前言 本人是算法小白,甚至也没有做过Leetcode。所以,我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 1. 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子&…

flstudio21破解版夸克网盘

FL studio21中文别名水果编曲软件,是一款全能的音乐制作软件,包括编曲、录音、剪辑和混音等诸多功能,让你的电脑编程一个全能的录音室,它为您提供了一个集成的开发环境,使用起来非常简单有效,您的工作会变得…

应用在SMPS中的GaN/氮化镓

开关模式电源(Switch Mode Power Supply,简称SMPS),又称交换式电源、开关变换器,是一种高频化电能转换装置,是电源供应器的一种。其功能是将一个位准的电压,透过不同形式的架构转换为用户端所需…

记录一个@Transaction注解引发的bug

记录一个Transactional(readOnly true)注解引发的bug 一、问题代码和报错 1-1 问题代码模拟 引发这个问题的三大要素分别是: 事务注解任意数据库操作数据库操作后执行耗时业务(耗时超过数据库配置的超时时间) //1.这里是问题的核心之一…

vue+element实现电商商城礼品代发网,商品、订单管理

一、项目效果图 1.首页 2.登录 版本2: 3.注册 4.找回密码 5.立即下单 6.商品详情 7.个人中心-工作台 8.个人中心-订单列表 9.订单中心-包裹列表 10.个人中心-工单管理 11.我的钱包 12.实名认证 13.升级vip 14.个人中心-推广赚钱 二、关键源码 1.路由配置 impor…

【C语言】预处理详解

前言 在上一篇博客中,我们了解了代码是如何执行的,简单介绍了编译中预处理步骤,在这篇博客中我们将详细了解预处理。 文章目录 一、预定义符号二、#define定义2.1 定义常量2.2 定义宏2.3 创建代码片段 三、#和##运算符3.1 字符串化操作符#3.2…

【C++】:关键字+命名空间+输入输出+缺省参数+函数重载+引用

【本节目标】 C关键字命名空间C输入&输出缺省参数函数重载引用 C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等 熟悉C语言之后,对C学习有一定的帮助,本章节主要目标&#xff…

ROS 摄像头标定-camera_calibration

摄像头这种精密仪器对光学器件的要求较高,由于摄像头内部与外部的一些原因,生成的物体图像往往会发生畸变,为了避免数据源造成的误差,需要针对摄像头的参数进行标定。 ROS官方提供了用于双目和单目摄像头标定的功能包—camera_cal…

Hadoop分布式集群搭建教程

目录 前言环境准备一、创建虚拟机二、虚拟机网络配置三、克隆虚拟机四、Linux系统配置五、Hadoop的部署配置六、Hadoop集群的启动Bug解决参考文章 前言 大数据课程需要搭建Hadoop分布式集群,在这里记录一下搭建过程 环境准备 搭建Haoop分布式集群所需环境&#x…

数据结构和算法——线性结构

文章目录 前言线性表顺序表链表合并有序链表反转链表 队列循环队列双端队列资源分配问题 栈共享栈表达式求值递归处理迷宫问题 串串的模式匹配BF算法KMP算法next数组的求解next数组的优化 前言 本文所有代码均在仓库中,这是一个完整的由纯C语言实现的可以存储任意类…

Mybatis--动态sql

XML映射文件(简单的SQL用注解,复杂的用xml) 规范: XML映射文件的名称和Mapper接口名称一样(同包同名)注意:不能直接用.创建文件夹,用/分层 xml映射文件的namespace属性为mapper接口全限定名一致…

Python数据分析实战-实现T检验(附源码和实现效果)

实现功能 T 检验(Students t-test)是一种常用的统计方法,用于比较两个样本之间的均值是否存在显著差异。它可以应用于许多场景,其中一些常见的应用场景包括: A/B 测试:在市场营销和用户体验研究中&#xf…

迁移Linux服务器用户数据(将一个服务器的Linux用户数据迁移到另一个Linux服务器用户的流程)

文章目录 1、打包源Linux服务器用户的数据2、发送源Linux服务器用户的数据3、查看目的服务器用户接受到的数据 1、打包源Linux服务器用户的数据 先来到根目录,再使用tar命令打包数据:tar czvf root.zip.gz ./* 2、发送源Linux服务器用户的数据 在根目…

探秘PMP和六西格玛的不同:哪一个能为你的职业生涯加分?

今天,我们将带你深入了解一项相对冷门但价值不菲的证书——六西格玛黑带。 可能你曾听说过PMP,但相比之下,六西格玛黑带的资源分享似乎较少,考试内容却更为广泛深入。这里,让我为你详细解析这一考试,带你进…

Python操作Hive数据仓库

Python连接Hive 1、Python如何连接Hive?2、Python连接Hive数据仓库 1、Python如何连接Hive? Python连接Hive需要使用Impala查询引擎 由于Hadoop集群节点间使用RPC通信,所以需要配置Thrift依赖环境 Thrift是一个轻量级、跨语言的RPC框架&…

latex如何对.pdf格式的图片实现裁剪

目录 问题描述: 问题解决: 问题描述: 在使用draw.io进行绘图,导出的时候不知道为什么周围会有留白,比如下图: 在导入latex的时候,会因为两侧的留白导致整张图片缩小。 如果直接进行裁剪.pdf&a…

简要归纳UE5 Lumen全局光照原理

文章目录 一、Jim kajiya老爷子的渲染方程:二、工程上的实时全局光照技术:三、Lumen的解决办法:1、用距离场 Distance Field(SDF)判断光线和三角面相交:2.表面缓存(Surface Cache) 四…

《论文阅读:Dataset Condensation with Distribution Matching》

点进去这篇文章的开源地址,才发现这篇文章和DC DSA居然是一个作者,数据浓缩写了三篇论文,第一篇梯度匹配,第二篇数据增强后梯度匹配,第三篇匹配数据分布。DC是匹配浓缩数据和原始数据训练一次后的梯度差,DS…

Apache Shiro 漏洞复现

文章目录 Apache Shiro 漏洞复现1. Apache Shiro 1.2.4 反序列化漏洞1.1 漏洞描述1.2 漏洞原理1.3 漏洞复现1.3.1 环境启动 1.4 漏洞利用1.5 修复方案 Apache Shiro 漏洞复现 链接地址:Vulhub - Docker-Compose file for vulnerability environment 1. Apache Shi…