压力测试性能测试培训--LoadRunner11

性能测试

本文旨在通过介绍LR 的使用过程中的常见问题,LR 的具体功能介绍请参考LR 11帮助文档。

一、 测试方案

在性能测试之前,需要先收集性能测试需求,根据需求制定测试计划和测试方案。 测试方案应该包含测试目的、测试环境、测试方法、测试工具、监控方式、测试案例、风险分析等。

二、 脚本准备

1.1. 录制

选择脚本录制协议,该协议是指客户端和服务器之间的通讯协议。如下图所示:

点击Create ,弹出开始录制对话框,如下图所示:

选择浏览器、要录制的应用URL ,点击OK ,即可启动脚本录制。

在脚本录制过程中可以添加注释、集合点、事务、检查、思考时间等。

1、 对于具体应用,可以将登陆、退出操作分别放在init 、end 中,可以针对不同交易创建

多个Action 。Init 和end 是不进行迭代的。

2、 根据测试需求,可以精简脚本,将不需要的请求删除。

3、 将关注的交易适当添加事务,事务不能包含思考时间,事务名称要规范。

4、 如果系统对某个交易有高并发要求,例如能够承受1000人同时提交数据,这种情况下

可以将该交易定义为一个事务,在该事务前加集合点。

5、 脚本录制过程中思考时间一般比较长,可以适当的减少思考时间,并设置脚本运行时思

考时间。

1.2. 参数化

1、在脚本中,查找需要参数化的字段值,选择,右键选择“Replace With A Parameter”,弹出参数化窗口,如下图所示:

2、输入参数化名称,点击Properties ,打开Parameter Properties窗口。如下图所示:

3、点击Create Table-》OK-》Edit with Notepad,以记事本的方式打开参数列表,输入参数,保存后关闭记事本。

4、设置参数选取原则:

sequential :按照顺序一行一行的读取。每个虚拟用户都会按照相同的顺序读取。 random :在每次循环里随机的读取一个,但在循环中保持不变。

unique :唯一的数。

same line as ...:和前面定义的参数取同一行值。

each occurrence:在运行时,每遇到一次该参数,就会取一个新值。

each iteration:运行时,在每次循环都取同一个值。

once :运行时,每次循环,该参数只取一次值。 组合:

1) sequential+each iteration :每次迭代都顺序取值,当迭代次数大于参数取值列表时,从

头开始取值;

2) sequential+eachoccurence:参数每出现一次,都顺序取值,当参数出现次数大于参数取

值列表时,从头开始取值;

3) sequential+once:参数从取值列表取一次值,之后一直使用该值;

4)

random+each iteration:每次迭代都随机取值,一次迭代中相同参数取值相同;

5) random+each occurrence:参数每次出现都取随机值,一次迭代中相同参数取值不同;

6) random+once:随机取一次值,一次迭代中相同的参数都取一个相同的随机值;

7) unique+onceiteration+when out of value:每次迭代都顺序取值,当迭代次数大于参数的

取值列表时,按照when out of value策略处理;

8) unique+onceoccurrence+when out of value:参数每次出现都顺序取值,当参数出现次数

大于取值列表时,按照when out of value策略处理;

9) unique+once:参数列表取一次值,一直使用该值。

10) 用户名和密码一一对应的,密码选取“same line as 用户名”。

1.3. 检查点

通常采用校验返回报文内容来确认交易是否成功。

添加检查点方法:获取交易返回报文的某个字段的值,校验该字段的返回值是否正确。 示例:

1、 脚本录制完成后,运行一次脚本,查看返回报文:

2、 在报文的返回消息里,查找可以进行校验的值,注册函数,并进行校验:

1.4. 关联

当客户端的某个请求是随着服务器端的响应而动态变化的时候,需要用到关联。

关联即在脚本回放过程中,客户端发出的请求,通过关联函数所定义的左右边界值,在服务器响应的内容中查找,得到相应的值,以变量形式替换录制时的静态值,从而向服务器发出正确的请求。

例如,客户端发出登录页面的请求,服务器端得到该请求后,返回登录页面,同时动态生成一个session ID,当用户输入用户名密码请求登录时,该Session ID同时被发送到服务器端。如果该session ID在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败。此时该session ID就需要进行关联。

1、自动关联:

1) 脚本录制完成后,至少回放一次;

2) 按【F8】,LR 自动扫描需要关联的值;

3) 根据提示进行关联;

4) 关联完成后,在脚本中增加了一个web_reg_save_param函数。

5) 回放脚本,查看日志,检查关联是否成功。

2、 手动关联:

1) 录制脚本两遍,比较两个脚本的不同【Tools-Compare with Scripts】;

2) 定位该值是通过哪个请求返回的,然后定义参数获取该值;

3) 使用参数替换掉脚本中相应的值;

4) 回放脚本,查看日志,检查关联是否成功。

1.5. 调试

1、 设置调试断点(F9)

设置调试断点,脚本运行到断点处,自动停止运行,可以通过查看日志了解运行情况。

2、 单步执行脚本(F10)

通过单步执行,可以看到脚本中每一个函数执行情况,一般情况下结合断点一起使用。

3、 调试日志

脚本运行过程中,可以通过运行日志了解脚本运行情况。日志分为标准日志和扩展日志。标准日志只能获得标准的输出信息,扩展日志可以根据配置查看参数替换、服务器返回信息和高级跟踪信息。

通过选择Vuser->Run time settings->log->Extended log打开扩展日志。

4、可以在脚本中添加输出函数,在日志中查看输出信息,协助脚本调试。

1.6. 设置

1、 超时:

在压测过程中,因为并发量和网络原因,经常会出现交易超时的错误,所以在进行测试过程中建议将几个超时时间设置长一些。

路径:

Vuser->Run time settings->Internet Protocal->Preference->Options

2、 清缓存:

在每次迭代运行前,清除浏览器缓存。

路径:Vuser->Run time settings->Browser->Browser Emulation

3、 Think Time:

为了尽可能模拟用户实际操作情况,建议添加思考时间。

路径:

Vuser->Run time settings->Think Time

三、 场景设计

场景分为手工场景和目标场景两种。手工场景根据设计的负载测试性能指标,目标场景根据设计的性能指标测试负载。

手工场景设计:设计用户初始方式、加载方式、执行时间、退出方式。

Scenario (整体规划):多个脚本组合场景的时候根据设计的场景运行方式,

所有脚本按

照统一方式进行加压;

Group (组规划):多个脚本组合场景的时候,单独设计每个脚本的加压方式; Real-World schedule:按照场景设计进行加压,可以实现梯度加压和峰值加压; Basic schedule:按照脚本设计的迭代方式执行,只能进行峰值加压。

通常使用Scenario+Real world schedule组合。

1) 基准测试:

采用一个虚拟用户迭代执行N 次,取测试结果的平均值作为基准参考值。

2) 单交易负载

采用多个用户并发的方式对单交易进行负载测试,分析性能指标是否满足需求。 使用峰值加压,可以测试特定峰值下系统性能情况。

使用梯队加压,可以测试系统的最大并发用户数和最佳并发用户数。

建议:在单交易负载测试时,采用峰值加压和梯度加压相结合的方式进行测试。

3) 综合场景负载

模拟真实交易场景,分析正常业务交易量,选取日交易量最多的几个交易,合理分配并发用户数,持续运行一段时间,分析测试结果是否满足需求。

4) 稳定性测试

根据需求选取几个常用交易,按照峰值压力的百分比进行加压,稳定运行一段时间,查看系统运行是否正常,系统资源利用率是否在最佳状态。

四、 过程监控

1. LR 监控

2. 系统资源监控工具:Nmon

五、 结果分析

1、 摘要:

主要关注下面几个值:

事务平均响应时间:越小越好

90%事务响应时间:越小越好

事务通过成功率:越大越好

标准方差:越小越好,越稳定

2、Hits per Second(每秒点击次数)

“每秒点击次数”,即运行场景过程中虚拟用户每秒向Web 服务器提交的HTTP 请求数。

通过它可以评估虚拟用户产生的负载量,如将其和“平均事务响应时间”图比较,可以查看点击次数对事务性能产生的影响。通过对查看“每秒点击次数”,可以判断系统是否稳定。系统点击率下降通常表明服务器的响应速度在变慢,需进一步分析,发现系统瓶颈所在。

3、Throughput(吞吐率)

“吞吐率”显示的是场景运行过程中服务器的每秒的吞吐量。其度量单位是字节,表示虚拟用户在任何给定的每一秒从服务器获得的数据量。

可以依据服务器的吞吐量来评估虚拟用户产生的负载量,以及看出服务器在流量方面的处理能力以及是否存在瓶颈。

“吞吐率”图和“点击率”图的区别:

“吞吐率”图,是每秒服务器处理的HTTP 申请数。

“点击率”图,是客户端每秒从服务器获得的总数据量。

六、 测试报告

测试报告要包含测试概况、测试策略、测试结果、结果分析等。

测试结果包含测试摘要图、事务响应时间图、TPS 图、事务响应时间(百分比)图、服务器CPU 、内存、网络使用率变化图等。

七、 常见问题

1、启动脚本录制,IE 无反应(崩溃),解决办法:

去掉IE “Internet 选项->高级->启用第三方浏览器扩展”的勾选项。

2、 解决脚本中文乱码问题:

性能测试

本文旨在通过介绍LR 的使用过程中的常见问题,LR 的具体功能介绍请参考LR 11帮助文档。

一、 测试方案

在性能测试之前,需要先收集性能测试需求,根据需求制定测试计划和测试方案。 测试方案应该包含测试目的、测试环境、测试方法、测试工具、监控方式、测试案例、风险分析等。

二、 脚本准备

1.1. 录制

选择脚本录制协议,该协议是指客户端和服务器之间的通讯协议。如下图所示:

点击Create ,弹出开始录制对话框,如下图所示:

选择浏览器、要录制的应用URL ,点击OK ,即可启动脚本录制。

在脚本录制过程中可以添加注释、集合点、事务、检查、思考时间等。

1、 对于具体应用,可以将登陆、退出操作分别放在init 、end 中,可以针对不同交易创建

多个Action 。Init 和end 是不进行迭代的。

2、 根据测试需求,可以精简脚本,将不需要的请求删除。

3、 将关注的交易适当添加事务,事务不能包含思考时间,事务名称要规范。

4、 如果系统对某个交易有高并发要求,例如能够承受1000人同时提交数据,这种情况下

可以将该交易定义为一个事务,在该事务前加集合点。

5、 脚本录制过程中思考时间一般比较长,可以适当的减少思考时间,并设置脚本运行时思

考时间。

1.2. 参数化

1、在脚本中,查找需要参数化的字段值,选择,右键选择“Replace With A Parameter”,弹出参数化窗口,如下图所示:

2、输入参数化名称,点击Properties ,打开Parameter Properties窗口。如下图所示:

3、点击Create Table-》OK-》Edit with Notepad,以记事本的方式打开参数列表,输入参数,保存后关闭记事本。

4、设置参数选取原则:

sequential :按照顺序一行一行的读取。每个虚拟用户都会按照相同的顺序读取。 random :在每次循环里随机的读取一个,但在循环中保持不变。

unique :唯一的数。

same line as ...:和前面定义的参数取同一行值。

each occurrence:在运行时,每遇到一次该参数,就会取一个新值。

each iteration:运行时,在每次循环都取同一个值。

once :运行时,每次循环,该参数只取一次值。 组合:

1) sequential+each iteration :每次迭代都顺序取值,当迭代次数大于参数取值列表时,从

头开始取值;

2) sequential+eachoccurence:参数每出现一次,都顺序取值,当参数出现次数大于参数取

值列表时,从头开始取值;

3) sequential+once:参数从取值列表取一次值,之后一直使用该值;

4)

random+each iteration:每次迭代都随机取值,一次迭代中相同参数取值相同;

5) random+each occurrence:参数每次出现都取随机值,一次迭代中相同参数取值不同;

6) random+once:随机取一次值,一次迭代中相同的参数都取一个相同的随机值;

7) unique+onceiteration+when out of value:每次迭代都顺序取值,当迭代次数大于参数的

取值列表时,按照when out of value策略处理;

8) unique+onceoccurrence+when out of value:参数每次出现都顺序取值,当参数出现次数

大于取值列表时,按照when out of value策略处理;

9) unique+once:参数列表取一次值,一直使用该值。

10) 用户名和密码一一对应的,密码选取“same line as 用户名”。

1.3. 检查点

通常采用校验返回报文内容来确认交易是否成功。

添加检查点方法:获取交易返回报文的某个字段的值,校验该字段的返回值是否正确。 示例:

1、 脚本录制完成后,运行一次脚本,查看返回报文:

2、 在报文的返回消息里,查找可以进行校验的值,注册函数,并进行校验:

1.4. 关联

当客户端的某个请求是随着服务器端的响应而动态变化的时候,需要用到关联。

关联即在脚本回放过程中,客户端发出的请求,通过关联函数所定义的左右边界值,在服务器响应的内容中查找,得到相应的值,以变量形式替换录制时的静态值,从而向服务器发出正确的请求。

例如,客户端发出登录页面的请求,服务器端得到该请求后,返回登录页面,同时动态生成一个session ID,当用户输入用户名密码请求登录时,该Session ID同时被发送到服务器端。如果该session ID在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败。此时该session ID就需要进行关联。

1、自动关联:

1) 脚本录制完成后,至少回放一次;

2) 按【F8】,LR 自动扫描需要关联的值;

3) 根据提示进行关联;

4) 关联完成后,在脚本中增加了一个web_reg_save_param函数。

5) 回放脚本,查看日志,检查关联是否成功。

2、 手动关联:

1) 录制脚本两遍,比较两个脚本的不同【Tools-Compare with Scripts】;

2) 定位该值是通过哪个请求返回的,然后定义参数获取该值;

3) 使用参数替换掉脚本中相应的值;

4) 回放脚本,查看日志,检查关联是否成功。

1.5. 调试

1、 设置调试断点(F9)

设置调试断点,脚本运行到断点处,自动停止运行,可以通过查看日志了解运行情况。

2、 单步执行脚本(F10)

通过单步执行,可以看到脚本中每一个函数执行情况,一般情况下结合断点一起使用。

3、 调试日志

脚本运行过程中,可以通过运行日志了解脚本运行情况。日志分为标准日志和扩展日志。标准日志只能获得标准的输出信息,扩展日志可以根据配置查看参数替换、服务器返回信息和高级跟踪信息。

通过选择Vuser->Run time settings->log->Extended log打开扩展日志。

4、可以在脚本中添加输出函数,在日志中查看输出信息,协助脚本调试。

1.6. 设置

1、 超时:

在压测过程中,因为并发量和网络原因,经常会出现交易超时的错误,所以在进行测试过程中建议将几个超时时间设置长一些。

路径:

Vuser->Run time settings->Internet Protocal->Preference->Options

2、 清缓存:

在每次迭代运行前,清除浏览器缓存。

路径:Vuser->Run time settings->Browser->Browser Emulation

3、 Think Time:

为了尽可能模拟用户实际操作情况,建议添加思考时间。

路径:

Vuser->Run time settings->Think Time

三、 场景设计

场景分为手工场景和目标场景两种。手工场景根据设计的负载测试性能指标,目标场景根据设计的性能指标测试负载。

手工场景设计:设计用户初始方式、加载方式、执行时间、退出方式。

Scenario (整体规划):多个脚本组合场景的时候根据设计的场景运行方式,

所有脚本按

照统一方式进行加压;

Group (组规划):多个脚本组合场景的时候,单独设计每个脚本的加压方式; Real-World schedule:按照场景设计进行加压,可以实现梯度加压和峰值加压; Basic schedule:按照脚本设计的迭代方式执行,只能进行峰值加压。

通常使用Scenario+Real world schedule组合。

1) 基准测试:

采用一个虚拟用户迭代执行N 次,取测试结果的平均值作为基准参考值。

2) 单交易负载

采用多个用户并发的方式对单交易进行负载测试,分析性能指标是否满足需求。 使用峰值加压,可以测试特定峰值下系统性能情况。

使用梯队加压,可以测试系统的最大并发用户数和最佳并发用户数。

建议:在单交易负载测试时,采用峰值加压和梯度加压相结合的方式进行测试。

3) 综合场景负载

模拟真实交易场景,分析正常业务交易量,选取日交易量最多的几个交易,合理分配并发用户数,持续运行一段时间,分析测试结果是否满足需求。

4) 稳定性测试

根据需求选取几个常用交易,按照峰值压力的百分比进行加压,稳定运行一段时间,查看系统运行是否正常,系统资源利用率是否在最佳状态。

四、 过程监控

1. LR 监控

2. 系统资源监控工具:Nmon

五、 结果分析

1、 摘要:

主要关注下面几个值:

事务平均响应时间:越小越好

90%事务响应时间:越小越好

事务通过成功率:越大越好

标准方差:越小越好,越稳定

2、Hits per Second(每秒点击次数)

“每秒点击次数”,即运行场景过程中虚拟用户每秒向Web 服务器提交的HTTP 请求数。

通过它可以评估虚拟用户产生的负载量,如将其和“平均事务响应时间”图比较,可以查看点击次数对事务性能产生的影响。通过对查看“每秒点击次数”,可以判断系统是否稳定。系统点击率下降通常表明服务器的响应速度在变慢,需进一步分析,发现系统瓶颈所在。

3、Throughput(吞吐率)

“吞吐率”显示的是场景运行过程中服务器的每秒的吞吐量。其度量单位是字节,表示虚拟用户在任何给定的每一秒从服务器获得的数据量。

可以依据服务器的吞吐量来评估虚拟用户产生的负载量,以及看出服务器在流量方面的处理能力以及是否存在瓶颈。

“吞吐率”图和“点击率”图的区别:

“吞吐率”图,是每秒服务器处理的HTTP 申请数。

“点击率”图,是客户端每秒从服务器获得的总数据量。

六、 测试报告

测试报告要包含测试概况、测试策略、测试结果、结果分析等。

测试结果包含测试摘要图、事务响应时间图、TPS 图、事务响应时间(百分比)图、服务器CPU 、内存、网络使用率变化图等。

七、 常见问题

1、启动脚本录制,IE 无反应(崩溃),解决办法:

去掉IE “Internet 选项->高级->启用第三方浏览器扩展”的勾选项。

2、 解决脚本中文乱码问题:


相关内容

  • 性能测试_实用面试题
  • 软件性能测试模拟笔试题目(一) 注:本试卷中题目所涉及性能测试工具如无特殊说明则均为LoadRunner. 一. 1. 简答题(2*10=20分) 客户交付一个性能测试项目,请阐述你的实施流程. 答案: 测试设计阶段: 1)了解被测系统的性能需求,定义测试目标和范围: 2)了解系统的技术信息,如系统 ...

  • 软件测试基本知识
  • 第一章 软件工程及UML 笔试题 1. [基础题]UML:Unified Modeling Language它是一种用于描述.构造软件系统以及商业建模的语言.简单的理解就是它可以以一种直观的方式表示出一个系统的各项内容. 2. [基础题]软件开发模型有哪些? 答:瀑布模型,快速原型模型,增量模型,螺 ...

  • 模板_测试用例
  • 文档标识:uuid_doc_id 中国软件评测中心 软件测试说明 项目名称:CNAS T0407测试能力验证 项目标识:uuid_project_id 测试级别:性能测试 委托单位:国家应用软件产品质量监督检验中心 密 级:无 文档信息 修订历史记录 文档审核与批准 目录 1 范围 ........ ...

  • 系统压力测试方案
  • 李宁WMS系统 性能测试方案 2015年3月 目录 1.服务器部署方案介绍 2.测试工具介绍 3.性能测试目标 4.性能测试对象 5.性能测试前题条件 6.性能测试场景 7.性能测试策略 8.性能测试步骤 1.服务器部署方案介绍 压力测试环境配置参数 2.测试工具介绍 LoadRunner,是一种预 ...

  • 测试工程师简历模板
  • 模板一 姓名: 目前所在: 天河区 年 龄: 24 户口所在: 江西 国 籍: 中国 婚姻状况: 未婚 民 族: 汉族 培训认证: 未参加 身 高: 175 cm 诚信徽章: 未申请 体 重: 64 kg 人才测评: 未测评 我的特长: 求职意向 人才类型: 普通求职 应聘职位: 软件测试工程师: ...

  • 项目测试方案模板
  • 文件状态: [ ] 草稿 [ √ ] 正式发布 [ ] 正在修改 XX 项目测试方案 方案编号: 版 本 号: 原 作 者: 建立日期: 版本号 日期 修改者 A/M 内容及原因描述 备注 说明:方案版本维护表,用于测试方案版本的维护, A :增加, M:修改 目 录 1. 2. 3. 概述 ... ...

  • 中小企业服务云平台建设项目设计方案
  • XX 软件园中小微企业公共服务平台 暨XX 软件园中小企业服务云平台 设计方案 目 录 第1章 项目概述 . ............................................................................................... ...

  • 软件测试知识总结
  • 软件测试定义(通识观点) (1)软件测试是为了发现错误而执行程序的过程: (2)测试是为了证明程序有错,而不是证明程序没有错误: (3)一个好的测试用例是在于它能发现至今未发现的错误: (4)一个成功的测试时发现了至今未发现错误的测试. 描述性定义 定义1:为了发现错误而执行程序的过程. 定义2:根 ...

  • 测试工程师招聘条件(性能测试)
  • 测试工程师招聘条件(性能测试) 性能压力测试: 职位要求: 1.计算机相关专业,本科及以上学历: 2.具备3年以上软件测试经验:2年性能测试经验 3.熟悉QTP自动化测试工具: 3.精通性能测试工具(LoadRunner等).开发性能测试脚本: 熟悉PHP,JAVA,c#,PYTHON至少其中一种语 ...