l 虚拟用户(Virtual User):模拟真实业务逻辑步骤的虚拟用户,虚拟用户模拟的操作步骤都被记录在虚拟用户脚本里。Vuser脚本用于描述Vuser在场景中执行的操作
l 事务(Transaction):拥有完整意义的一次业务请求或交易,是一些步骤的集合。例如,充值业务可以看成一个事务
l TPS(Transaction Per Second):系统每秒钟所能处理的交易或事务数,是衡量系统处理能力的重要指标
l 并发(Concurrency):所有用户在同一时刻发起相同的业务请求,用于测试系统对并发操作的处理能力
l 用户并发数量:在同一时刻与服务器进行交互的用户数量
l 请求响应时间:从发出请求到得到响应这一过程的耗时
l 事务响应时间:事务可能由一系列的请求组成,事务响应时间是针对用户而言,用于说明业务响应时间
l 思考时间(Think Time):用户操作过程中,每个请求之间的间隔时间
l 吞吐量:指在一次性能测试过程中,网络上传输数据流量的总和。吞吐量/传输时间=吞吐率
l 吞吐率(Throughput):单位时间内网络上传输的数据流量,某些情况下也可以指单位时间内所处理的请求数(requests/second)
l 点击率(Hit Per Second):用户每秒钟向服务器提交的HTTP请求数,是WEB应用的特有指标
l 资源利用率:指对不同系统资源的使用程度,如服务器CPU的利用率、磁盘利用率,主要针对WEB应用服务器、操作系统、数据库服务器和网络等,是分析系统性能指标并调优的重要依据
l 压力测试(Stress Testing):对系统不断施加压力的测试,是通过确定一个系统的瓶颈或不能接收用户请求的性能点,来获得系统能够提供的最大服务级别的测试
l 负载测试(Load Test):通过在被测系统上增加压力,直到性能指标达到极限(响应时间超过预定指标或者某种资源利用率达到饱和),负载测试可以用来找到系统的处理极限,为系统调优提供依据。
l 并发测试:用来测试多用户同时访问系统(或模块,或数据,或做同一种业务)时是否存在性能问题
l 大数据量测试:针对系统新建记录或统计查询等业务进行的大数据量测试,或针对大量存量数据而进行的性能测试
l 可靠性测试:测试系统在一定压力下长时间运行是否稳定可靠,用于验证系统是否可以长时间对外提供稳定可靠的服务
性能测试工程师的主要任务是发现并定位性能问题,对于问题解决,通常由性能测试工程师、开发人员、系统管理员和DBA等来共同完成。性能调优可以从以下一些方面考虑:
l 应用程序代码:很多性能问题由程序代码导致,所以可以检查相关模块代码,确认是否有性能瓶颈
l 数据库配置:数据库配置可能会导致系统运行缓慢,对于oracle等大型数据库,可能需要DBA进行正确的参数调整以提供更好服务
l 硬件设置:磁盘I/O速度、内存大小等都可能影响系统性能
l 网络:网络负载过重会导致网络延迟或网络冲突
l 操作系统配置:操作系统配置不合理也可能引发性能问题
-----------------------------------------------------LoadRunner-----------------------------------------------------------
以安装LoadRunner 12.5版本为例:
l 双击文件LoadRunner_x64.msi,弹出安装向导
l 单击“下一步”
l 勾选“我接受许可协议中的条款”,按需更改安装路径,单击“安装”
l 等待安装,弹出HP身份验证设置
l 去勾选“指定LoadRunner代理将要使用的证书”,单击下一步
l 单击“完成”
l 弹出“LoadRunnerLicense Utility”页面,单击“close”
l 弹出NetworkVirtualization安装,单击安装
l 单击“完成”
LoadRunner是用于测试应用程序性能的HP解决方案。LoadRunner 向整个应用程序施压,从而找出并确定潜在的客户端、网络和服务器瓶颈。LoadRunner包括:
l VuGen:它是用于创建Vuser脚本的HP工具。可以使用VuGen通过录制用户执行的典型业务流程来开发Vuser脚本。使用此脚本可以模拟实际情况
l Controller:可以从单一控制点轻松有效地控制所有Vuser,并在测试执行期间监控场景性能
l Analysis:在HP LoadRunner Controller 或HP PerformanceCenter 内运行负载测试场景后可以使用Analysis。Analysis 图可以帮助您确定系统性能并提供有关事务及Vuser的信息。通过合并多个负载测试场景的结果或将多个图合并为一个图,可以比较多个图。
Vuser类型:基于协议的Vuser、基于单元测试的Vuser、GUI Vuser
创建Vuser脚本的工作流:
l 使用VuGen 录制基本脚本。
l 通过在脚本中添加控制流语句和其他LoadRunner API 函数,增强基本脚本。
l 配置运行时设置。包括迭代、日志和计时信息,这些设置规定了脚本运行期间Vuser如何工作。
l 以独立模式运行脚本, 验证脚本的功能。
l 确认脚本可正常工作后, 便可将其集成到环境中:LoadRunner 场景、Performance Center 负载测试或Business Process Monitor 配置文件
ALM的作用:
VuGen works together with HP ApplicationLifecycle Management (ALM). ALM provides efficient functionality for storingand retrieving Vuser scripts, scenarios, and analysis results. You can storescripts in an ALM project and organize the scripts into unique groups.
-------------------------------------------------------创建-------------------------------------------------------------------
创建Vuser脚本包含下面的步骤:
创建Vuser脚本:
1. 打开VuGen 并选择文件> 新建脚本和解决方案。
2. 在创建新脚本对话框中, 从类别列表中选择单协议或多协议。
3. 从协议列表中选择协议。
4. 在脚本名称框中, 输入脚本的名称。
备注:不要将脚本命名为init、run 或end,因为VuGen 会在内部使用这些名
称。
5. 单击创建以创建Vuser 脚本。
Vuser脚本构成:
每个Vuser 脚本至少包含三部分: vuser_init、一个或多个操作部分和vuser_end。运行
Vuser 脚本的多次迭代时, 仅重复脚本的Actions 部分;vuser_init 和vuser_end 部分不会
重复
-------------------------------------------------------录制-------------------------------------------------------------------
FAQ:解决LoadRunner 12.5打开IE浏览器之后,IE显示“InternetExplorer 无法显示该网页”的问题
l 打开录制界面
l 单击“RecordingOptions”
l 进入Network >Mapping and Filtering,选择“Port mapping”中,“Capture level”的值为“WinINet level data”,单击“OK”保存
-------------------------------------------------------关联-------------------------------------------------------------------
为什么要做关联:
当录制的脚本包含动态值(例如会话ID)且无法成功回放时, 使用关联。要解决此问题,
需将动态值转换为变量,才能够成功回放脚本。例如,许多应用程序和网站都使用当前日期和时间来识别会话。如果尝试回放在此类网站上录制的脚本,脚本可能会失败,因为当前时间不同于录制的时间。关联数据可以保存动态数据并在整个场景运行期间使用这些数据。
哪些需要关联:
生成差异列表后, 需要确定要关联哪些差异。如果错误地关联了不需要关联的差异,
可能对回放产生不利影响。以下字符串最有可能需要关联:
l 登录字符串。带有会话ID 或时间戳等动态数据的登录字符串。
l 日期/时间戳。使用日期或时间戳或者其他用户凭据的任意字符串。
l 常见前缀。后跟字符串的常见前缀, 如SessionID 或CustomerID。
如果您不确定某个差异是否应关联, 请仅关联该差异, 然后运行脚本。检查回放日
志,确定问题是否已解决。
关联与参数化
当希望获取一个值并将其转为变量以便脚本更加贴近现实时,可以使用参数化。例如,如果在网站上填写表单,您可能希望更改输入特定字段的值。
当录制的脚本包含动态值(例如会话ID)且无法回放时,使用关联。要解决此问题,需将动态值设为变量,才能够成功回放脚本。
如何关联脚本-WEB(手动):
l 找到需要关联的字符串及其详细信息
n 使用边界识别模式
n 使用XPATH识别模式
l 添加web_reg_save_param_*函数
n web_reg_save_param_ex:此函数在Web 步骤中的服务器响应中搜索后跟字符串的左边界和右边界, 并将字符串保存到函数实参中指定的形参内。找到指定数目的对象后, web_reg_save_param_ex 不再搜索其他响应
n web_reg_save_param_xpath:此函数搜索Web 步骤中服务器响应的指定Xpath。将位于指定Xpath 中的字符串保存到函数实参中指定的形参内。
l 使用参数替换数据:从VuGen主窗口中选择编辑> 替换,以显示“搜索和替换”对话框。在整个脚本中搜索动态数据,并将其替换为参数。为参数赋予任意名称,并用括号括起:{参数名}。
如何搜索需要关联的值:
l 两次录制相同的脚本并保存,然后比较这两个脚本,寻找差异
l 回放日志搜索:搜索扩展回放日志中是否有相同的响应。查看此响应在相同的边界内是否包含与原始可疑字符串不同的字符串。如果是,则此字符串需要关联
-------------------------------------------------------回放-------------------------------------------------------------------
运行时设置:运行时设置控制Vuser 脚本回放的方式。通过双击解决方案资源管理器中的运行时设置节点(Runtime Settings)访问所需的运行时设置
FAQ:解决报错“vuser_init.c(34):Error -27774: Server "10.179.227.211" shut connection during attemptto negotiate SSL session [MsgId: MERR-27774]”
l 将如下代码加入到脚本中:web_set_sockets_option("SSL_VERSION","TLS");
l 参考:https://community.softwaregrp.com/t5/LoadRunner-Practitioners-Forum/Error-27774-Server-quot-shut-connection-during-attempt-to/td-p/561493
--以上问题解决之后,又出现以下问题:
FAQ:解决报错:Error -27776:SSL protocol error when attempting to connect with host"10.179.227.211" [MsgId:MERR-27776]
解决办法:进入菜单Replay > Runtime Settings > Internet Protocol > Preferences> 勾选“Use WinInet replay instead of Sockets(Windows only)”
-------------------------------------------------------调试-------------------------------------------------------------------
创建Vuser 脚本后,回放脚本以验证该脚本是否无误运行。使用VuGen 的调试功能,可以识别和解决脚本中的错误。可从VuGen 工具栏访问其中大多数脚本调试功能。
错误处理:
可以指定脚本执行期间Vuser 如何处理错误。默认情况下,当Vuser 检测到错误时,Vuser 将停止执行脚本。可以使用以下某种方法指示Vuser 在发生错误时继续执行下一次迭代:
l 使用运行时设置。可以指定出现错误时仍继续运行时设置。此设置将应用于整个Vuser 脚本。
l 可以使用lr_continue_on_error函数覆盖脚本某个部分的出现错误时仍继续运行时设置。lr_continue_on_error函数可以控制Vuser脚本特定段的错误处理。要标记段,请将其放在lr_continue_on_error(1);和lr_continue_on_error(0);语句之间。新错误设置将应用于这些语句包含的Vuser 脚本段
-------------------------------------------------------增强-------------------------------------------------------------------
此任务说明了要为负载测试准备Vuser脚本而能对该脚本执行的其他操作。此任务中的
所有项都是可选的。
插入集合点:
您可以通过创建集合点来同步Vuser,使其在同一时刻执行任务。当某个Vuser到达集合点时,它将等待, 直到参与该集合的全部Vuser都到达集合点。当指定数目的Vuser到达后,将释放Vuser
事务概述:
可以定义事务以评估服务器的性能。每个事务计算服务器响应指定的Vuser 请求时所用的时间。这些请求可以是等待响应单个查询等简单任务,也可以是提交多个查询并生成报告等复杂任务。要评估事务,请插入Vuser 函数来标记任务的开始(lr_start_transaction)和结束(lr_end_transaction)
在LoadRunner中输出变量和参数:
// 设置变量
char * hello = "hello";
char * gname =lr_get_host_name();
// 变量转参数
lr_save_string(gname, "GN");
// 设置参数
lr_save_string("1", "test");
// 输出变量
lr_output_message("%s", hello);
// 输出参数
lr_output_message("%s", lr_eval_string("{test}"));
lr_output_message("%s", lr_eval_string("{GN}"));
增加校验点:
常用的方式是利用web_reg_find()函数查找界面元素,然后判断是否成功。使用该函数,查找不到不会终止脚本执行,但是会记录查找结果,如果查找不到脚本会标记失败。The web_reg_find functionregisters a request to search for a text string on a Web page retrieved by thenext action function. 使用方式如下:
l 在actionfunction之前插入查找语句:web_reg_find("Text=Employee","SaveCount=EmployeeCount", LAST);
l 执行actionfunction
l 检查:lr_output_message("EmployeeCount:%s",lr_eval_string("{EmployeeCount}"));
if(atoi(lr_eval_string("{EmployeeCount}")) == 1){
lr_output_message("Operationsuccessfully");
} else {
lr_error_message("Operationfailed!");
}
其他校验方式:
l 使用web_gloabl_verification()函数校验,如果校验失败,脚本执行终止
web_global_verification("Text/IC=Root Operator",
"Fail=NotFound",
"ID=FindAcme", LAST );
l 使用HttpRetCode= web_get_int_property(HTTP_INFO_RETURN_CODE);检查响应报文的返回码(200)
---------------------------------------------------------------------------------------------------------------------------------
创建参数:
可以从编辑器和步骤导航器窗格中执行此步骤。
选择要参数化的值,右键单击并选择使用参数替换。
文件/表/XML 参数的数据分配方法:
使用文件中的值时,可以通过VuGen指定将源数据分配给参数的方式。以下数据分配
方法可用:
顺序
按顺序将数据分配给Vuser。当运行的Vuser访问数据表时,它将获取下一行可用的数据。如果数据表中的值不够,VuGen将返回表中的第一个值,并在循环中继续执行直至测试结束。
随机
每次请求新的参数值时从数据表中分配一个随机值。
在LoadRunner 中运行场景或在HP Business Process Monitor中运行脚本时,可以指定随机顺序的种子数。每个种子值代表执行测试时所用的一个随机值顺序。当您使用此种子值时,将为场景中的Vuser分配相同顺序的值。如果在执行测试时发现问题并希望使用相同的随机值顺序重复测试,可启用此选项。
唯一
给每个Vuser的参数赋一个唯一的序列值。请确保表中有足够的数据以供所有的Vuser及其迭代使用。如果有20 个Vuser并希望执行5 次迭代,则表中必须包含至少100 个唯一值。如果用完了唯一值,VuGen 将根据您在当超出值时字段中所选的选项来执行操作
Countroller概述:
Controller是LoadRunner的工具,用于创建和控制LoadRunner场景。有一个场景负责定义每个测试会话中发生的事件。它控制要模拟的用户数、这些用户执行的操作以及用于运行模拟场景的计算机。您可以使用场景创建负载测试,来检查服务器的可靠性和承载能力
在Controller中,可以定义大量Vuser(GUI Vuser除外),通过直接向服务器提交输入以在服务器上生成负载。Vuser不操作客户端应用程序;它们使用LoadRunner API函数访问服务器。这些API函数模拟实际应用程序的输入。
Controller工作流:
LoadRunner代理:
要最大化测试范围,可将Vuser分配到多个Load Generator计算机。Load Generator计算机上是要安装远程代理调度程序(进程)和LoadRunner代理的计算机。在运行LoadRunner安装时,可指定仅安装这些组件。通过这些组件,Controller可以与Load Generator计算机进行通信。
LoadGenerator - 概述
Load Generator是在场景中运行Vuser 脚本的计算机。在LoadGenerator上运行的每个Vuser 脚本有一个Vuser。每个Load Generator可以运行多个Vuser 脚本,因此有多个Vuser。当这些Vuser运行时,它们会在您的系统上生成负载,从而允许您分析负载下的系统。
HPService Virtualization 集成- 概述
一些业务流程包含不可用的服务。例如,您的业务流程可能会包含正在开发的或导致成本的服务,例如通过第三方供应商处理信用卡。为便于对这些业务流程进行负载测试, LoadRunner Controller与HP Service Virtualization集成。通过该集成,您可以运行模拟实际服务的虚拟服务。通过使用虚拟服务,您可以使用反映数据模型1和性能模型2的模拟服务对实际服务进行负载测试和替换。
1由服务发送到服务器和预期响应的数据的定义。可以为一个服务定义多个数据模型。
2服务的预期性能( 例如响应时间) 的定义。
Analysis概述:
它是HP提供的用于收集和提供负载测试数据的工具。在执行负载测试场景时,Vuser可以在执行事务时生成结果数据。Analysis工具提供图和报告以便于您查看和了解数据。每个图都具有用于描述图中度量的图例。还可以按照特定字段对数据进行筛选和排序。
启动Analysis:
Analysis 可以作为独立的应用程序打开, 也可以直接从Controller 打开。要将Analysis作
为独立的应用程序打开
要从Controller直接打开Analysis,请单击工具栏上的Analysis 按钮或选择结果> 分析结果。此选项仅在运行负载测试场景后才可用。Analysis 会从当前场景中提取最新的结果文件,并用这些结果打开新会话。
常用的分析图:
Summary示例: