2023年12月13日发(作者:)

LoadRunner性能测试手册

目录

目录 .................................................................................... 1

1. LoadRunner简介 ........................................................... 2

2. LoadRunner原理 ........................................................... 3

3. 性能测试介绍 ................................................................... 3

4. 性能测试相关术语 ............................................................ 4

5. LoadRunner安装 ........................................................... 5

nner的基本使用 .................................................... 6

6.1打开Virtual User Generator ..................................... 6

6.2 打开Controller ........................................................ 7

6.3打开Analysis ............................................................ 7

6.4网关测试常用设置 ....................................................... 7

6.4.1设置迭代 ........................................................... 7

6.4.2 日志 ................................................................. 8

6.4.3 思考时间 ........................................................... 8

6.4.4 运行方式 ........................................................... 8

6.4.5参数化 ............................................................... 9

nner常用函数 ...................................................... 10

8.压测场景设置 .................................................................. 18

8.1 增加负载生成器 ....................................................... 18

第 1 页 8.2压测时场景设置 ........................................................ 19

8.3基准测试场景设置 ..................................................... 19

8.4单场景负载测试 ........................................................ 20

8.5 稳定性测试 ............................................................. 20

8.6压测开始 ................................................................. 21

9.报告分析 ......................................................................... 22

9.1生成报告 ................................................................. 22

9.2重要图表分析 ........................................................... 23

9.2.1 结果摘要 ......................................................... 23

9.2.2响应时间 ......................................................... 24

9.2.3 TPS ............................................................... 24

1.

LoadRunner简介

LoadRunner,是一种预测系统行为与性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认与查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能与加速应用系统的发布周期。 LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。

LoadRunner由 Analysis 、Controller 、Virtual User

Generator 三大模块组成,功能分别为录制脚本、创建运行及监视场景、分析测试结果。

第 2 页 2.

LoadRunner原理

loadrunner会自动监控指定的URL或应用程序所发出的请求及服务器返回的响应,它做为一个第三方(Agent)监视客户端与服务器端的所有对话,然后把这些对话记录下来,生成脚本,再次运行时模拟客户端发出的请求,捕获服务器端的响应。

3.

性能测试介绍

狭义的性能测试主要用于描述常规的性能测试,是指通过模拟生产运行的业务压力或用户使用场景来测试系统的性能是否满足生产性能的要求。

广义的性能测试则是压力测试、负载测试、强度测试、并发(用户)测试、大数据量测试、配置测试、可靠性测试等与性能相关的测试统称。

目前网关主要进行四种测试执行方法:基准测试、单场景负载测试、混合场景负载测试、稳定性测试。

基准测试:使用负载模拟工具编写从客户端向应用服务器发送交易请求,并接收返回结果的脚本,在系统无压力情况下重复100次,取业务方法的平均响应时间作为衡量指标。

单场景负载测试:使用LR向系统发生业务请求并接收返回结果的脚本,使用逐层递增的并发压力进行测试,找到单交易的性能拐点。

混合场景负载测试:混合交易场景测试的目的是为了验证需求提第 3 页 出的性能需求,结合实际可能的高压力场景,较全面的检查系统的性能表现,其中包括稳定性测试。混合场景测试采用几个不同的并发用户数对系统发起压力,检验系统性能拐点。

稳定性测试:针对多个交易,使用负载模拟工具编写从客户端向应用服务器发送交易请求,并接收返回结果的脚本,按照峰值负载85%的并发用户量执行性能测试,执行时间长度设置为24小时,检测作为响应时间衡量指标。通过稳定性测试,可以获取多个交易在长时间的负载级别下,最大响应时间、最小响应时间、平均响应时间、资源利用率的稳定性、交易成功率的稳定度。

4.

性能测试相关术语

目前网关性能测试常见的术语主要有并发、并发用户数量、事务响应时间、TPS、资源利用率等

并发:并发一般分两种情况。一种是狭义的并发,即所有的用户在同一时刻做同一件事情或操作,这种操作一般针对同一类型的业务;另外一种并发是广义的并发。这种并发与狭义的并发的区别是尽管多个用户对系统发出了请求或进行了操作,但是这些请求或操作可以是相同的,也可以是不同的。可以看出,广义的并发是包含狭义的并发的,而且广义的并发更接近用户的实际使用情况,因此在网关的性能测试中使用广义的并发即可。

并发用户数:在同一时刻与服务器进行交互的在线用户数量。这些用户的最大特征是与服务器发生了交互,这种交互既可以是单向传第 4 页 送数据的,也可以是双向传送数据的。

响应时间:请求响应时间是指从客户端发出请求到得到响应的整个过程的时间。这个过程从客户端发送一个请求开始计时,到客户端接到从服务器端返回的响应结果计时结束。请求响应时间的分解如图所示。

从图可以看出,请求响应时间为“网络响应时间”与“应用程序与系统响应时间”之与,具体由7个部分组成,即(N1+N2+N3+N4)+(A1+A2+A3)。

TPS:每秒钟系统能够处理的交易或事务的数量。它是衡量系统处理能力的重要指标。TPS是LoadRunner中重要的性能参数指标。

资源利用率:资源利用率指的是对不同系统资源的使用程度,例如服务器的CPU利用率、磁盘利用率等。资源利用率是分析系统性能指标进而改善性能的主要依据,因此,它是Web性能测试工作的重点。

5.

LoadRunner安装

1. 运行,点击“LoadRunner完整安装程序”

2.点击“下一步”

3.选择“我同意”

4.点击“下一步”

5.点击“下一步”

6.点击“下一步”

第 5 页 7.安装中

8.完成

9.破解

a、用LR8.0中的、覆盖LR11安装目录下“bin”文件夹中的对应文件;b、运行;

c、然后使用老的注册码就可以使用了;global-100:

AEAMAUIK-YAFEKEKJJKEEA-BCJGI

web-10000:

AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB

nner的基本使用

6.1打开Virtual User Generator

不需要录制,点击“cancel”

进入脚本编辑页面

新建的脚本编辑页面左边导航栏中有3个函数框架:vuser_init(),Action(),vuser_end()。

Vuser_init:虚拟银行的初始化函数,一般将用户初始化的操作放在这里,如登录操作、分配内存等,而且在做vuser_init的时候,Contrioller的Vuser状态区域会显示initialize状态。

Action:是虚拟用户要做的业务,用户的业务操作,也就是测试内容的主体。在VU里设置迭代循环选项时,只针对Action有效, Action第 6 页 会被重复运行,而init与end部分则在脚本的运行过程中只会运行一次。

vuser_end:与vuser_init相对应, vuser_end做守卫工作,在vuser_init中如果是登录, vuser_end里就要做退出登录;在vuser_init中如果是申请内存,比如使用了malloc函数,在vuser_end中就应该释放内存,使用free函数。例如:

callocOrFreeMem(0)。

6.2 打开Controller

选择脚本

6.3打开Analysis

File-open

6.4网关测试常用设置

6.4.1设置迭代

Vuser-RunTime Setting

注:只迭代RUN部分 Init、End部分不会迭代

选择“Run Logic”节点,在此节点中,可以设置迭代的次数,或连续运行过程中重复活动的次数。

第 7 页 6.4.2 日志

经常用于调试脚本

【Extended log】扩展日志:

【Parameter substitution】脚本运行时,在【Replay log】显示参数信息、参数值;

【Data returned by server】记录服务器返回的所有数据;

【Advanced trace】多用于脚本调试,记录VU在运行期间发送的所有函数信息。

“日志”设置指示运行测试时要记录的信息详细级别。开发期间,出于调试目的,您可以选择启用某级别的日志记录,但验证脚本可以正常工作后,仅可以启用或禁用错误日志记录。

6.4.3 思考时间

思考时间:Vuser 思考时间模拟实际用户在不同操作之间等待的时间。在实际测试中一般忽略

6.4.4 运行方式

线程运行方式:如果选择按照线程方式运行,在默认情况下,controller为每50个用户仅启动一个mmdrv进程,而每个用户都按线程方式来运行,这些线程用户将共享父进程的内存段,这就节省第 8 页 了大量内存空间,从而可以在一个负载生成器上运行更多的用户。

进程运行方式:如果选择按照进程方式运行,每个用户都将启动一个mmdrv进程,多个mmdrv进程会占用大量内存及其他系统资源,这就限制了可以在任一负载生成器上运行的并发用户数的数量,因为负载机的资源(内存及其他系统资源)是有限的。

当负载机资源足够时,建议使用进程比较真实模拟用户场景

6.4.5参数化

点击下图中的图标

点击“NEW”

使用最多的三种参数类型:

File: 需要在属性设置中编辑文件,添加内容,也可以从现成的数据库中取数据

DateTime: 在需要输入日期/时间的地方,可以用DateTime 类型来替代。其属性设置也很简单,选择一种格式即可。当然也可以定制格式。

Random Number:随机数。很简单。在属性设置中可以设置产生随机数的范围。

其中

Select next row:

Sequential:每个VU按照顺序读取。每一个虚拟用户都会按照相同的顺序读取。

第 9 页 Random:每个VU随机读取一个。

Unique:每个VU顺序取唯一的值。注意:使用该类型必须注意数据池中数据充足。

Same Line As 某个参数(比如Name):与前面定义的参数Name

取同行的记录。通常用在有关联性的数据上面。

Update value on:

Once 在所有的反复中都使用同一个值

each iteration 每次反复都要取新值

each occurrence 只要发现该参数就要重新取值,也就是如果一个action中有多个该参数,每遇到一个就要重新取一个值。

nner常用函数

web_custom_request

web_custom_request函数可以用于完全自定义向服务端发送的request。

第 10 页

web_custom_request("buildMacUnify",

"URL={HostAddress}/buildMacUnify",

"Method=POST",

"TargetFrame=",

"Resource=0",

"RecContentType=text/html",

"Referer={HostAddress}/testpage/test/",

"Snapshot=",

"Mode=HTML",

"EncType=application/x-www-form-urlencoded;

charset=UTF-8",

"Body=MERCHANTID=000&ORDERSEQ={orderNo}&ORDERDATE={Date}&ORDERAMOUNT=1&ORDERREQTRANSEQ={orderReqNo}&ACCORGCODE=&MERCHANTURL=y/&BACKMERCHANTURL=127.0.0.1:8030/&ATTACH=&BUSICODE=0001&PRODUCTNO=&CLIENTIP=127.0.0.1",

1.

2.

3.

LAST);

URL:页面地址。

Method:页面的提交方式,POST或GET。

TargetFrame:当前链接或资源所在Frame的名称。除了Frame的名字,还可以指定下面的参数:

_BLANK:打开一个空窗口。

_PARENT:把最新更改过的的Frame替换为它的上级。

_SELF:替换最新更改过的的Frame。

_TOP:替换整个页面。

第 11 页 4.

Resource: 指示URL是否属于资源。1 是;0 不是。设置了这个参数后,RecContentType参数被忽略。“Resource=1”,意味着当前操作与所在脚本的成功与否关系不大。在下载资源 时如果发生错误,是当作警告而不是错误来处理的;URL是否被下载受“Run-Time Setting—Browser Emulation--Download

non-HTML resources” 这个选项的影响。此操作的响应信息是不做为HTML来解析的。“Resource=0”,表明此URL是重要的,不受发送请求(RTS)的影响,在需要时 也会解析它。

5.

RecContentType:录制脚本时响应头的内容类型。例如text/html、 application/x-javascript等。

6.

Referer:当前页面关联的页面。如果已经显式指定了url的地址,此项可以省略。

7.

8.

EncType:编码类型。

Mode:两种录制级别HTML、HTTP。HTML级别--在当前Web界面上录制直观的HTML动作。以一步步的web_url、web_link、

web_image、web_submit_form来录制这些动作。VuGen仅仅录制返回HTML页面的请求,不处理脚本与应用程序。HTTP级别 --VuGen把所有的请求录制为web_url指令,不生成web_link、web_image、web_submit_form这些函数。这种方法 更为灵活,但是生成的脚本不够直观。

9.

Body:请求体。不同的应用中,请求体分别通过Body、BodyBinary或者BodyUnicode参数来传递。请求体可以只使第 12 页 用其中一个参数,也可以使用一连串的分开的参数组成多请求体。

web_submmit_data

web_submit_data函数处理无状态或者上下文无关的表单提交。它用来生成表单的GET或POST请求,这些请求与Form自动生成的请求是一样的。发送这些请求时不需要表单上下文。

例:

"Action={HostAddress}/accountCounter/queryAvaweb_submit_data("queryAvailableBalance",

ilableBalance",

"Method=POST",

"TargetFrame=",

"RecContentType=application/json",

"Referer={HostAddress}/",

"Snapshot=",

"Mode=HTML",

ITEMDATA,

"Name=product", "Value={Phone}", ENDITEM,

"Name=accountKeyType", "Value=02", ENDITEM,

"Name=secrProductNo","Value=3454733847614F595442694873347454646E556469513D3D", ENDITEM,

"Name=merId", "Value=000",

第 13 页 ENDITEM,

1.

LAST);

Action:Form中的ACTION属性,指定了完成Form中的操作用到的URL。

2.

3.

Method:表单提交方法:POST或GET(默认是POST)。

ITEMDATA:数据域与属性的分隔符。

web_reg_save_param

关联(correlation):脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得 到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。也是把脚本中某些写死的数据, 转变成动态的数据。

int web_reg_save_param(const char *ParamName,

Attributes>, LAST);

1.

2.

ParamName: 存放得到的动态内容的参数名称

LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写

3.

RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写

例:

web_reg_save_param("resCode",

"LB=resCode = '",

第 14 页

"RB='",

LAST);

lr_start_transaction

lr_start_transaction 函数标记事务的开始。要指明要分析的事务,请使用函数 lr_start_transaction 与lr_end_transaction。应紧接事务前后插入这些函数。

定义:

int lr_start_transaction ( const char * transaction_name );

例子:

lr_start_transaction("download");

lr_end_transaction

lr_end_transaction 函数标记事务的结束,并录制执行事务所用的时间量。要指明希望分析的事务,请在事务之前放置

lr_start_transaction函数,并在事务之后放置

lr_end_transaction 函数。

定义:

int lr_end_transaction (const char * transaction_name, int

status ) ;

例子:

lr_end_transaction("download", LR_PASS);

lr_end_transaction("download", LR_FAIL);

lr_end_transaction("download", LR_AUTO);

第 15 页 lr_eval_string

lr_eval_string 函数在评估任何嵌入的参数之后返回输入字符串。如果字符串实参 (argument) 只包含一个形参 (parameter),该函数返回形参的当前值。

这个函数主要用来取出某个参数的值。在Loadrunner中,对于参数替换,是无法在除了操作函数以外直接使用参数的,必须将参数放入这个函数才能表示该参数的值。

定义:

char * lr_eval_string (const char * instring );

例子:

begin_time= lr_eval_string("{TIME}"); //取出时间参数在本次迭代的值,并存入begin_time

lr_save_string

lr_save_string 函数将指定的以 null 终止的字符串赋给参数。该函数可用于关联查询。要确定参数值,请使用函数 lr_eval_string。

这个参数跟lr_eval_string正好相反,是将某个值存入参数当中,以在消息中使用该参数。

定义:

int lr_save_string (const char *param_value, const char

*param_name);

例子:

begin_time= lr_eval_string("{TIME}");

第 16 页 lr_save_string(begin_time,"begin_time1");

这里需要解释下,这样用的原因。因为TIME参数设置的是每次出现都做一次更新,每次调用TIME参数都会返回不同的值,为了使用最初的TIME值,则必须将TIME参数值取出来以后保存在另一个参数当中。

trcmp

比较 string1 与 string2 以确定字母排序的次序。字符串比较只能使用该函数,而不能直接用“==”进行比较。

定义:

int strcmp ( const char *string1, const char *string2 );

例子:

if (strcmp(lr_eval_string("{is_update}"),"Download")==0)

web_reg_find

该函数的作用是“在缓存中查找相应的内容”,常用参数及含义如下:

web_reg_find("Search=Body", //定义查找范围

"SaveCount=ddd", //定义查找计数变量名称

"Text=aaaa", //定义查找内容

LAST);

注意点及使用技巧:该函数写在要查找内容的请求之前,通常情况下写在如下六个函数之前:

web_castom_request();web_image();web_link();web_submit_data();web_submit_form();web_url();在该函数的参数中有个第 17 页 “SaveCount”,该参数可以记录在缓存中查找内容出现的次数,我们可以使用该值,来判断要查找的内容是否被找到。

if (atoi(lr_eval_string("{ddd}")) > 0){ //判断如果aaaa字符串出现次数大于0

lr_output_message("Log on successful."); }//在日志中输出Log

on successful

else{ //如果出现次数小于等于

lr_error_message("Log on failed"); //在日志中输出Log on failed

return(0); }

8.压测场景设置

8.1 增加负载生成器

1.点击

2.点击“Add”按钮,并输入添加负载生成器的地址

3.选择新添加的负载生成器,点击Connect按钮

第 18 页 PS:负载生成器上应用程序一定要先以管理员身份运行,连接成功后添加的负载生成器“status”为“ready ”4.同时在Scenario Groups中选择新添加的负载生成器

8.2压测时场景设置

点击Scenario Groups中的一般设置:

log中设置为不生成log

Think time中忽略思考时间

Miscellaneous中设置为错误继续运行、以进程方式运行

8.3基准测试场景设置

测试方法:

按钮

使用负载模拟工具编写从客户端向应用服务器发送交易请求,并第 19 页 接收返回结果的脚本,,在系统无压力情况下重复100次,取业务方法的平均响应时间作为衡量指标。

具体操作:

1.在Run-time Setting中将Run Logic 设置为100

2.设置为单用户,立即加压的方式

3.在运行时长中设置为Run until completion,这时设置的迭代次数才生效

8.4单场景负载测试

测试方法:

使用LR向系统发送业务请求并接收返回结果的脚本,使用逐层递增的并发压力进行测试,找到单交易的性能拐点。持续加压,保证Vuser全部正常登陆,如以5用户/3秒的速度加载;卸载同理,持续卸载,保证Vuser全部正常退出。

1.并发用户以5用户/3秒的速度加载

2.持续运行10分钟

3.同理,以5用户/3秒卸载

8.5 稳定性测试

测试方法:

针对多个交易,使用负载模拟工具编写从客户端向服务器发送交易请求,并接受放回结果的脚本,按照峰值85%的并发用户量执行第 20 页 性能测试,执行时间长度设置为24小时,检测作为响应时间衡量指标。通过稳定性测试,可以获取多个交易在长时间负载级别下,最大响应时间、最小响应时间、平均响应时间、资源利用率的稳定性、交易成功率的稳定性度。

1.所有并发用户选择瞬时加压

2.持续时间选择1天

3.并发用户卸载选择瞬时卸载

8.6压测开始

1.场景设置完成,选择RUN模块,并点击Start Scenario,开始运行场景。

2.场景Scenario Status中参数各含义:

Running Vusers:并发用户数

Elapsed Time:场景已运行的时间

Hits/Sencond:每秒点击数

Passed Transaction:成功的事务,可统计事务成功率。

Failed Transaction:失败的事务

Errors:错误数,点击3. View Graphs的用法:

1.右击图标坐标图空白处,点击“View Graphs”,可以根据需要在页面显示1、2、4、8个Graphs;

可查看错误原因

第 21 页 2.光标点击某一个坐标图,双击,可以放大查看某一个坐标图对应的性能指标;

3.在“Available Graphs”中选中一个要查看的性能指标,拖入右侧的坐标图中,就可以以坐标的形式查看场景运行时性能指标的运行曲线。

9.报告分析

9.1生成报告

场景运行完成后,点击查看更多的视图:

,可直接生成报告。

1.点击 “Graph”-->Add New Graph;

2.弹出“Open a New Graph”对话框,选中要查看的性能指标,点击“Open Graph”,即可打开并查看对应的图标坐标图。

生成Report

1.点击“Reports”-->“New Report”;

2.页面弹出一个“New Report”窗体,输入相关信息;

3.点击“Generate”,即可生成相关的测试报告。

保存成需要的Report格式。

第 22 页 9.2重要图表分析

9.2.1 结果摘要

LoadRunner进行场景测试结果收集后,首先显示的该结果的一个摘要信息,概要中列出了场景执行情况、“Statistics Summary(统计信息摘要)”、“Transaction Summary(事务摘要)”以及“HTTP Responses Summary(HTTP响应摘要)”等。以简要的信息列出本次测试结果。

场景执行情况

该部分给出了本次测试场景的名称、结果存放路径及场景的持续时间。从该图我们知道,本次测试从10:06开始,到10:16结束,共历时10分4秒。与我们场景执行计划中设计的时间基本吻合。

Statistics Summary(统计信息摘要)

该部分给出了场景执行结束后并发数、总吞吐量、平均每秒吞吐量、总请求数、平均每秒请求数的统计值,如图5- 4所示。从该图我们得知,本次测试运行的最大并发数为50,总吞吐量为523944522字节,平均每秒的吞吐量为866024字节,总的请求数为 132398,平均每秒的请求为218.84,对于吞吐量,单位时间内吞吐量越大,说明服务器的处理能越好,而请求数仅表示客户端向服务器发出的请求数,与吞吐量一般是成正比关系。

第 23 页 Transaction Summary(事务摘要)

该部分给出了场景执行结束后相关Action的平均响应时间、通过率等情况。从该图我们得到每个Action的平均响应时间与业务成功率。

9.2.2响应时间

为了方便每个流程所消耗时间的统计,脚本中将每个流程都定义为一个事务,将所有的流程也集合定义为一个事务-ALL。由图中可以看出,整体流程的响应时间为5.338S,根据响应时间2-5-8的原则,响应时间小于8S,符合预期的响应时间。同时,对于3-accountBackPay流程所消耗的平均响应时间为2.927S,占总时间54.8%,属于重点优化流程,具体代码中哪个方法所耗时间最长可通过dynatrace进行监控。

9.2.3

TPS

Transactions per Second (每秒通过事务数 /TPS )

“每秒通过事务数 /TPS” 显示在场景运行的每一秒钟,每个事务通过、失败以及停止的数量,是考查系统性能的一个重要参数。反映了系统在同一时间内能处理业务的最大能力,这个数据越高,说明系统处理能力越强。通过它可以确定系统在任何给定时刻的时间事务负载。

通过上图的Average可得出对于整体的流程平均TPS为9.693,经项目组讨论处于可接受的范围。

第 24 页