64
1 LoadRunner自动化测试工具的应用 Version 3.0 1. Document issue Name Version 3.0 Date 2004-05-27 Author 二炮 Publisher 中国软件测试社区 Issue date http://www.sztest.net/ 2. Revision History Version Date Author Comment 1.0 2003.11.16 二炮 初稿 2.0 2004-3-7 二炮 初稿发布后,读者提出了许多意见,2.0 进行了 修改,并重点增加了 Analysis 的内容,使我们 对 LR 的测试数据,能够进行更加深入的分析。 有任何建议或者意见,请发邮件到 [email protected] 2.1 2004-3-12 二炮 增加了脚本的调试技巧,修改了检查点, scenario 介绍,还有一些小地方 3.0 2004-5-27 二炮 增加了一个典型的动态数据的实例,检查点的

LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

  • Upload
    others

  • View
    39

  • Download
    0

Embed Size (px)

Citation preview

Page 1: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

1

LoadRunner自动化测试工具的应用

Version 3.0

1. Document issue

Name

Version 3.0

Date 2004-05-27

Author 二炮

Publisher 中国软件测试社区

Issue date http://www.sztest.net/

2. Revision History

Version Date Author Comment

1.0 2003.11.16 二炮 初稿

2.0 2004-3-7 二炮 初稿发布后,读者提出了许多意见,2.0 进行了

修改,并重点增加了 Analysis 的内容,使我们

对 LR 的测试数据,能够进行更加深入的分析。

有 任 何 建 议 或 者 意 见 , 请 发 邮 件 到

[email protected]

2.1 2004-3-12 二炮 增加 了脚 本 的调 试技巧 ,修 改了 检查点 ,

scenario 介绍,还有一些小地方

3.0 2004-5-27 二炮 增加了一个典型的动态数据的实例,检查点的

Page 2: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

2

运用,对 lr 结果的思考,对 Unix/Linux 的监

视;换了一个性能测试的场景例子等等

目录 第一部分:LoadRunner 的简介 ......................................................................................... 3

1.1 LR 的安装注意事项: ......................................................................................... 5 1.2 协议的选择或者 VUSER 类型的选取 ................................................................... 6 1.3 LR 的基本原理 .................................................................................................... 7 1.4 测试脚本录制/分配所遵循的几个原则,所有工具都遵循的。 ......................... 7

第二部分:录制脚本 ......................................................................................................... 9 2.1 录制脚本前需要理解的几个基本概念 ................................................................ 9

2.1.1 事务(Transaction) ............................................................................. 9 2.1.2 集合点(Rendezvous) .......................................................................... 10 2.1.3 如何使用多协议录制脚本? .................................................................. 10 2.1.4 IP Spoofer(IP 欺骗) ....................................................................... 11 2.1.5(Text/Image)检查和 contents check 点 ........................................... 11 2.1.6 脚本复用问题 ........................................................................................ 14 2.1.7 理解 Correlation(关联) ................................................................... 14 2.1.8 以录制 Web(Http/Html)协议为例讲述一下 LR 的脚本的录制 ............... 18

2.2 脚本录制 ........................................................................................................... 21 2.3 脚本的参数化 .................................................................................................... 25 2. 4 插入检查点 ....................................................................................................... 30 2.5 脚本的调试技巧 ................................................................................................ 33

第三部分:创建运行场景 ............................................................................................... 35 3.1 Run-Time Setting............................................................................................ 35 3.2 几种场景类型的选择 ......................................................................................... 40 3. 3 场景的设置 ....................................................................................................... 42

3.3.1 场景的介绍 ............................................................................................ 42 3.3.2 设置集合点 ............................................................................................ 45 3.3.3 这里介绍一下多机联合产生负载 ........................................................... 48 3.3.4 LR 对服务器资源的监视 ........................................................................ 49

第四部分:利用 Analysis 分析结果 ............................................................................... 54 4.1 Analysis 的设置: ............................................................................................ 55 4.2 几个重要统计参数的解释: .............................................................................. 58 4.3 页面分解 ........................................................................................................... 59 4.4 报表组合 ........................................................................................................... 62

Page 3: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

3

第一部分:LoadRunner的简介

LoadRunner 是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整

个企业架构进行测试。通过使用 LoadRunner ,企业能 大限度地缩短测试时间,优化

性能和加速应用系统的发布周期。

目前企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且

由不同供应商提供软件和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境使公

司时时担心会发生用户响应速度过慢,系统崩溃等问题。这些都不可避免地导致公司收

益的损失。Mercury Interactive 的 LoadRunner 能让企业保护自己的收入来源,无需购

置额外硬件而 大限度地利用现有的 IT 资源,并确保终端用户在应用系统的各个环节中

对其测试应用的质量,可靠性和可扩展性都有良好的评价。

LoadRunner 是一种适用于各种体系架构的负载测试工具,它能预测系统行为并优化

系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为

和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner 能支持广泛

的协议和技术,为您的特殊环境提供特殊的解决方案。

轻松创建虚拟用户:使用 LoadRunner 的 Virtual User Generator,您能很简便地

创立起系统负载。该引擎能够生成虚拟用户脚本,以虚拟用户的方式模拟真实用户的业

务操作行为。它先记录下业务流程(如下订单或机票预定),然后将其转化为测试脚本。

利用虚拟用户,您可以在 Windows ,UNIX 或 Linux 机器上同时产生成千上万个用户访

问。所以 LoadRunner 能极大的减少负载测试所需的硬件和人力资源。另外,LoadRunner

的 TurboLoad 专利技术能提供很高的适应性。TurboLoad 使您可以产生每天几十万名在

线用户和数以百万计的点击数的负载。

用 Virtual User Generator 建立测试脚本后,您可以对其进行参数化操作,这一

操作能让您利用几套不同的实际发生数据来测试您的应用程序,从而反映出本系统的负

载能力。以一个订单输入过程为例,参数化操作可将记录中的固定数据,如订单号和客

户名称,由可变值来代替。在这些变量内随意输入可能的订单号和客户名,来匹配多个

实际用户的操作行为。

LoadRunner 通过它的 Data Wizard 来自动实现其测试数据的参数化。Data Wizard

直接连于数据库服务器,从中您可以获取所需的数据(如定单号和用户名)并直接将其

输入到测试脚本。这样避免了人工处理数据的需要,Data Wizard 为您节省了大量的时

间。

创建真实的负载:Virtual users 建立起后,您需要设定您的负载方案,业务流程组

合和虚拟用户数量。用 LoadRunner 的 Controller,您能很快组织起多用户的测试方案。

Controller 的 Rendezvous 功能提供一个互动的环境,在其中您既能建立起持续且循环的

负载,又能管理和驱动负载测试方案。

Page 4: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

4

而且,您可以利用它的日程计划服务来定义用户在什么时候访问系统以产生负载。这

样,您就能将测试过程自动化。同样您还可以用 Controller 来限定您的负载方案,在

这个方案中所有的用户同时执行一个动作---如登陆到一个库存应用程序----来模拟峰

值负载的情况。另外,您还能监测系统架构中各个组件的性能---- 包括服务器,数据库,

网络设备等----来帮助客户决定系统的配置。

LoadRunner 通过它的 AutoLoad 技术,为您提供更多的测试灵活性。使用

AutoLoad ,您可以根据目前的用户人数事先设定测试目标,优化测试流程。例如,您的

目标可以是确定您的应用系统承受的每秒点击数或每秒的交易量定位性能问题

LoadRunner 内含集成的实时监测器,在负载测试过程的任何时候,您都可以观察到

应用系统的运行性能。这些被动监测器为您实时显示交易性能数据,如响应时间,和其

它系统组件包括应用服务器,db,nic 和 os 等的即时性能。

一旦测试完毕后,LoadRunner 收集汇总所有的测试数据,并提供您高级分析和汇报

能力,以便迅速查找到性能问题并追溯原由。使用 LoadRunner 的 Web 页分解功能,您

可以知道下载所有的图象,文本所需的时间。

LR 支持非常广泛的协议:B/s (Http), C/S (Winsock,Oracle,DB2,Sql server,

Sybase 等),分布式组件的(Com/Dcom, Corba),Mail(MAPI,SMTP,POP3 等),Wireless

(wap 等),ERP/CRM(SAP 等),VB Vu, Java VU, C VU。从 7.6 开始还支持多协议。

这点就比很多其他工具强,比如:Webload 仅仅支持 web 的应用,OpenSTA 也仅仅支持

web 的测试,支持这么广泛的协议的 tool 只有 LR。

Page 5: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

5

1.1 LR 的安装注意事项:

LR 的版本分为 windows 和 Linux 平台:目前常见的:LR7.0,LR7.51,LR7.6,LR7.8,每

个版本差别蛮大的。本文以 LR7.8 的 Windows 版本的安装为例。

操作系统选择:LR 是个比较底层的软件,对 Windows 2000 的支持比较好,W2k 的稳定性

和兼容性也不错,需要的内存也比 Xp 低,有人把 LR 装在 WinXp 下面,会出一些问题:

“应用程序正常初始化(0xc0000005)失败”在 win2003,winXP 下安装 LR 后会出现这样

的情况。

License 问题:LR 的 license 是区分 VU 类型的,一般是按协议和时间,用户数量来区分

的,比如:

License for LoadRunner 7.51 (Type:Global   500,  Time Limited 时效:1 年 ) 就

表示支持所有协议, 大 500VU,时间:1 年。

三 种 安 装 类 型 : Standalone Installation , Network Installation , Network

Installation and shortcuts,可以安装在本机,也可以安装在一个网络驱动器上。其

他的计算机可以访问网络驱动器,安装 Workstation

四 种 安 装 方 式 : Typical Installation, Load Generator, MI Listener, Custom

Installation。

LR 本身分为 VUGen, Load generator,Controller,Analysis 几部分,可以分别

安装在不同的机器上,也可以全部安装在一台机器上。

我们根据实际情况选择,我用 Standalone Installation 和 Custom Installation 安装,

安装所有组件。

Loadrunner 压力/负载测试流程:

Page 6: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

6

制定负载测试计划:

测试之前,一定要先做测试设计,充分了解应用业务流程,把 常用的功能, 重要的

功能,录制成脚本,模拟 VU,设计好负载场景,期待能找出更多的性能问题。

1.2 协议的选择或者 VUSER 类型的选取

我现在要用 LoadRunner 测一个 C/S or B/S 系统,请问该用什么协

Page 7: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

7

议?

经常有新手问:为什么我用 LR 录完之后 VuGen 里产生不了脚本?这就是协议选择的

问题了,LR 支持的协议和应用非常广泛,很少有人能用完这么多协议,我们就常见的大

多数人用的加以讨论:

B/S 系统:选择 Web(Http/Html),

C/S 系统:根据 C/S 结构所用到的后台数据库来选择不同的协议,如果后台数据库是

Sybase,则采用 sybaseCTlib 协议,如果是 Sql server,则使用 MS Sql server 的协议,

至于 oracle 数据库系统,当然就使用 oracle 2-tier 协议。

对于没有数据库的 C/s 可以选择 windows sockets 协议。

手机上网,采用 wap 协议,需要模拟器的支持。

至于其他的 ERP,EJB(需要 ejbdetector.jar),选择相应的协议即可.

这次有个朋友用 LR 做性能测试,结构是 java client 端,后台 db 是 db2,开始用了 db2

协议,等等,好多办法,录制的脚本都不行, 后无计可施的时候,使用了 Java vu,

才录制到脚本,解决了问题。

注意:有些 windows 机器加入域之后,录制不到脚本,需要注销域之后再录。

1.3 LR 的基本原理

LR 启动以后,在任务栏会有一个 Agent 进程,通过 Agent 进程,记录各种协议的

Client 与 Server 端的请求和响应,用 LR 的一套 C 语言函数来表现脚本,所以只要 LR

支持的协议,就不会录制不到的,这是它与功能测试工具 WR,Robot(Gui)录制脚本的

很大一个区别。(WR 必须识别 GUI 对象,才能录制到)。这些脚本实际上就是一个个 Vu,

是一个个请求组成的,然后 LR 调用这些脚本访问服务器,接收服务器的响应。至于服务

器内部如何处理,它不关心。也正因为如此,LR 不能判断应用是否出错,只要服务器有

返回,即使是个出错的信息,LR 也认为是正确的。所以不管是 ASP,JSP,PHP 等等,只

要是 HTTP 协议,LR 都是支持的的,LR 对 J2EE 的应用支持的不错的。

1.4 测试脚本录制/分配所遵循的几个原则,所有工具都遵循的。

1. 脚本越小越好。越小越好维护。就像写 code 一样的,不要太长,尽量做到一个

功能一个脚本。如果那些功能是连续有序的,必须先做上一个,下一个才能工作,

那就只好放在一起了。LR 可以在你认为开始的地方才录制脚本。

Page 8: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

8

2. 选择用户 常用的, 重要的功能。有些人喜欢在 LR 中测试几乎所有的功能,

其实这样不合适,我们先做单用户的功能测试,然后我们把 常用的拿出来做性能

测试。但是也要结合用户实际使用情况,一般在一个系统中是多个用户使用多个功

能,某些功能使用的频率更大一些,我们在录制脚本之前就要设计好,一共几个脚

本,每个脚本会跑几个用户,能满足性能测试的需求。

3. 选择你所需要的进行录制。对于 WEB 的程序,对于你所关注的内容没什么影响的

操作,你可以不录制,可以使用暂停,这需要试的, 对被测功能有一个清楚的认识

和了解,要能把握住哪些地方是对整个过程没有影响的,比如一些查询,通常,选择

条件的页面都可以不录制,但对于一些页面有可能要传递参数,就需要录制了, 如

何确定哪些点可以不录制,一是可以找开发人员了解清楚程序设计的结构,再就是

靠自己的经验,作的多了,就心中有数了。

4. 性能测试和压力测试的目的不同,所以导致了 Script 和 scenario 的 test case

设计的不同。压力测试是为了测试系统在巨大负载压力下的反应,因此,我们可以

在一个 scenario 里面放一个脚本,或者尽量少的脚本,加载大量用户长时间运行,

比如:一个晚上。性能测试是为了测试系统在多用户下各个功能的响应时间。所以

一个 scenario 会有多个脚本,每个脚本会有不同数量的用户。

例子:(这是一个 project 的 test case 和 test scenario)

Software

Windows 2000 server +SP3

Websphere

DB2

Data source configuration

JVM heap size

Websphere web container configuration

Http server setting (Network related settings)

Test Case

Profile(Create, View, List)

Quotation(Create, View, List)

Order(Create, View, List)

Schedule(Generate, View, List)

Shippment Order(Create, View, List)

MyReport(Create template, Run Report)

Page 9: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

9

Performance Test

(Diagram 1)

7 users concurrently execute Test Case

y-axis: timeline

x-axis: Funtion (Average respond time)

Stress Test

(Diagram 2)

0 to 300 user login (idle) (+10 user per 20 sec)

- cpu usage, JVM memory usage, Data source usage

(Diagram 3)

293 user login (idle) (+10 user per 20 sec)

7 active user (concurrent transaction)

- cpu usage, JVM memory usage, Data source usage

第二部分:录制脚本

2.1 录制脚本前需要理解的几个基本概念

2.1.1 事务(Transaction)

事务(Transaction)是这样一个点,我们为了衡量某个功能的性能,比如:提交一

个表单的时间,编辑一个文档的时间,需要在功能的开始和结束位置插入这样一个标志,

这就定义了一个Transaction,LoadRunner 运行到该事务的开始点时,LoadRunner 就会

开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有

反映。

插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner 可以

在脚本中插入不限数量的事务。

举个例子:比如一个单据,把从登录到保存成功退出整个作为一个脚本,对于需要关

注的保存时间,定义为单独的事务,以取得响应时间,事务脚本函数如下:

Page 10: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

10

2.1.2 集合点(Rendezvous)

集合点:是一个并发访问的点,在测试需求中,可能会要求系统能够承受 1000 人同

时提交数据,1000 人同时保存单据,在 LoadRunner 中可以通过在提交数据操作前面加

入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多

少用户运行到集合点,如果不到 1000 人,LoadRunner 就会命令已经到集合点的用户在

此等待,当在集合点等待的用户达到 1000 人时,LoadRunner 命令 1000 人同时去提交数

据,达到并发访问的目的。

注意:集合点经常和事务结合起来使用,常放在事务的前面,集合点只能插

入到Action 部分,vuser_init和vuser_end 中不能插入集合点。集合点函数

如下,参数不能加空格:

加入集合点之后,在后面controller里面运行过程中可以看到VU的状态,会等待集合。

2.1.3 如何使用多协议录制脚本?

比如有一个被测系统有一个数据库服务器和一个应用服务器,客户机与数据库通信使用

oracle 协议,客户机与应用服务器通信使用 Winsock。我使用 oracle 2-tier 协议,录

制向数据库添加一条记录的操作,录制成功也可以重放,但是重放后记录并没有加入数

据库。是否应该使用 oracle2-tier 和 Winsock 多协议?如何同时录制这两个协议?

从 LoadRunner 7.6 开始可以录制多个协议的脚本。 方法很简单,就是 New->New Multiple

Protocol Script ,然后从左侧的协议里面选择你需要的协议就可以了

Page 11: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

11

2.1.4 IP Spoofer(IP 欺骗)

当运行场景时,虚拟用户使用它们所在的Load Generator 的固定的IP 地址。每个

Load Generator上同时运行大量的虚拟用户,这样就造成了大量的用户使用同一IP同时

访问一个网站的情况,这种情况和实际运行的情况不符,并且有一些网站会限制同一个

IP的登陆。有的群集服务器还会根据不同IP分配负载。为了更加真实的模拟实际情况,

LoadRunner允许运行的虚拟用户使用不同的IP访问同一网站,这种技术称为“IP 欺骗”。

启用该选项后,场景中运行的虚拟用户将模拟从不同的IP地址发送请求。该选项非常的

有用。注意:IP Spoofer 在连接Load Generators 之前启用。要使用IP欺骗,各个Load

Generator 机器必须使用固定的IP,不能使用动态IP(即DHCP)。

IP Wizard工具就提供了生成多个ip的功能,IP Wizard是一个单独的程序,我们可

以在开始菜单里面找到,你可以添加一个局域网内的IP段。添加后重启,在Win2k下使用

Ipconfig/all查看到很多虚拟的IP, 后要在Controller里面选择enable ip spoofer.

2.1.5(Text/Image)检查和 contents check 点

对于查询类的脚本,一定要添加检查点,以保证在测试时结果的正确性.因为LR只要

检测到服务器的响应,就认为是pass而并不管返回文件的正确性.在进行压力测试时,为

了检查Web服务器响应是否正确,VuGen允许我们插入Text/Image 检查点,这些检查点验

证网页上是否存在指定的Text或者Image,还可以测试在比较大的压力测试环境中,被测

的网站功能是否保持正确。检查点的含义和WinRunner 中的检查点功能基本上一致,这

里就不再作过多的说明。

举个例子:当我用Loadrunner做压力测试的时候,它的确能反馈给我各种服务器性

能的数据,但是在做B/S结构系统的测试的时候,却发现如下问题:

loadrunner不能正确判断操作是否成功,比如登录,我要测试200人同时登录,

但是我的login.jsp里面没有正确的关闭数据库的连接,导致登录100人后,建立了100

个数据库连接,第101人一个人登录的时候,由于超出数据库连接的 大数,所以,jsp

程序抛出了一个数据库异常。但是页面的走向是正确的,所以Loadrunner会认为程序是

正确执行的,但是事实却并非如此。

又比如:当你调试脚本的时候,由于没有处理好关联,运行时候出错,服务器返回

一个error msg,但是lr仍然认为是对的。

对于有的页面是无法添加文本和图像检查点的,就加入contents check点。在

run-time setting的contentcheck里面设置。可以创建一个rule,将自定义的应用出错

信息放在rule里面,比如:异常,

添加检查点的一些技巧:

Page 12: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

12

在压力测试或者功能测试中,根据现有的工具实现原理,我们必须加入检查点,才能知

道结果正确与否, Mi的工具也都提供了强大的检查点功能。但是如何加入检查点,才能

检查出正确的结果,与实际相符, 的确有很多技巧。

1.它必须满足 :是验证事务通过的充分必要条件,通过它我们能唯一检查到事务成功与

否?这就需要分析输入数据和服务器的响应,找到这个唯一的返回数据。根据它来判断

2.检查点可以是常量,也可以是变量,可以做成参数

3.检查点可以是文本,图像文件,数据库记录,对象属性等等

4.到底哪些返回可以作为检查点,哪些不能呢? 为什么有些server返回的,不能作为检

查点? 需要好好总结,有时候使用web_find找不到内容,可以使用web_reg_find来查找,

web_reg_find要加在请求的前面,它通知lr在下一个请求完成之后,执行web_find。在

controller里面运行的时候,如果没有找到检查点,那么就会标记这个事务为失败。

5.加入检查点在Tree View模式比较方便,

6.检查点一般加在事务结束的后面,用来判断事务成功与否

Page 13: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

13

下面我给一个脚本里面添加了检查点的例子:

//事务开始

lr_start_transaction("merchant post cs");

//检查点

web_reg_find("Text=50000",

"Fail=NotFound",

"Search=All",

LAST);

web_submit_data("CostingSaveFOBmAction.do",

"Action=http://172.17.16.2/xpc71/CostingSaveFOBmAction.do",

"Method=POST",

"RecContentType=text/html",

"Referer=http://172.17.16.2/xpc71/CostingEditableAction.do",

"Snapshot=t13.inf",

"Mode=HTML",

ITEMDATA,

"Name=styleNo", "Value=", ENDITEM,

Page 14: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

14

"Name=vender", "Value=sub 22 dsi hk", ENDITEM,

"Name=factory", "Value=6666", ENDITEM,

"Name=quotaCategory", "Value=", ENDITEM,

"Name=shipTerm", "Value=LDP", ENDITEM,

"Name=targetFOBPrice", "Value=50000", ENDITEM,

"Name=countryOfOrigin", "Value=us", ENDITEM,

"Name=costingID", "Value=stresstest-00{cs_name}_CS", ENDITEM,

"Name=cartonDimensionL", "Value=", ENDITEM,

"Name=cartonDimensionW", "Value=", ENDITEM,

"Name=cartonDimensionH", "Value=", ENDITEM,

"Name=description", "Value=M1", ENDITEM,

"Name=projectedQty", "Value=50000", ENDITEM,

"Name=addPG0_Name", "Value=", ENDITEM,

"Name=addPG1_Name", "Value=", ENDITEM,

。。。。。。

LAST);

lr_end_transaction("merchant post cs", LR_AUTO);

//事务结束

2.1.6 脚本复用问题

作为一款优秀的负载测试工具,LR的测试脚本有很好的复用性,参数化后的脚本,

在应用没什么大的变化的情况下,一直是可以用的。甚至你在A服务器录制的脚本,如果

做测试的时候,需要转移到B服务器上,你只需要用查找替换的功能将A服务器的IP地址

换成B服务器的IP地址就可以使用。还有我们常常碰到这样的情况,录制好了脚本后,程

序做了一些改动,也许以前的有些提交的值,现在用不了,那么可以找出这些值,直接

在脚本里面修改,就可以了。不必再录制脚本。

2.1.7 理解 Correlation(关联)

关联是用来解决脚本中存在的动态数据问题的.什么地方需要用到关联?

a) 比如sessionid,每次登录,服务器都为client端产生一个sessionid,以后某些

地方会用到这个sessionid,那么我们就可以在sessionid出现的后面,将它保

存到一个变量里面,以后可以拿出来使用。为什么不能参数化呢?因为它是服

务器随机产生的,没有一定的规律。

b) 比如:提交一个订单请求以后,服务器生成一个订单号,返回到client端,因为

Page 15: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

15

这个订单号也是服务器随机生成的,所以,没法参数化,只有作为动态数据处

理。

c) 这样的例子其实很多,当你提交一个请求,服务器返回生成的动态数据,这些都

需要用到关联。

有如下几种关联的方法:

1. 使用LR的自动关联,需要enable collelation

2. 录制后,使用不同的数据进行回放,在出现错误的地方检查是否是动态数

据原因,手工关联,可以通过使用tree view查看服务器的返回

3. 根据经验发现需要关联的地方,使用手工进行关联

在7.8中,当你录制好脚本,参数化,回放,LR会自动找你录制的时候和回放时候的服

务器返回的差别,找出动态数据,并自动关联。举个我作的动态数据的例子,当用户登录

时,服务器会产生一个Sessionid,退出或者Session time out后,该Sessionid便会失

效。我录制的时候,在脚本里面获取到了该Sessionid,但当我再回放的时候,这个

Sessionid已经无效了,所以我需要把这个Sessionid作为一个动态数据,当我一登录的

时候,便获取一个新的有效的Sessionid,然后通过函数把它保存下来

Web_reg_save_param("ProcessID",

"LB=ProcessID=",

"RB=;",

"Ord=1",

"RelFrameId=1",

"Search=body",

LAST);

那么后面用到的页面中就可以调用ProcessID这个参数使用这个新的ProcessID号。这

是个动态数据很典型的例子,

web_submit_data("w_onload_check.asp",

"Action=http://gsserver3/cwbase/sys/userlogin/w_onload_check.asp",

"Method=POST",

"TargetFrame=",

"RecContentType=text/html",

"Referer=http://gsserver3/cwbase/sys/userlogin/index.asp",

"Snapshot=t3.inf",

"Mode=HTML",

ITEMDATA,

"Name=hdclentip", "Value=chenjing", ENDITEM,

"Name=hdProcessID", "Value=F8E5ACCD372845C38C7E1981A342F703",

ENDITEM,

Page 16: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

16

"Name=selInstanceid", "Value=T01", ENDITEM,

"Name=TxtUserID", "Value={RYBH}", ENDITEM,

"Name=TxtPassword", "Value=cwpass", ENDITEM,

"Name=Txtkjdate", "Value=2003.01.06", ENDITEM,

"Name=selInstancetxt", "Value=性能测试用(中型数据库)", ENDITEM,

"Name=selInstance", "Value=T01", ENDITEM,

LAST);

web_url("loginpage.aspx",

"URL=http://gsserver3/cwbase/sys/menushow/loginpage.aspx?ProcessID=

{ProcessID}",

"TargetFrame=",

"Resource=0",

"RecContentType=text/html",

"Referer=",

"Snapshot=t4.inf",

"Mode=HTML",

LAST);

理解web_reg_save_param函数,

int web_reg_save_param (const char *ParamName, <List of Attributes>, LAST);

第一部分:参数名字,用双引号括起,逗号分开;

第二部分:List of Attributes,包括:LB、RB、RelFrameID、Ord、Search、SaveOffset、

SaveLen等,

第三部分:LAST,结束标志。

左边界,右边界到底是个什么概念?

LB是左边界,要查找的字符串左面的边界值,即位于查找字符串的 左边的字符串,RB

是右边界,要查找的字符串右面的边界值,即位于查找字符串的 右边的字符串,比如

说吧,程序中有这么一个赋值,ProcessID =A53625E18440FCE81F26DCE712E65EBA;如果

ProcessID的值是动态的,我想使用动态变量,那我设定查找左边界为LB=ProcessID=,

右边界为RB=;的字符,如果找到了,就替换成变量.

Search是指查找范围,就是说在哪里查找这些值,可以取这样几个值,我们一般设为ALL,

Body等即可。

Headers (Search only the headers),

Body (search only Body data, not headers),

Noresource (search only the html body, excluding all headers and resources),

ALL (search Body and headers). The default value is ALL.

Page 17: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

17

RelFrameID: The hierarchy level of the HTML page relative to the requested URL.

一般取1

ORD: This parameter, also known as Instance, indicates the ordinal or instance

of the match. 一般取 1

LR7.8已经为用户定义好了很多类型的关联,我们可以自己定义New rule,不过我在

录制脚本的时候一般把系统的那些都关掉,定义自己的,只是有的时候,它不能自动关

联,就干脆手工作了。我这里有个Correlation的官方文档,大家下去可以自己看看。

关于关联,还举个例子。

我来解释一下这个请求,这个请求挺复杂的,不过复杂并不是说它很大, 它的确很

长, 一共440行,一下子要发送上百条数据, 更麻烦的地方是 : 它里面的数据都是

动态生成的,所以我们要把它关联, 才能正确处理,关联的方法有2个:

1.一是采用LR的自动关联, 7。5以上版本都支持

2.而是自己手工关联,不过太多了,可能有近40个数据需要关联

这是一个关联的比较难的问题

3.要想利用lr的自动关联,就得先让它知道两次运行的差异, 可以先参数化,然后执

行,查看服务器的返回,就发现,虽然运行不会成功,但是服务器返回的所有动态数据

都已经捕获, 到这时候,就已经可以全部关联了,

4. 后我给出一个关联好的脚本,让大家学习。

如果要手工关联,可以自己根据服务器的返回来定义动态数据, 从服务器的返回看

到:

javascript:mdfBizRule("86817", "true"), 我要扑捉的数据是 86817,它就是服务

器动态生成的,

那么在这个请求前面定义

web_reg_save_param( "task_id", "LB=java script:mdfBizRule(\"", "RB=\"",

"Ord=1", "Search=Body", "RelFrameId=1", LAST );

后面的语句就可以用了

这个例子,可以看这里:

http://www.sztest.net/forum/showthread.php?s=&threadid=5161

Page 18: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

18

2.1.8 以录制 Web(Http/Html)协议为例讲述一下 LR 的脚本

的录制

LR的脚本是C语言代码,LR有自己的一整套函数接口,可以供外部调用,在VUGen

里面敲Lr_就可以看到了。Web(Http/Html)脚本本身分vuser_init、vuser_end,ACTION

三部分,各部分的解释:INIT部分可以理解为初始部分,ACTION可以理解为事务部分,

也是测试的主体,END是退出结束,其中vuser_init 和vuser_end 都只能存在一个,不

能再分割,而Action 还可以分成无数多个部分。重复的时候,仅重复action部分。我们

一般把登录部分放在init,退出放到end,只会执行一次,或者有的时候,各部分反复的

次数不一样,分成多个action,可以单独设定反复次数。(如果需要在登录操作设集合点,

那么登陆操作也要放到Action 中,因为vuser_init 中不能添加集合点)

Init,login

#include "web_api.h"

#include "lrw_custom_body.h"

vuser_init()

{

//登录的脚本可以放在这里

}

录制选项设置:

Page 19: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

19

解释:1.基于浏览器的应用程序推荐使用HTML-based Script, 脚本中采用

HTML页面的形式来表示,这种方式的Script脚本容易维护,容易理解,使用该选项中的

advance中的第一个选项,如果单纯的HTML方式,是不允许使用关联的。

2.不是基于浏览器的应用程序推荐使用URL-based Script,脚本中的表示采用基于URL

的方式,不是很好阅读。

Page 20: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

20

解释:1.是否记录录制过程中的ThinkTime,可以理解成人思考的时间,如果记录,还可

以设置 大值,这个设置对压力有较大影响,一般应该使用它,在请求之间,有部分停

顿时间。在后面你还可以看到在runtime setting里面还可以设置think time的一些属性。

2.通知Vugen去重新设置每个action之间的Http context,缺省是需要的。

3.完整记录录制过程的log,一般会比较大。

4.保存一个本地的snapshot,可以加速显示

5.把html的title放到web_reg_find函数里面

6.支持的字符集标准,一般选择utf-8这种编码标准,支持多字节,LR里面就可以使用中

文了。

7.Http header的录制,我们采用缺省即可,不需要用web_add_header去录制非标准的

header信息。

对录制的content的内容进行filter,不作为resource处理的。

Page 21: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

21

解释:这个就是我前面提到的关联,系统已经预先设置好了一些常见的关联rules,我

们录制脚本之前,可以把系统的都关掉,定义自己的,只是有的时候,它不能自动关联,

就干脆手工关联。如果我们想LR自动关联,是需要勾上这里的,也可以在这里定义你自

己的关联标准,定义lb,rb等。

2.2 脚本录制

现在可以开始录制脚本了,我给出几段已经录制好的脚本。

lr_rendezvous("createpreproduction schedule "); lr_start_transaction("create pre production schedule"); web_url("Folder.jsp_4", "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp", "Resource=0", "RecContentType=text/html",

Page 22: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

22

"Referer=http://172.17.16.5/xpc71/LoginAction.do", "Snapshot=t10.inf", "Mode=HTML", LAST); web_url("TemplateAdminAction.do", "URL=http://172.17.16.5/xpc71/TemplateAdminAction.do?forwardID=1", "Resource=0", "RecContentType=text/html", "Referer=http://172.17.16.5/xpc71/LoginAction.do", "Snapshot=t11.inf", "Mode=HTML", LAST); //可以自己手工,也可以让 correlate 定义一个动态参数 web_reg_save_param( "WCSParam_Diff2", "LB=name='", "RB='", "Ord=7", "Search=Body", "RelFrameId=1", LAST ); web_submit_form("ScheduleCreationAction.do", "Snapshot=t12.inf", ITEMDATA, "Name=PTName", "Value={schedule_name}", ENDITEM, "Name=headerTempID","Value=preProductionHeaderTemplate", ENDITEM, "Name=selectHeader", "Value=1", ENDITEM, "Name=schTempID","Value=preProductionDetailTemplate", ENDITEM, LAST);

web_url("Folder.jsp_5", "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp", "Resource=0", "RecContentType=text/html", "Referer=http://172.17.16.5/xpc71/LoginAction.do", "Snapshot=t13.inf", "Mode=HTML", LAST); lr_end_transaction("create pre production schedule", LR_AUTO); lr_rendezvous("createcs"); lr_start_transaction("create cs");

Page 23: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

23

web_submit_data("CostingPreCreateAction.do", "Action=http://172.17.16.5/xpc71/CostingPreCreateAction.do", "Method=POST", "RecContentType=text/html", "Referer=http://172.17.16.5/xpc71/ScheduleCreationAction.do", "Snapshot=t14.inf", "Mode=HTML", ITEMDATA, "Name=scheduleID", "Value={schedule_id}", ENDITEM, "Name=scheduleName", "Value={schedule_name}", ENDITEM, "Name=VS022264", "Value=Spring 2004", ENDITEM, "Name=VS372264", "Value=ANF", ENDITEM, "Name={WCSParam_Diff2}", "Value=test001", ENDITEM, "Name=dParentID", "Value=", ENDITEM, "Name=itemID", "Value=", ENDITEM, "Name=ifRegen", "Value=Y", ENDITEM, "Name=editable", "Value=true", ENDITEM, "Name=calendar", "Value=", ENDITEM, "Name=respPartyID", "Value=", ENDITEM, "Name=respPartyName", "Value=", ENDITEM, "Name=listParentID", "Value=-1", ENDITEM, "Name=shareParty", "Value=", ENDITEM, LAST);

web_url("menuAction.do_3", "URL=http://172.17.16.5/xpc71/menuAction.do?currentMenu=3&operation=changeMenuOnly", "Resource=0", "RecContentType=text/html", "Referer=http://172.17.16.5/xpc71/LoginAction.do", "Snapshot=t15.inf", "Mode=HTML", LAST); web_url("Folder.jsp_6", "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp", "Resource=0",

Page 24: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

24

"RecContentType=text/html", "Referer=http://172.17.16.5/xpc71/LoginAction.do", "Snapshot=t16.inf", "Mode=HTML", LAST); lr_end_transaction("create cs", LR_AUTO);

这段示例脚本包含了两个事务,两个集合点,有参数化,有动态变量。脚本里面有 2 个

函数,解释一下:1.几个函数的解释:

int web_url (const char *Name, const char * url, <List of Attributes>,

[EXTRARES, <List of Resource Attributes>,] LAST );

这个函数 load 指定的 web 页面 .

*Name:页面的 name;

url:页面的 url,Resource:指示 the URL 是否是一个资源。0,不是,1,是。

RecContentType : 录 制 脚 本 过 程 中 , Header 响 应 的 类 型 , e.g. text/html,

application/x- javascript

Referer – 参考 web 页的 the URL

Snapshot - snapshot 文件名(扩展名 inf), correlation 的时候要的。

Mode – 录制的级别: HTML or HTTP

Last- 属性列表的结束标志。

int web_submit_data ( const char *StepName,//页面文件名, <List of attributes>,

ITEMDATA,//Item 数据

<List of data>, [ EXTRARES, <List of Resource Attributes>,] LAST ); 这个函数以 GET and POST requests 方式发送 form 请求。 *StepName: 这里有个例子 , the web_submit_data function submits a form using the POST method: web_submit_data("customerinfo.asp", "Action=http://lazarus/webflight/customerinfo.asp", "Method=POST", "TargetFrame=", "EncType=multipart/www-urlencoded" "RecContentType=text/html" ITEMDATA, "name=flight", "value=6593", ENDITEM,

Page 25: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

25

"name=reserveFlight", "value=Next >",ENDITEM, LAST); 在 http 的脚本中,还有一些函数,象 web_link 等 web_link("Planned Shipment", "Text=Planned Shipment", "Snapshot=t13.inf", LAST);

2.3 脚本的参数化

如果用户在录制脚本过程中,填写提交了一些数据,比如创建一个新的 document。

这些操作都被记录到了脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这

样做会被应用禁止,会出错,这样也不符合实际的运行情况,而且有可能引起冲突。为

了更加真实的模拟实际环境,需要各种各样的输入。参数化输入是一种不错的方法

参数化包含以下两项任务:

① 在脚本中用参数取代常量值。

② 设置参数的属性以及数据源。

参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,

不是所有的函数都可以参数化的。

我举一个例子来说明,还是我上面那个脚本,

web_submit_form("ScheduleCreationAction.do", "Snapshot=t12.inf", ITEMDATA, "Name=PTName", "Value=performance0001", ENDITEM, "Name=headerTempID", "Value=preProductionHeaderTemplate", ENDITEM, "Name=selectHeader", "Value=1", ENDITEM, "Name=schTempID", "Value=preProductionDetailTemplate", ENDITEM, LAST);

因为每次创建文档的时候,需要用不同的名字,系统禁止同名,如果同名就会出错,所

以要把 PTName 值参数化,我们只要选中“performance0001”,然后点鼠标右键, 选择

“Replace with a parameter. ”,出现以下窗口:

Page 26: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

26

参数类型解释:

  DateTime:很简单,在需要输入日期/时间的地方,可以用 DateTime 类型来替代。

其属性设置也很简单,选择一种格式即可。当然也可以定制格式。

  Group Name:暂时不知道何处能用到,但设置比较简单。在实际运行中,LoadRunner

使用该虚拟用户所在的 Vuser Group 来代替。但是在 VuGen 中运行时,Group Name 将

会是 None

  Load Generator Name:在实际运行中,LoadRunner 使用该虚拟用户所在 Load

Generator 的机器名来代替。

  Iteration Number:在实际运行中,LoadRunner 使用该测试脚本当前循环的次数来

代替。

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

  Unique Number:唯一的数。在属性设置中可以设置第一个数以及递增数的大小。

注意:使用该参数类型必须注意可以接受的 大数。例如:某个文本框能接受的 大数

为 99。当使用该参数类型时,设置第一个数为 1,递增的数为 1,但 100 个虚拟用户同

时运行时,第 100 个虚拟用户输入的将是 100,这样脚本运行将会出错。注意:这里说

的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为 1。举例说明:假如起始数为 1,递增为 5,那么第一个用户第一次循环取值 1,第二次循环

取值 2;第二个用户第一次循环取值为 6,第二次为 7;依次类推。   Vuser ID:设置比较简单。在实际运行中,LoadRunner 使用该虚拟用户的 ID 来代替,

该 ID 是由 Controller 来控制的。但是在 VuGen 中运行时,Vuser ID 将会是 –1。

  User Defined Function:从用户开发的 dll 文件提取数据。

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

我们将会重点介绍这种参数类型,这也是 LR 的缺省参数类型,就是把准备好的数据放在

文件或者用 sql 语句从数据库中取出来,让 VU 来读取。

Page 27: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

27

可以使用 data wizard 来创建一个数据库连接,首先要创建数据库驱动,

Page 28: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

28

然后指定一个查询语句,就可以从数据库里面找出数据,也可以使用 ms query,ms

query 可以从 office 中安装。

Page 29: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

29

“Select next row ”有以下几种选择:多个 VU 如何取值

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

   Random:在每次循环里随机的读取一个,但是在循环中一直保持不变

   Unique :每个 VU 取唯一的值。注意:使用该类型必须注意数据表有足够多的数。

比如 Controller 中设定 20 个虚拟用户进行 5 次循环,那么编号为 1 的虚拟用户取前

5 个数,编号为 2 的虚拟用户取 6-10 的数,依次类推,这样数据表中至少要有 100 个

数据,否则 Controller 运行过程中会返回一个错误。

   Same Line As 某个参数(比如 Name):和前面定义的参数 Name 取同行的记录。通

常用在有关联性的数据上面。这个也是很有用的,比如有时候我们要求指定 VU 取读取指

定数据,就可以这样定义:

创建参数文件,共两列,假设 userID,DOCID,userid 设定取数方式是 unique,DOCID

则设成 the same line as userid,如果第一行数据为 0001,DOC1,则如果用户 0001 登录

成功,在打开文档时,便会打开 DOC1 文档。

“Update value on”有如下几种选择:多次迭代如何取值

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

Page 30: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

30

  Each iteration 则每次反复都要取新值,

  Each occurrence 则只要发现该参数就要重新取值,也就是如果一个 action 中有多

个该参数,每遇到一个就要重新取一个值,那么即使在同一次反复中也取不同的值。

2. 4 插入检查点

加入检查点的必要性:前面已经提到,LR这类工具都是根据协议来录制,回放脚本

的,所以当LR提交了一个Request之后,Server只要有一个响应,不是error的,那么LR是不能判断正确与否的。所以有时候LR显示Transaction成功了,但是到数据库去查看,

是没有成功的。那么怎么让LR如实的反应情况呢?我们可以加入检查点。 加入检查点时, 好在Tree view模式,可以看到页面的Snapshot,也可以看到服务器

的返回,对于你关心的每个事务,都应该插入检查点,检查点可以是server响应的文本或

者 image文件,也可以是服务器返回的出错信息,但是一定要能够标识这个事务成功或者

失败。插入检查点之后,可以replay,在run result里面可以看到成功与否。有了检查点,

在controller里面,如果没有检查到检查点,那么这个action就失败了。

有两种检查点,Text or Image,VuGen 在测试Web 时,有两种视图方式:

Page 31: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

31

TreeView/Script View。前面我们见到的一直都是Script View。在插入Text/Image 检查点

时,我觉得用TreeView 视图会比较方便。在这种视图之间切换,可以通过菜单或者工具

栏的方式现。

先在树形菜单中选择需要插入检查点的一项,然后点鼠标右键,选择将检查点插到

该操作执行前还是该操作执行后。如果在该操作执行前,则选择“Insert Before”,否则

选择“Insert after” 然后弹出对话框,如下,选择“Text Check”(这里以Text 检查点

为例说明)

Page 32: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

32

Page 33: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

33

2.5 脚本的调试技巧

录制好脚本后,是要调试的,我们要确保脚本能正常的运行,一般的步骤是;先用一个

VU 在 Vugen 里面调试,通过之后,可以在 controller 里面用多个 VU 来调试。 脚本调试的有三个途径:

1. 在 Vugen 里面,可以通过查看执行的 log 来调试脚本,但是缺省的 log 是标准的

log,信息比较少。可以在 run-time setting 里面设置 extended log, 会产生大量的 log,很清楚的反映了 server 与 client 的交互。

Page 34: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

34

2. 可以通过 Tree-View 这种方式,查看 server 与 client 的交互,还有 snapshot。

3. 在 controller 里面设置 run-time setting 的 extended log,那么在场景运行过

程中,点击 Vuser List,选中一个 VU,点击右键,显示 log,就可以看到每个 Iteration

的执行情况。有 error 信息,会显示会红色的感叹号。

Page 35: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

35

4. 可 以 使 用 输 出 函 数 帮 助 我 们 调 试 脚 本 , 例 如 : 可 以 使 用

lr_output_message(lr_eval_string("WCSParam_Diff3is :{WCSParam_Di

ff3}")); 来调试看看 web_reg_save 取到值没有。在脚本运行以后,查看

log 就可以看到取到值没有。

第三部分:创建运行场景

3.1 Run-Time Setting

1. 运行时的设置:在 Vugen 和 Controller 里面都可以设置。这些设置会影响压力大小

Page 36: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

36

Page 37: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

37

Page 38: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

38

Page 39: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

39

2. 和 TD 的连接,LR 可以很方便的和 TD 连接,把脚本,场景,测试结果放在 TD 中,

每次运行场景之前,设置一下 result 目录,选择第一项。那么每次场景运行后,结果可

以自动保存在 TD 中。这样我们就可以设定时间晚上让 LR 启动执行,第二天来查看结果。

Page 40: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

40

3.2 几种场景类型的选择

脚本调试好之后,就可以把脚本加入到场景里面去了,运行场景描述在测试活动中

发生的各种事件。一个运行场景包括一个运行虚拟用户活动的Load Generator 机器列表,

一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。这里首先介绍一下LR的场景类

型,LR有2种大的场景类型:

Page 41: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

41

Manual Scenario:手工场景,该项要完全手工设置场景,这项下面还可以设置为

每一个脚本分配要运行的虚拟用户的百分比,也就是负载百分比,可在 Controller

的 Scenario 菜单下设置。

Goal—Oriented Scenario:如果你的测试计划是要达到某个性能指标,比如:每

秒多少点击,每秒多少 transactions,能到达多少 VU,某个 Transaction 在某个

范围 VU(500-1000)内的反应时间等等,那么就可以使用面向目标的场景,使用

面向目标的场景,LR 将自动为你创建负载。

选择手工场景,添加脚本到场景中,

对于面向目标的场景,LR 一般要求你设定一个 少 VU, 多 VU,以及你的目标,比如:

hit per second, response time,还有 Vu 的加载方式,场景的运行,停止标准等。LR

会根据你的设置自动生成负载。比如:你做一个 VU 在 1-10, hit per second=100 的场

景。LR 会首先加载一个用户,运行一段时间,计算 hit per second, 达不到目标,接着

加载第二批用户,运行一段时间,计算结果,这样一直试下去,直到接近目标,如果加

载了所有用户,仍然达不到目标。LR 会提示一个错误信息,告诉你定义的目标达不到,

如果能达到目标,LR 会保存结果到数据库,你就很清楚多少 VU 可以达到目标了。

Page 42: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

42

3. 3 场景的设置

3.3.1 场景的介绍

Design:设计测试场景的静态部分,设置压力机、VU 数量、 用户组,以及 VU 加载的

Schedule. Run:设计测试场景的动态部分,主要指添加性能计数器监视服务器性能,在脚本运行

的过程中可以通过这些计数器反馈数据。 Schedule 有 2 种定义方式: 1. 按照 scenario:设置 Vu 加载方式,运行多长时间:可以设定时间,也可以设定按照

iteration;设置 VU 退出方式:逐步退出,还是同时退出。 2. 按照 Group 方式:可以按照每个 group 来定义 schedule,这种比较适合 VU 加载不同

Page 43: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

43

的情况,比如有一个脚本要加载 300VU,每 20s 加载 10 个;别的脚本是同时加载所有

VU;或者有的脚本必须在另外的执行完之后才能执行,这些只能设定按照 group 方式了。 我们可以对 Edit Schedule 进行设置,设置测试开始执行的时间,对于手动设计的测试还

可以设定它的持续时间,以及何时起用或禁止调用 VU。注意:这些设置直接影响 load,影响性能,所以我们需要设置一个尽量接近实际环境的 schedule

Page 44: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

44

点击 scenario start time,可以设置场景开始运行时间。然后再点击 start scenario,可以在

下班后运行,LR 运行完后,会自动保存结果到指定目录。设置结果保存路径

Page 45: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

45

3.3.2 设置集合点

如果在脚本中设置了集合点,还需要在 Controller 中设置集合点策略。在菜单中调出

设置集合点策略的窗口 .,脚本运行的时候,在这里可以看到 VU 的状态。

设置集合点策略

Page 46: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

46

如果选择场景类型为 Goal-Oriented Scenario,添加脚本到场景中,它的场景设置是这

样的:

(以上的说明是以选择的目标为 Virtual Users 时的)

Page 47: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

47

各种目标类型的应用范围: Virtual Users Goal: 如果需要测试多少人可以同时运行应用,那么推荐定义 Virtual Users Goal。运行定义该

目标类型的场景和运行 Manual 类型的场景类似。 Hits per Second: 如果想测试 Web Server 的真正实力,推荐定义目标类型为:Hits per Second、Pages perMinute 或者 Transactions per Second,这些类型都需要指定一个虚拟用户的 小值和

大值的范围。Controller 试图使用 少的虚拟用户来达到定义的目标。如果使用 少

的用户,不能达到目标,Controller 会增加用户数,直到达到定义的 大值。如果使用

了 多的虚拟用户数,定义的目标还没有实现,那么需要增加 大用户数,重新执行场

景。 Transactions per Second 可以选择一个在脚本里面已经定义好的事务 Transactions Response Time 如果想知道在多少用户并发访问网站时,事务的响应时间达到性能指标说明书中规定响 应时间的 大值,那么推荐使用 Transactions Response Time 类型。指定需要测试的事务

的名称,虚拟用户数量的 小值和 大值,还有预先定义好的事务的响应时间。 在场景运行中,如果使用了 多的虚拟用户,还不能达到定义的 大响应时间,说明

Web Server 还有能力接纳定义的虚拟用户的 多数量;如果在使用了部分虚拟用户,就

达到了定义的 大的响应时间,或者 LoadRunner 提示如果使用 多数量的虚拟用户时

将要超过 大响应时间,那么需要重新设计或者修补应用程序,同时可能需要升级 Web Server 的软硬件。 Pages per Minute 每分钟多少页面 如果你定义的类型是 Pages per Minute、Hits/Transactions per Second,Controller 首先用

小用户数除定义的目标,得到一个值,然后确定每个用户应该达到的 hits/transactions或者 pages per minute,然后 controller 开始按照以下的策略加载用户:   如果选择的是自动的加载虚拟用户,LoadRunner 会首先加载 50 个用户。如果定义

的 大用户数小于 50,LoadRunner 就会一次加载所有的虚拟用户。   如果选择的是在场景运行一段时间后达到目标,LoadRunner 就会尝试在定义的这段

时间内达到目标,根据时间限制和计算出的每个用户的 hits、 transactions 或者 pages,LoadRunner 确定第一批加载多少用户。  如果选择的是按照一定的阶段达到目标(也就是先在 x 长时间内达到 y pages/hits,然

后再达到下一个目标),LoadRunner 计算每个用户应该达到的数字后,再确定第一批加

载多少用户。每加载一批用户后,LoadRunner 会判断是否达到这批用户的目标。如果这

批用户的目标没有达到,LoadRunner 重新计算每一个用户应该达到的目标数字后,重新

调整下一批加载用户的数量。默认情况下,LoadRunner 每两分钟加载一批用户。如果

Controller 加载了 多数量的用户还没有达到预定的目标,LoadRunner 会重新计算每个

Page 48: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

48

用户的目标,然后同时运行 大数量的用户,尝试达到预定的目标。 如果出现以下情况,Pages per Minute、Hits/Transactions per Second 类型的场景会置于

“Failed”状态: Controller   使用了指定的 大数量的用户,并且两次都没有达到目标  所有的用户运行都失败  没有足够的 Load Generators 机器(现有的机器已经超载运行的情况下) Controller   增加了几批用户后,pages per minute 或者 hits/transactions per second 没有

增加 Controller   加载第一批用户后,定义的目标没有被捕捉到

3.3.3 这里介绍一下多机联合产生负载

LR 支持成千上万的 VU,有时候我们需要测试比较多的 VU 时候,就需要很多压力机器

一起工作。不同类型的 VU 需要的 cpu 和 mem 资源不同,一般 500k-2M 左右,所以一台

256M 的机器可以支持 150-200VU。点击 Generator 我们可以设定生成模拟用户的机器,

这些机器需要安装 LR Generator,启动 Agent 进程,不需要脚本,只是调用它的资源。

这些机器是实际存在的,点击 add,输入名字或者 ip 把机器加入,status 时 down,点

击 Connect,status 变成 ready,就可以使用了。

Page 49: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

49

3.3.4 LR 对服务器资源的监视

LR 只能监视它支持的服务器的资源,它支持大部分常见的 os,db,application server

甚至 J2EE。

System Resource:包括 windows 平台,Linux/Unix 平台

Web Server:包括 Apache、IIS、Sun 的 iplanet 等

Application server:包括 Weblogic、WebSphere 等

Database server:包括 DB2,Oracle,Sql server,Sybase 等

Java: ejb,J2ee 等,

1.对 Windows(Win2k server)的监视:

对 windows 的监视相对比较简单,监视前首先需要用有管理员权限的帐号连接被监

server,例如:net use \\qa-test /user:**** ,输入密码。然后就可以添加计数器,

比较常用的计数器有:

Processor:%Processor Time CPU 使用率。这是查看处理器饱和状况的 佳计数器。显

示所有 CPU 的线程处理时间。如果一个或多个处理器的该数值持续超过 90%,则表示

此测试的负 载对于目前的硬件过于沉重。为多处理器服务器添加该计数器的 0 到 x 个实例。 Processor Queue Length:是指处理列队中的线程数,小于 2。处理器瓶颈会导致该值持

续大于 2。 Context Switches/sec:如果切换次数到 5000*CPU 个数和 10000*CPU 个数中,说明它忙

于切换线程 Memory:

Available Mbytes 物理内存的可用数(单位 Mbytes)至少要有 10% 的物理内存值 page/sec: 表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以

释放工作集空间的页面数。一般如果 pages/sec 持续高于几百,那么您应该进一步研究页

交换活动。有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以 4k 就得到

由此引起的硬盘数据流量)。Pages/sec 的值很大不一定表明内存有问题,而可能是运行

使用内存映射文件的程序所致。 page read/sec:页的硬故障,page/sec 的子集,为了解析对内存的引用,必须读取页文件

的次数。阈值为>5. 越低越好。大数值表示磁盘读而不是缓存读。 由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足与导致

页交换的磁盘瓶径混淆。因此,在研究内存不足不太明显的页交换的原因时,您必须跟

踪如下的磁盘使用情况计数器和内存计数器:

Physical Disk\ % Disk Time

Physical Disk\ Avg.Disk Queue Length

例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读

取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length 的值很高,则可能有

Page 50: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

50

磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

要确定过多的页交换对磁盘活动的影响,请将 Physical Disk\ Avg.Disk sec/Transfer

和 Memory\ Pages/sec 计数器的值增大数倍。如果这些计数器的计数结果超过了 0.1,

那么页交换将花费百分之十以上的磁盘访问时间。如果长时间发生这种情况,那么您可

能需要更多的内存。

Page Faults/sec:每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需

要从硬盘读取)较 page/sec 只表明数据不能在内存的指定工作集中立即使用。

如果您怀疑有内存泄露,请监视 Memory\ Available Bytes 和 Memory\ Committed

Bytes,以观察内存行为,并监视您认为可能在泄露内存的进程的 Process\Private

Bytes、Process\Working Set 和 Process\Handle Count。如果您怀疑是内核模式进程

导致了泄露,则还应该监视 Memory\Pool Nonpaged Bytes、Memory\ Pool Nonpaged

Allocs 和 Process(process_name)\ Pool Nonpaged Bytes。

Pages per second :每秒钟检索的页数。该数字应少于每秒一页。

Physical Disk:

%Disk Time %:指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。如

果三个计数器都比较大,那么硬盘不是瓶颈。如果只有%Disk Time 比较大,另外两个都

比较适中,硬盘可能会是瓶颈。在记录该计数器之前,请在 Windows 2000 的命令行窗

口中运行 diskperf -yD。若数值持续超过 80%,则可能是内存泄漏。

Avg.Disk Queue Length:指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。

该值应不超过磁盘数的 1.5~2 倍。要提高性能,可增加磁盘。注意:一个 Raid Disk 实

际有多个磁盘。

Average Disk Read/Write Queue Length:指读取(写入)请求(列队)的平均数。

Disk Reads(Writes)/s: 物理磁盘上每秒钟磁盘读、写的次数。两者相加,应小于磁盘

设备 大容量。

Average Disksec/Read: 指以秒计算的在此盘上读取数据的所需平均时间。

Average Disk sec/Transfer:指以秒计算的在此盘上写入数据的所需平均时间。

Network Interface:Bytes Total/sec 为发送和接收字节的速率,包括帧字符在内。判断

网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。

SQL Server2000: %Processor Time,CPU 使用率

General Statistics,Logins/sec,这是每秒登录到 SQL Server 的计数。 SQL Statistics: Batch Requests/sec,每秒收到的 Transact-SQL 命令批数。这一统计信

息受所有约束(如 I/O、用户数、高速缓存大小、请求每秒收到的 Transact-SQL 命令批

数。这一统计信息受所有约束(如 I/O、用户数、高速缓存大小、请求的复杂程度等)

影响。批请求数值高意味着吞吐量很好。

Page 51: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

51

Access Methods(访问方法) 用于监视访问数据库中的逻辑页的方法。 . Full Scans/sec(全表扫描 /秒) 每秒不受限的完全扫描数。可以是基本表扫描或全索引扫

描。如果这个计数器显示的值比 1 或 2 高,应该分析你的查询以确定是否确实需要全表

扫描,以及 S Q L 查询是否可以被优化。 . Page splits/sec(页分割/秒)由于数据更新操作引起的每秒页分割的数量。 Buffer Manager(缓冲器管理器):监视 Microsoft® SQL Server™ 如何使用: 内存存储数

据页、内部数据结构和过程高速缓存;计数器在 SQL Server 从磁盘读取数据库页和将

数据库页写入磁盘时监视物理 I/O。 监视 SQL Server 所使用的内存和计数器有助于确

定: 是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果

是这样,SQL Server 必须从磁盘检索数据。 是否可通过添加更多内存或使更多内存可

用于数据高速缓存或 SQL Server 内部结构来提高查询性能。 SQL Server 需要从磁盘读取数据的频率。与其它操作相比,例如内存访问,物理 I/O 会耗费大量时间。尽可能减少物理 I/O 可以提高查询性能。 .Page Reads/sec:每秒发出的物理数据库页读取数。这一统计信息显示的是在所有数据

库间的物理页读取总数。由于物理 I/O 的开销大,可以通过使用更大的数据高速缓存、

智能索引、更高效的查询或者改变数据库设计等方法,使开销减到 小。 .Page Writes/sec (.写的页/秒) 每秒执行的物理数据库写的页数。 .Buffer Cache Hit Ratio. 在“缓冲池”(Buffer Cache/Buffer Pool)中没有被读过的页占整

个缓冲池中所有页的比率。可在高速缓存中找到而不需要从磁盘中读取的页的百分比。

这一比率是高速缓存命中总数除以自 SQL Server 实例启动后对高速缓存的查找总数。

经过很长时间后,这一比率的变化很小。由于从高速缓存中读数据比从磁盘中读数据的

开销要小得多,一般希望这一数值高一些。通常,可以通过增加 SQL Server 可用的内

存数量来提高高速缓存命中率。计数器值依应用程序而定,但比率 好为 90% 或更高。

增加内存直到这一数值持续高于 90%,表示 90% 以上的数据请求可以从数据缓冲区中

获得所需数据。 . Lazy Writes/sec(惰性写/秒)惰性写进程每秒写的缓冲区的数量。值 好为 0。 Cache Manager(高速缓存管理器) 对象提供计数器,用于监视 Microsoft® SQL Server™ 如何使用内存存储对象,如存储过程、特殊和准备好的 Transact-SQL 语句以及触发器。 . Cache Hit Ratio(高速缓存命中率,所有 Cache”的命中率。在 SQL Server 中,Cache 可

以包括 Log Cache,Buffer Cache 以及 Procedure Cache,是一个总体的比率。) 高速缓存

命中次数和查找次数的比率。对于查看 SQL Server 高速缓存对于你的系统如何有效,这

是一个非常好的计数器。如果这个值很低,持续低于 80%,就需要增加更多的内存。 Latches(闩) 用于监视称为闩锁的内部 SQL Server 资源锁。监视闩锁以明确用户活动和

资源使用情况,有助于查明性能瓶颈。 . Average Latch Wait Ti m e ( m s ) (平均闩等待时间(毫秒)) 一个 SQL Server 线程必须等

待一个闩的平均时间,以毫秒为单位。如果这个值很高,你可能正经历严重的竞争问题。 . Latch Waits/sec (闩等待 /秒) 在闩上每秒的等待数量。如果这个值很高,表明你正经历

对资源的大量竞争。

Page 52: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

52

Locks(锁) 提供有关个别资源类型上的 SQL Server 锁的信息。锁加在 SQL Server 资源

上(如在一个事务中进行的行读取或修改),以防止多个事务并发使用资源。例如,如果

一个排它 (X) 锁被一个事务加在某一表的某一行上,在这个锁被释放前,其它事务都不

可以修改这一行。尽可能少使用锁可提高并发性,从而改善性能。可以同时监视 Locks 对象的多个实例,每个实例代表一个资源类型上的一个锁。 . Number of Deadlocks/sec(死锁的数量/秒) 导致死锁的锁请求的数量 . Average Wait Time(ms) (平均等待时间(毫秒)) 线程等待某种类型的锁的平均等待时间 . Lock Requests/sec(锁请求/秒) 每秒钟某种类型的锁请求的数量。 Memory manager:用于监视总体的服务器内存使用情况,以估计用户活动和资源使用,有

助于查明性能瓶颈。监视 SQL Server 实例所使用的内存有助于确定: 是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果是这

样,SQL Server 必须从磁盘检索数据。 是否可以通过添加更多内存或使更多内存可用于数据高速缓存或 SQL Server 内部结构

来提高查询性能。 Lock blocks:服务器上锁定块的数量,锁是在页、行或者表这样的资源上。不希望看到一

个增长的值。 Total server memory:sql server 服务器当前正在使用的动态内存总量 .

Page 53: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

53

3. 对Unix(Linux等)的监视。可以到网站下载一个配置好的linux端配置文件

Unix/Linux操作系统在企业级应用中非常广泛,我们通常会碰到,那么我们如何监视

Unix/Linux操作系统的资源呢?

1.首先要在Unix/linux下安装一个守护进程,rstatd ,这个安装包,可以到网上下载,

我也可以提供

2.安装方法; 解压到一个目录,然后./configure, make , make install ,安装完成

3.执行./rpc.rstatd start rstatd, 启动这个守护进程

4.从LR里面add measurement, 填写linux机器的IP,出现所有unix/linux的计数器,包

括cpu的,mem的,disk,network的,看看这个图片

5.每个计数器的含义:

average load :在过去的1分钟,的平均负载

cpu utilization: cpu的使用率

disk traffic: disk传输率

Page 54: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

54

paging rate: 每秒从磁盘读到物理内存,或者从武力内存写到页面文件的内存页数

Swap-in rate: 每秒交换到内存的进程数

Swap-out rate: 每秒从内存交换出来的进程数

4. LoadRunner 如何监控Apache,需要修改Apache的配置文件httpd.conf. <Location /server-status> SetHandler server-status Order deny,allow Allow from all Allow from .your-domain.com </Location> 把这节加在 httpd.conf 里面, restart apache 即可。

第四部分:利用Analysis 分析结果

LR 的测试数据分析功能也异常强大,包含了很多概率数理统计的知识,有各种各样的

报表,甚至可以将单个报表组合,也可以导出到 Excel 文件,Html 文件,word 文件。 对 LR 压力测试结果的思考,利用 LR 做过很多个项目的压力测试了,期间也曾经用过

其他的工具,比如:OpenSTA, Webload 等,但是还是 喜欢 LR,它的结果统计分析功

能异常强大,经历了实践的考验,这是其他工具所不具备的。也曾经怀疑过 LR 的结果

的准确性,但是 后发现还是设置的问题,只要充分利用 LR 提供的功能是可以得到满

Page 55: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

55

意的结果的,得到与客户实际相似的结果,这不就是我们追求的目标吗?关于 LR 结果

的讨论,请大家访问:http://www.sztest.net/forum/showthread.php?s=&threadid=5222

4.1 Analysis 的设置:

点击 file 菜单,选择 cross with result,这项的含义是比较两次测试的结果,一般用在修

改程序后的重新测试,看性能是否提高。

Page 56: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

56

结果图表是这样的:可以很清楚看到 2 次的结果差异。

Page 57: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

57

点击 tools,选择 options 设置,这里可以设置测试数据临时存储路径,以及 percentile 的

值。

点击 tools 下的 templates,可以将你的设置保存为模板,下次生成图表时候,以这个模

板为基础。 在一个图表上点击右键,可以设置相对时间或者绝对时间显示图表:

Page 58: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

58

4.2 几个重要统计参数的解释:

Set Granularity:设置图表显示的颗粒度,越小越精确。 Viewing Measurement Trends :标准化 Y 轴的值,使 Y 轴的值向 0 汇聚,使你观察图象

的趋势。 You can view the pattern of a line graph more effectively by standardizing the graph's y-axis values. Standardizing a graph causes the graph's y-axis values to converge around zero. This cancels the measurements' actual values and allows you to focus on the behavior pattern of the graph during the course of the scenario. Analysis standardizes the y-axis values in a graph according to the following formula: New Y value = (Previous Y Value - Average of previous values) / STD of previous values To view a line graph as a standardized graph: Loadrunner 中 Std.Deviation:MI 的定义:Basically, the STD is a measure of the dispersion of a set of numbers. As the Controller gathers data, the STD, 90th percentile, etc. are recalculated based on the new set. 实际上这个标准差是来表示数据的集中还是分散,这个值越小,表示 row data 用集中,

表示每個單一的 response time 的值大致上是差不多的,也許是你的 scenario 設計的讓

让 loading 很平均,或是你的系統很稳定。 Loadrunner 中 90 Percent 是表明什么的?

Page 59: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

59

答:The 90th percentile is a measure of stastical distribution, unlike the median.

The median is the middle value. The median is the value for which 50% of the

values were bigger, and 50% smaller. The 90th percentile tells you the value for

which 90% of the data points are smaller and 10% are bigger.

Statistically, to calculate the 90th percentile value:

1. Sort the transaction instances by their value.

2. Remove the top 10% instances.

3. The highest value left is the 90th percentile.

Example:

There are ten instances of transaction "t1" with the values 1,3,2,4,5,20,7,8,9,6

(in sec).

1. Sort by value -- 1,2,3,4,5,6,7,8,9,20.

2. Remove top 10 % -- remove the value "20."

3. The highest value left is the 90th percentile -- 9 is the 90th percentile value.

The 90th percentile value answers the question, "What percentage of my

transactions have a response time less than or equal to the 90th percentile

value?" Given the above information, here is how LoadRunner calculates the 90th

percentile

之所以有需要这个值,是因为有时候并不需要所有的值都 100%满足要求,只需要到 90%,

或者 95%就行,这个值可以设置。

4.3 页面分解

页面分解需要事先在场景中设置,用一些用户采集数据,在 Controller 的 Tools 下拉

菜单,选 Options 会看见一个 Web Page Breakdown 选项。 选中 Enable Web Page Breakdown 的选择按钮。用 1%的用户执行 Web Page Breakdown, 就可以得到你想要的

Web Page Breakdown 图了。数值不能太大,否则就会影响 Load Generator 的性能。 因为

它必须对每一个返回的页面都作很详细的分析。缺省是 1%用户。

Page 60: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

60

如果某个 transaction 的时间过长,为了分析问题出在哪里?就可以利用页面分解了,它

可以把每个页面分解成:

DNS 解析时间:浏览器访问一个网站的时候,一般用的是域名,需要 dns 服务器把这个

域名解析为 IP,这个过程就是域名解析时间,如果我们在局域网内直接使用 IP 访问的

话,就没有这个时间了。 Connection:解析出 Web Server 的 IP 地址后,浏览器请求被送到了 Web Server,然后浏

览器和 Web Server 之间需要建立一个初始化 HTTP 连接,服务器端需要做 2 件事:一是

接收请求,二是分配进程,建立该连接的过程就是 connection 时间。 First Buffer:建立连接后,从 Web Server 发出第一个数据包,经过网络传输到客户端,

浏览器成功接受到第一字节的时间就是 First Buffer。这个度量时间不仅可以表示 Web Server 的延迟时间,还可以表示出网络的反应时间。 Receive:从浏览器接收到第一个字节起,直到成功收到 后一个字节,下载完成止,这

段时间就是 receive 时间。 其他的时间还有 SSL Handshaking( SSL 握手协议,用到该协议的页面比较少)、

ClientTime(请求在客户端浏览器延迟的时间,可能是由于客户端浏览器的 think time 或者客户端其他方面引起的延迟)、Error Time(从发送了一个 HTTP 请求,到 Web Server发送回一个 HTTP 错误信息,需要的时间)

Page 61: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

61

为了确认问题缘由到底是服务器还是网络,选择“Time to First Buffer Breakdown”,

Page 62: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

62

发现 network 时间比 Server 时间要高的多,从而确定问题是 network 引起的。

4.4 报表组合

Analysis 默认的图表都是以时间作为横坐标,然而在分析结果的过程中,我们可能需要

以“运行的用户数”作为横坐标,来比较结果。假如我们要画出 Response time ——VUsers 的图表,可以这样操作。首先打开 Windows Resources 图表,然后在图表上点鼠标右键,

选择 Merge Graphs。

Page 63: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

63

出现Merge Graphs 对话框

选择第一项“Overlay”,出现以下的图表,这样是把两个图表进行了合并,两条曲线的

Page 64: LoadRunner自动化测试工具的应用 · 3 第一部分:LoadRunner的简介 LoadRunner是一种预测系统行为和性能的工业级标准负载测试工具。通过以模拟上

64

纵轴 共用一个原点,横轴还是时间轴。 选择第二项“Title”,出现以下的图表,这样是把两个图表进行了合并,两条曲线的纵轴

不再共用一个原点,VUsers 的原点在 Windows Resouces 的上面,横轴还是时间轴。 选择第三项“Correlate”,就是以 VU 为 X 轴, 响应时间为 Y 轴。