基于Web 应用系统的性能测试综述
随着Internet 技术的发展,Web 应用系统越来越广泛的应用于金融、教育、政府等各个领域。Web 应用系统包括B/S 和C/S 两种模式,目前广泛采用B/S 模式。由于用户仅需通过浏览器便可访问应用程序,Web 应用系统呈现出的方便、快速、易操作等特点,让各大领域更加依赖Web 应用系统拓展自身的影响力。然而,对于某些热门的Web 站点,用户访问的频率很高,交互的信息量也非常庞大,过高的负载经常导致系统反应速度慢或者服务中断。因此,应用系统能否承受大量的并发用户数以及快速响应用户发送的请求,能否长时间稳定运行,哪些地方可能成为性能瓶颈,这些都是用户关注的系统性能问题。性能测试目的是为了检测系统性能是否符合用户的需求,通过负载测试、强度测试等方法,监控系统资源,找出性能瓶颈,从而验证系统能力和不断改善系统性能。因此,如何评价一个Web 应用系统的性能及寻找系统瓶颈,是软件开发过程的一个重要环节。
1 Web 应用系统性能测试
1.1 Web 应用系统体系结构
Web 应用系统通常由浏览器、Web 服务器、应用服务器、数据库服务器等构成。Web 应用系统目前主要采用的是B/S 三层结构,将系统分为表示层、业务逻辑层和数据层。它的基本工作流程:用户在浏览器中输入一个URL 地址,浏览器向该URL 地址所指向的Web 服务器发送请求;Web 服务器收到请求后, 读取正确的HTML 文件然后将它返回给浏览器, 其中HTML 文档中可能有其它的脚本语言,执行脚本程序,调用数据库服务器和其它服务器,返回结果并显示给用户。依据Web 应用系统的体系结构,Web 应用系统性能测试主要可从三方面进行:应用在网络上的性能测试、应用在客户端性能测试、应用在服务器端性能测试,通常服务器包括Web 服务器、中间件应用服务器和数据库服务器。本文主要讨论应用在客户端的性能测试,它测试的入口是客户端,主要包括负载测试、压力测试、疲劳强度测试和大数据量测试等。
1.2 性能测试与性能指标
性能测试是软件质量保证的重要环节, 为了检测系统性能指标是否达到用户的需求, 通过加载不同的负载观察系统的运行情况,找出系统瓶颈,不断优化系统性能。如图2 所示,Web 应用系统性能不仅与服务器的硬件资源和软件配置密切相关,而且受加载用户量、网络带宽、业务操作、应用系统结构设计等多种因素影响。系统性能优化可考虑从服务器层面、网络层面、应用层面出发,衡量实现的便捷程度,选择优化方案。系统性能主要通过性能指标体现, 在不同的并发用户数和操作下,系统性能指标数据不同,通过分析性能数据寻找系统的瓶颈。因此,性能指标的筛选在性能测试过程中极其重要。
Web 应用系统性能测试主要包括以下几类基本性能指标:
1)吞吐量是某单位时间内系统所处理的用户请求数。一般是用系统每秒字节数或请求数来衡量。该指标反映了系统的事务处理能力,通常用户请求数越大,吞吐量就越大,当用户请求数达到一定值,吞吐量逐渐处于饱和状态并可能出现拐点,此时随着负载的不断增加,系统的性能会逐渐降低。
2)响应时间是用户发送请求到客户端接收服务器返回的结果所经历的时间。当用户访问的是系统的静态页面时,系统响应用户请求的时间比较短;当用户发送的请求需要访问数据库服务器时,经历的时间较长,因此大量并发用户同时读写数据库信息时,Web 服务器面临的负担较重,响应时间增加。当系统的某一种或几种资源耗尽时,响应时间急剧增加,通过观察响应时间快速增长时其他性能数据的变化,寻找系统可能存在的瓶颈。涉及的具体性能指标包括最大事务响应时间、平均事务响应时间、最小事务响应时间。
3)最大并发用户数是在某段时间内,系统能够同时正确及时处理的最大用户数。通常采用负载测试和压力测试可获得系统符合用户需求的并发用户数和能提供的最大服务级别。
4)资源利用率是系统运行过程中不同资源的使用情况,一般包括硬件、操作系统、网络、数据库等方面,例如服务器的CPU、内存、磁盘、网络带宽等。通常系统资源利用率与加载用户数成正比,当资源利用率保持或长期接近100%,说明该资源已经成为系统的瓶颈,通过提升资源的容量可缩短响应时间。系统资源具体性能指标如下:CPU 处理器:可查看System%Total Processor Time 性能计数器的计数值,如果%Processor Time 长时间超过95%,等待队列超过2,则CPU 可能存在瓶颈。若该服务器是数据库服务器,Processor%User Time 值较大,则可能是数据库排序及算法消耗CPU 较多,可考虑对数据库系统进行优化。磁盘I/O:主要观察Page Reads/sec、%Disk Time 及Average Disk Queue Length 指标,若每秒读取页次数很低,但%Disk Time 和Average Disk Queue Length 值很高,则磁盘I/O 可能不足,同时可通过计算得到每磁盘I/O 数,如果该数值超过了磁盘I/O 能力,则磁盘可能存在瓶颈。内存:Windows 资源主要监控物理可用内存, 若该指标持续很低, Page/sec 长期高于几百, 且PageRead/S 超过5,则内存可能存在瓶颈,Unix 系统资源关注Free、Paging Rate 等指标。
5)其他性能指标分析系统执行不同的业务操作,服务器返回的结果页面有所不同,静态页面消耗的响应时间较短,动态页面需与数据库服务器交互,响应时间较长。通过监控页面下载时间,分析不同事务的开销,系统性能优化可从下载页面角度出发,尽量转换动态页面为静态页面,减少下载页面组件大小。监控性能指标主要包括:DNS Time: 显示使用最近的DNS 服务器将DNS 名称解析为IP 地址所需的时间; DNS 解析时间是指示DNS 解析问题或DNS 服务器问题的关键指标。Client Time:客户端发生的延迟时间。Connect Time:从客户端发送出请求到与Web 服务器建立初始连接的时间;可作为度量网络质量好坏的指示器。FirstBuffer Time:包括服务器处理时间和网络延迟时间。Receive Time:从浏览器接收第一个字节到成功接收完所有字节的时间。可结合下载页面组件大小和时间度量网络质量。判断系统数据库、软件参数配置、网络层面上是否存在瓶颈,需监控数据库服务器资源使用情况、中间件性能、网络延迟等性能指标。由于Web 应用系统结构复杂,性能测试是一项复杂的工作,涉及的性能指标较多,测试过程中应明确测试目的,分析重要的性能指标,通常借助自动化测试工具监控性能指标数据。上述各类性能指标从不同层➳面体现系统的性能,吞吐量反映系统的处理能力,响应时间反映系统的响应速度,并发用户数衡量系统的容量,资源利用率衡量系统的运行状态,综合上述指标,整体呈现出系统的性能状况。
2 性能测试方法
性能测试评估系统正常运行情况下的承受力和稳定性,Web 系统性能测试通过模拟真实环境下的负载, 采集系统各方面的性能数据,分析系统的性能与存在的瓶颈。测试方法主要包括负载测试、压力测试、疲劳强度测试、大数据量测试等。在测试过程中,通常需要合理的结合这几种测试方法,模拟真实环境,设计不同的测试场景获取更多有效的性能数据。
1)负载测试:在系统☭正常运行情况下模拟不同加载用户量和复杂度的操作,考察系统各项性能的变化情况。主要是验证系统性能满足用户需求的情况下,系统所能承受的最大负载级别。为确保负载测试的有效性,通常借助自动化测试工具,尽量模拟真实用户的操作,执行测试。由于时间和资源的有限,负载测试不可能对Web 应用系统所有功能操作进行性能测试,因此,测试期间需选择几项主要功能进行测试。测试策略包括独立业务性能测试和混合业务性能测试。独立业务性能测试是指模拟用户都执行同样的事务脚本,其目的是观察不同事务的响应时间和对系统资源的需求。独立业务性能测试可尽量选取几个消耗系统资源较高或复杂度较大的业务操作,有利于定位单项业务操作是否成为系统的瓶颈,从应用层面上优化该项业务逻辑,缩短响应时间和减少系统资源的开销。混合业务性能测试是模拟用户的真实操作环境,依据日常不同事务的执行比例设置场景,执行测试并观察性能指标数据的变化。混合业务性能测试的优点是测试环境接近实际运行的情况,可获得系统满足用户性能需求的并发用户数。系统可监控平均事务响应时间、平均吞吐量、服务器CPU 利用率,页面交换率、页面下载时间等详细指标分析系统的整体性能,判断性能符合用户需求的并发用户数,分析占用系统资源过多和响应时间较慢的事务,从应用层面、硬件☑资源/软件配置、网络各方面优化系统性能。
2)压力测试:不断增加负载,测试系统能获得服务的最大级别和验证系统的故障恢复能力。确定在什么负载条件下,系统提供服务出错或者系统崩溃。一般来说先进行系统的负载测试,确认出各种性能指标的极限数据后,再执行压力测试。对系统不断的持续加压,系统提供服务出错或崩溃,可暴露出系统存在的瓶颈。判断服务器资源是否成为瓶颈,重点关注系统资源性能指标、事务成功数、事务失败数、平均事务响应时间等性能指标。
3)疲劳强度测试:强调的是对系统能否长时间正常运行的考验,通常以最大并发用户数或者系统日常用户数持续执行一段时间,监控性能指标,考察系统能否稳定运行,是否出现性能降低、内存溢出等情况。执行测试重点关注平均事务响应时间、系统资源等性能指标,观察系统长时间运行的状态与性能。
4)大数据量测试:大数据量测试重点在于考察数据量的变化对于系统性能的影响,主要可分为独立数据量测试和综合数据量测试。独立数据量测试是针对系统添删改、查询等操作而进行的大数据量测试,综合数据量测试是指与压力测试、负载测试、疲劳强度测试等相结合而进行的大数据量测试。测试数据的准备可借助自动化测试工具来生成。侧重关注平均事务响应时间、数据库资源等性能指标,观察执行大数据量测试时,数据库是否存在瓶颈,是否需要采用负载均衡、优化数据库结构设计等方式优化系统性能。
3 测试过程与结果分析
系统性能测试是评估系统能力、分析系统瓶颈的一个重要手段,通过性能测试用户能够了解在不同的状态下系统业务的响应时间,以及系统能够处理的最大并发用户数。性能测试过程主要包括性能需求分析、测试设计、测试执行、测试结果分析等步骤。下面通过实例说明测试Web 应用系统性能的步骤与结果分析,本文借助自动化测试工具LoadRunner,采用负载测试、压力测☯试方法评估系统性能。
3.1 测试背景
某市人口信息管理系统采用B/S 体系结构,系统相关服务器6 台,包括数据库服务器2 台、应用服务器2 台,GIS 服务器和决策分析服务器,主要提供人口基础数据的查询、统计分析、GIS 定位等功能。系统在局域网带宽100Mbps 网络环境下使用,数据库采用Oracle 10g,中间件采用Websphere 6.1,测试工具为LoadRunner 8.1。该系统日常访问用户数为1000,一般系统支持的并发用户数应为日常访问量的20%,则1000*20%=200,测试目的为验证系统能否支持200 个并发用户访问。用户要求主要操作的响应时间不超过15S,工作状态下资源利用率不超过85%为较优状态,验证系统满足这些指标时支持的并发用户数。本次测试目的主要采用负载测试、压力测试方法,评估系统符合用户需求的并发用户数和提供的最大服务级别。具体测试环境如表1。
3.2 测试过程
针对系统的测试目的,主要采用负载测试、压力测试方法:
1)负载测试策略:通过调查分析,用户日常执行的操作包括人口简单查询、高级查询、统计分析、决策分析、GIS 定位等功能。借助自动化测试工具LR 录制五类脚本,简单查询、高级查询、统计分析脚本初始加载50个用户运行5 分钟,每次增加50 个用户运行测试,决策分析、GIS 定位搜索消耗资源较高且响应时间长,因此初始加载1 个用户运行5 分钟,每次增加10 个用户,观察系统性能数据的变化。本次测试选择独立业务性能测试,有利于分析单项业务操作消耗的系统资源。
2)压力测试策略:在负载测试的基础上,获得符合用户需求的并发用户数,不断持续加压,评估系统能支持的最大服务级别。
3.3 测试结果分析
利用LoadRunner 测试工具分别执行简单查询、高级查询、统计分析、决策分析、GIS 定位功能五类脚本。通过测试发现系统支持200 个最大并发用户访问首页,简单查询、高级查询、统计分析支持150 并发用户访问的平均响应时间小于15S, GIS 定位和决策分析功能支持20 个最大并发用户,GIS 定位功能在10 个并发用户时呈现性能较优。
高级查询业务操作在用户加载150 个用户时系统性能较优, 平均事务响应时间为6.502S,并发用户数加载到200,系统的性能急剧降低,平均吞吐量急剧减小,并出现大量失败事务,加载到250 个用户时,服务器出现宕机现象。
观察发现CPU 利用率及可用内存等系统资源相关指标适中,排除系统资源的瓶颈。测试过程中发现GIS 定位功能支持的并发用户数较小,加载到20 个并发用户时系统平均事务响应时间过长,分析发现GIS 定位功能消耗的数据库资源较多,可考虑从数据库设计、搜索算法角度出发缩短响应时间。进一步寻找系统瓶颈可依据页面下载时间细分图从执行业务操作、下载页面组件大小与时间、网络质量层面进行分析,以GIS 定位功能的页面下载时间分析为例。
执行GIS ภ定位操作测试, 系统Connect Time 为0.002S,Client Time 为0.001S,Receive Time 为0.002S,FirstBuffer Time 平均值为37.77S, 最大值为64.035S。如图3 为FirstBuffer Time 的细分图,第一次缓冲时间下载包括三个组件,第二个组件大小为17.024KB,但消耗的Server Time 为37.57s,服务器处理时间过长,Network Time 为0.2S,网络传输质量较好,可考虑从应用层面优化业务逻辑,算法等方式缩短服务器处理时间。
系统在业务复杂度不同和加载用户量不同的情况下,响应时间不同,测试过程中应尽量模拟实际操作环境,结合负载测试、压力测试、疲劳强度测试、大数据量测试等方法设计测试场景执行测试。测试结果分析可结合系统资源图、Web 资源、数据库资源等分析图,分析不同负载下性能测试指标数据变化趋势, 按照服务器瓶颈-网络瓶颈-中间件瓶颈-应用瓶颈的思路逐步分析系统可能存在的瓶颈,并可通过反复测试验证瓶颈所在。
4 结束语
本文通过介绍性能测试的关键性能指标和测试方法, 重点阐述了借助性能指标评估和分析Web 应用系统性能的过程。Web 应用系统性能测试是一个复杂的过程,应依据测试目标设计场景,监控重要性能指标,便于分析系统可能存在的性能瓶颈。测试过程中应尽可能的模拟真实环境及用户操作反复执行测试保证测试数据的有效性。