通常来说,负载测试可以采用手动和自动两种方式。手动测试会遇到很多问题,如无法模拟太多用户、测试者很难精确记录相应时间、连续测试和重复测试的工作量特别大等。因此对于负载测试,手动方式通常用于初级的负载测试。目前,绝大多数的负载测试都是通过自动化工具完成的。
负载测试的相关问题
从网站内容上看,每个网站都有自己的客户群和工作负载,不同网站其软硬件结构差异也很大。下图是一个网站的基本框架。
这种复杂性给负载测试带来了很大的挑战。一方面,由于一些设备的原因,有时我们不能直接进行负载测试,必须绕过某些设备,造成很大麻烦。另一方面,由于整个体系结构的复杂,也给寻找问题带来了一定的困难。例如防火墙常常阻止负载测试的进行,因此通常需要对防火墙进行调整,让它暂时支持负载测试; 有时服务器的应用程序采用加密方式与客户端进行交互,在这种情况下,还需要更改服务器应用程序。因此,负载测试人员需要对整个网络架构和应用系统非常熟悉。
另外,负载测试的成功与否,在很大程度上取决于自动化工具。在功能方面,主要考虑它所支持的协议、分析方式、监视目标种类等,以及该工具能否精确记录、回放用户的访问情况。在性能方面,则主要考虑它模拟虚拟用户的能力,例如在一定资源下可以模拟的用户的数量和速度。
负载测试的过程
负载测试是一项非常复杂的工作,一次测试常常要持续几天甚至几周。因此,在进行一次负载测试前,必须做好充分的准备,可以按照以下几个步骤来进行。
(1)系统分析
分析被测系统需要满足什么要求,例如支持多少人在线、支持连续多长时间的访问等。测试者的主要任务就是将系统的需求转换成测试目标,对系统进行全面的分析和评估,并结合测试的实际环境和条件以确保测试目标和测试计划的正确性。
(2)产生脚本
为了模拟多个用户访问服务器必须编写脚本。简单的脚本可以通过自动化工具提供的脚本编辑环境来编写。复杂的脚本则通常是通过记录单用户的活动生成最初的脚本,再在此基础上进行修改以保证该脚本可以支持多个用户。其中最主要的修改是关于数据池的,因为不同用户通常使用不同数据,例如用户名和密码等。因此,我们通常要将这些数据存储在数据库(或者数据池)中,以便在执行中被脚本程序调用。
(3)构造运行场景
有了脚本后,就可以通过一个场景来管理这些脚本的执行。场景是一个执行单位,可以通过场景来模拟一个工作负载。在场景中,我们将管理脚本的数量、执行次数、执行时间等,甚至还可以加上一些定时器、同步点等控制机制。另外,还可以将模拟用户分配到不同的计算机上。
(4)运行场景
设置好场景后,就可以运行了。通常,在运行场景的同时还要启动相关监控模块,监控服务器性能、网络状态、Web服务器性能和数据库性能等。自动化工具同时记录了各种客户端信息,包括相应时间、交易成功率等。
(5)分析报告
通常,在场景运行后,自动化工具会生成标准报告,可以通过分析这个报告来分析整个系统性能,找到系统瓶颈。这一步骤通常需要测试人员和开发人员共同完成。
负载测试市场和工具
负载测试市场的发展非常迅速,预计到2003年该市场将达到7亿美元。从目前来说,负载工具市场主要由一些大的软件公司分享,例如CA、Rational和Mercury Interactive。
(1) Load Runner
Load Runner是Mercury Interactive公司推出的专业负载测试工具,是目前世界上最强大的负载测试工具之一,它占领了负载测试工具市场的半壁江山。这是一个企业级的自动化工具,提供了非常强大的监视功能,能够监控各种软硬件模块。
从支持的协议来说,Load Runner支持HTTP(S)、WAP、i-Mode、 RealPlayer、LDAP、Winsock、RMI、FTP、POP3、SMTP、CORBA、COM/DCOM以及Tuxedo等。在监视器部分,它支持Windows NT/2000/XP、 SUN Solaris、HP UX、IBM AIX和Linux等操作系统,支持Apache、Web Logic等各种Web Server,还支持各种大型数据库。
(2) Astra LoadTest
Astra LoadTest也是Mercury Interactive 公司推出的负载测试工具。相对Load Runner来说,该工具更加容易使用,不需要使用者掌握复杂的编程语言,完全通过可视化界面进行操作。该工具支持大量HTML相关技术,例如 JavaScript、XML、ActiveX、Flash、DHTML以及SSL等,并支持大部分的浏览器。它的另外一个优点就是能够高效模拟更多虚拟用户,例如使用PIII 1G/512M机器最大可以支持100~250个用户。另外,Astra LoadTest 继承了LoadRunner的监视模块,可以监控所有LoadRunner支持的对象。
由于Astra LoadTest并不是定位在企业级用户,因此它对一些高级协议的支持不够充分,不能支持CORBA、LDAP、COM、WAP以及POP3等协议。
(3) Rational Robot
Rational在软件测试方面也有非常好的成绩。该公司推出的Robot工具支持SQABasic这种面向对象的记录语言。不过,在性能测试方面,Robot并不是很出名。但是Robot提供了一种新的脚本记录语言—VU语言,它基于传统的C语言,能够方便地访问Robot提供的环境变量。同时 Robot还提供了很多良好定义的库函数,调用通信函数更加方便。Robot还提供了其他许多相关测试技术,例如数据池(Datapool)、同步点等,并且通过TestManager可以对所有类型脚本进行管理。
从功能来说,Robot支持众多的网络协议,例如COM、DCOM、SOCKET、IIOP、Tuxedo等,并且可以对协议进行过滤,选取自己关心的协议。从操作方面来说,它对用户的要求也比较高,需要用户在整个访问过程中,对客户和服务器之间的交互类型和内容比较熟悉,同时对Robot也必须有足够的了解。
(4) WebLoad
WebLoad是RadView公司推出的专业负载测试软件。WebLoad提供了一种非常简单的脚本语言记录通信过程,同时它主要支持HTTP相关的技术和应用协议,例如JavaScript、XML、Java、EJB、ActiveX、WAP、HTTP、SNMP、Real以及 Microsoft Streaming Technologies等。该软件的操作非常容易,并且提供格式良好的分析报告。目前IBM公司大量采用该产品进行负载测试