Web系统性能测试的研究
Web系统是以Internet为基础,是提供万维网服务的各种组件的集合,包括浏览器、服务器、应用程序和各种相关协议与标准,其三层基本架构为:客户端、应用处理层和数据处理层。Web系统的一个主要特点是用户量十分庞大,需要有处理事务并发的能力。
目前,Web系统的性能测试类型主要有压力测试、负载测试和容量测试等。
压力测试,即模拟实际应用的软硬件环境,对系统不断施加压力来确定系统能提供的最大服务级别的测试,其主要目的是测试硬件系统能否达到项目需求文档中的指标。
负载测试,即通过验证软件系统的性能来发现系统的负载能力,如:一定时间内最大支持的并发用户数、软件请求出错率等。
容量测试,即通过测试反映出系统中某个指标的极限值,如:数据库记录数。若Web系统的实际容量不能满足实际需求,那么应当寻找新的解决方案。
单元测试,即模块测试,完成对模块的验证工作。其目标在于分别完成每个单元的测试任务,以确保每个模块能正常运行。单元测试主要从程序的内部结构出发设计测试用例,多采用白盒测试技术,多个模块可以平行地进行单元测试。
集成测试是通过测试发现和接口有关的问题来构造程序结构的系统化技术,它的目的在于查找模块间接口的错误。通常把模块组装成系统的方式有两种:一次性组装方式和增殖式组装方式。前者的特点在于可以并行调试所有模块,后者的优点在于把可能出现的差错分散暴露出来,便于找出问题和修改。
软件确认通过一系列证明软件和需求一致的黑盒测试来完成,即检验开发的软件能否按顾客提出的要求来运行。其中,确认测试中一个重要元素就是配置复审,目的是为了保证软件配置的所有成分都齐全,软件配置复查的主要内容是文件资料的完整性和正确性。
Web网站在遇到访问高峰时,容易发生服务器响应速度变慢等情况,因此需要一种能模拟大量用户的访问Web系统的性能测试工具来进行压力测试。目前,市场上较为流行的性能测试工具有LoadRunner,该款软件能模拟成千上万的用户进行负载测试,最大限度地缩短测试时间、优化系统的性能。然而LoadRunner价格昂贵,支持底层协议差,错误提示方面不够细致。笔者在这里推荐另一种性能测试工具——Apache Jmeter,它是一个100%纯Java的桌面应用。Jmeter是Apache公司组织开发的开源代码项目,主要用于对软件做压力测试,既能测试静态资源又能测试动态资源,如:Java程序、Perl脚本、数据库和查询、FTP服务器等。由于Jmeter的完全可移植性以及多线程框架,Jmeter在性能测试领域已越来越受欢迎。
一个完整的Web系统的性能测试过程应包括以下几个步骤:明确性能测试需求、设计性能测试用例、执行性能测试和性能测试评估。进行性能测试前必须要了解系统的构成和测试需求。认真分析系统的需求说明书,掌握主要业务的需求,如Web测试中必须明确有多少用户访问网站等。根据详细的需求说明可以设计出相应的测试用例。常见测试用例的编写方法有:等价类划分法、边界值法、场景法、因果图和判定表法等。测试用例设计的原则为单个用例覆盖最小化,即一个测试用例尽可能地覆盖多个测试要素。因为性能测试的特殊性,测试用例应当设计的尽可能复杂,以发现更多的性能瓶颈。在执行性能测试时需要注意的是,单一环境下的性能测试得到的结果是不准确的,测试过程应在不同的测试环境中进行。最后则是对测试结果进行数据统计分析,收集相关信息,找到性能瓶颈。针对Web系统,主要分析网络带宽以及流量对用户操作的影响。Web的性能指标包括吞吐率、每秒点击次数、每秒HTTP响应数、每秒下载页面数、重复次数概要等。
打开Jmeter,首先在测试计划中添加线程组,在线程组中添加逻辑控制器和录制控制器,然后在工作台中添加非测试元件——HTTP代理服务器。点击HTTP代理服务器界面后设置端口号,即代理服务器的监听端口,此处设为8080,同时将目标控制器设为:测试计划>线程组。此外,我们还需在HTTP代理服务器中添加高斯随机定时器,定时器将会使相应的取样器被延迟。延迟的规则是:在上一个访问请求被响应并延时了指定的时间后,下一个被定时器影响的取样访问请求才能被发出去。代理服务器配置好后,打开浏览器,将局域网中的代理服务器设为localhost,端口号8080,然后在浏览器的地址栏中输入地址进行录制。
为了方便实用Jmeter测试工具,笔者选择了用Badboy录制测试脚本,从而避免了在Jmeter中繁琐的设置。Badboy是一个基于Web的自动化测试工具,不仅文件小、安装简单,而且不受安装环境的限制,测试人员无需编写复杂的代码即可进行测试。用Badboy录制测试脚本的步骤非常简单,在官网上下载Badboy后并安装,打开Badboy后新建脚本,默认添加一个录制步骤,在界面的地址栏中输入要录制的IP地址,本例中地址为:http://www.52testing.com/。点击开始录制按钮,我们可以直接在Badboy内嵌的浏览器中对被测的应用进行操作,所有的操作都会被记录在Badboy左侧的编辑窗口中。完成录制后只需点击工具栏中停止录制的按钮即可。完成脚本的录制后,通过File中的Export to Jmeter功能我们可以将录制好的脚本导出为Jmeter脚本格式,即后缀名为.jmx。启动Jmeter,打开刚刚生成的测试脚本即可用Jmeter进行测试。
用Jmeter打开Badboy导出的脚本文件51test.jmx,在线程组上添加监听器以及聚合报告,开始进行测试,测试结束后可以在聚合报告中看到测试结果。聚合报告中包含的具体属性有:请求个数、平均相应时间、中位数、90%用户响应的时间、最小响应时间、最大响应时间、错误率、吞吐量以及每秒从服务器端接收到的数据量。通过分析聚合报告可以了解该Web系统的性能,以便后续过程对系统的进一步优化。
随着Web系统的复杂性不断增强,系统性能的需求也越来越高。性能测试是Web系统测试中的一个重点,掌握基本的测试知识以及自动化测试方法,及时地开展性能测试能够保障Web系统的质量。
(西南科技大学程秋美)