2024年3月18日发(作者:)

IBM Rational Performance Tester 和 HP Mercury LoadRunner 的比较

脚本开发,场景构建与配置,性能监控,测试结果分析

张 营 (), 软件工程师, IBM

谷 林 (), 软件工程师, IBM

2008 年 3 月 28 日

本文概要介绍 IBM Rational Performance Tester (简称 RPT)和 HP Mercury

LoadRunner (简称 LR)两个性能 / 压力测试工具,主要从脚本开发,场景构建与配

置,性能监控,测试结果分析几个方面,对 LR 和 RPT 的使用做了详细的对比分析,

并根据 IBM Lotus Form 系统测试团队从 LR 到 RPT 的迁移的工作经历中总结了一

些 RPT 的一些实用技巧。对于那些需要从 LR 工具切换到 IBM RPT 的测试人员的

测试技术的平滑过渡,具有较强的借鉴意义。

1 概要介绍

LoadRunner 是一种适用于各种体系架构的自动负载测试工具,通过模拟实际用户的操

作行为和实施实时性能监测,来帮助用户排查和发现问题。相比于 RPT, LR 能支持更

广范的协议和技术,适应面很广,为用户的特殊环境提供特殊的解决方案。LR 的组件

很多,其中最核心的组件包括:

IBM Rational Performance Tester(简称 RPT)也是一款性能测试工具,适用于基于

Web 的应用程序的性能和可靠性测试。Rational Performance Tester 将易用性与深入

分析功能相结合,从而简化了测试创建、负载生成和数据收集,以帮助确保应用程序具

有支持数以千计并发用户并稳定运行的性能。

RPT 是针对 Web 应用程序的性能测试工具,基于 Windows 和 Linux 的用户界面,

使用基于树型结构的测试编辑器提供高级且详细的测试视图。 提供不同用户数的灵活

的模拟,支持将 Windows 和 Linux 用作分布式负载生成器,使用最小化的硬件资源

实现大型、多用户的测试。 支持使用自定义 Java 代码的灵活测试定制。

LR/RPT 的脚本的开发过程通常都是采用录制 + 定制的模式。首先通过对典型业务逻

辑的录制,完成脚本中的基本业务的框架,然后针对录制结果,通过参数化,数据关联,

增加逻辑控制等方式加强脚本的适应性来满足特殊的业务需求。

LR:直接生成面向过程的运行代码

LR 通过对基本业务的录制,VuGen 将生成的 Vuser 函数(也称作 LR API)并将他

们插入到脚本中。在实践中,LR 脚本就是由这样的 Vuser 函数和一些定制代码组成

的。对于基于 Web(HTTP/HTML) 的应用程序的测试,多数用户选择基于 C 语言的

LR 脚本,显然,这种 LR 脚本是一种面向过程的脚本,开发者可以对最终运行的脚本

进行直接的修改与调整。对于开发者来说,这种 LR 脚本的开发方式比较灵活。相应

地,这项工作,对于开发者的编程基础,尤其是 C 语言和 LR API 的了解,要求都比

较高。

RPT:录制结果经过“翻译”生成最终的运行代码

与 LR 不同,RPT 的脚本录制过程可以拆分成两步。如图 1 所示,第一步,RPT

Recorder on RAC 负责记录用户的所有 HTTP 请求,生成一系列的 Trace 文件。

Trace 文件记录了用户与服务器的交互过程。第二步,当用户完成脚本的录制过程之后,

RPT Test Generator 能够根据 Trace 文件“翻译”一遍,生成最终运行的测试脚本。

这种生成临时 Trace 文件的好处是用户可以随时依据该 Trace 文件生成新的测试脚

本,然后再对脚本进行测试场景定制,而不用对同一个操作过程做多次录制操作。

图 1. RPT 脚本的录制和生成架构

2.2 参数化

录制业务流程时,LR/RPT 生成一个包含录制期间用到的实际值的脚本。假设用户要使

用不同于录制内容的值执行该脚本的操作时,就需要用参数替换已录制的值。这被称为

脚本参数化。脚本的参数化可以简化脚本,同时增强脚本适用性。对于 LR 和 RPT 脚

本,参数化过程类似,都是定义参数,为参数指定属性或者数据源的过程。但是在 LR

中,只有函数中的参数才能参数化,除此之外,其他字符串不能进行参数化。

RPT 的参数化过程同样简单(以替换用户登录密码为例来说明),首先,选中需要进

行参数替换的请求页面,如图 2 所示,选中左侧的登陆请求页面。在其右侧的 Test

Data 中则显示与该请求页面相关的所有数据信息,脚本录制人员可以用其他值代替图

2 中的 password 变量。

图 2. RPT 脚本参数化

数据关联类似于参数化,可以简化脚本,适应企业应用中需要动态数据的情况。默认情

况下,LR 和 RPT 都能做到一些基本的数据关联,但是由于 HTTP 请求之间关联的

复杂性,需要用户手动做一些数据关联。数据关联包含三个步骤,一是定义哪个录制的

值需要被关联(替换);二是定义数据源。三是定义被关联的数据与数据源之间的关联

关系。

LR 的数据关联过程如下:lr_save_XXXX(value,dataSource)语句将数据源的值保存