性能测试负载目标探讨

翻译 2011年10月18日 23:17:13
 
本帖最后由 dionysus 于 2011-5-30 23:21 编辑

一、前提
近期我跟踪了2个外协人员参与的性能测试项目,沟通中发现大家在制定测试策略时对如何确定负载目标、计算并发用户数量等方面有很多不同方法,本文希望能对各种方法进行探讨,并根据已有经验对策略制定方面给出一些自己的建议。本文被测应用以银行系统为主,压力发起工具LoadRunner为例。

二、术语
      单位时间:本文中以1秒为单位时间。
      在线用户数量:访问被测应用的用户数量,但单位时间内用户不会同时对被测服务器发送请求,产生压力。
      并发用户数量:部分书中分狭义和广义两种,狭义指单位时间内同时执行一种操作的用户数量,广义指单位时间内同时执行多种不同操作的用户数量,广义的并发用户操作更接近实际业务环境。但本文中的并发用户数量仅指狭义而言,因为广义是多种狭义的组合。
      TPS:Transaction per Second,每秒事务数量,单位是事务/秒。
      TRT:Transaction Response Time,事务响应时间,指TPS稳定时的平均事务响应时间,单位是秒。

三、负载目标

1. 负载视角
制定测试策略是性能测试的重点,包括测试范围、场景提取、负载目标、发起方式、通过标准等。而负载目标关系整个测试的场景设计、并发配比、结果评判,因此确定负载目标也决定了测试的总体方向。通过了解业务需求,负载目标都会转化为一系列具体的数值,一般可从两方面来划分:
      前端:业务人员更关注前端并发用户数量或在线用户数量,以人数衡量;
      后端:技术人员更关注后端应用服务器和数据库服务器的负载能力,以TPS衡量;
前端并发用户数量的计算在业界中有很多公式和原则,如2/8原则、10%在线用户数量估算、(在线用户数量*session时间)/监控时间等,但各公式和原则计算出的并发用户数量并不精确,如有10万在线用户的系统不能说仅测试10万*10%=1万并发用户即可。
后端TPS反应被测应用的实际负载能力,对已有具体业务量的应用可以计算精确,如银行系统中某省行对公交易量日均10万笔,则可精确计算出TPS均值=10万/(6*3600)=4.63笔/秒(对公业务按6小时计算),若被测应用达不到TPS要求则完成不了当日业务。
同一个被测应用以不同视角估算负载目标,得到的数值可能会有很大差异,因此如何正确选择负载目标,将会直接影响之后的测试方法和场景设计。

2. 负载指标
抛开视角的选择,单从最终测试指标来说,对于一个软硬件环境固定的应用程序,只有一个负载指标是固定的,那就是最大事务处理能力 – 通常以TPS衡量。随着负载的增加,被测应用将会逐渐达到最大事务处理能力,若应用足够健壮,则负载继续增加,应用的事务处理能力也不会骤然下降。因此性能测试的目标就是确定被测应用的最大事务处理能力。以事务处理能力反推,将逐渐捋清TPS、TRT、并发用户数量、在线用户数量等负载目标的关系和估算。
1、TPS
Transaction的粒度会直接影响TPS的计算,因此Transaction定义时要保证粒度适当:
      C/S架构联机类应用中一笔交易往往会流经多层前置应用,需要确定压力发起工具所在位置,建议跨过前端直压被测应用,此时一个Transaction代表一支后台交易。
      B/S架构经管类应用中一个页面操作可能会和后台有多次交互,建议以页面上的操作为Transaction划分基准,但要保证Transaction内的交互操作在前端是不可再拆分的。
      LoadRunner发起压力时Action内的语句是反复迭代的,而LR计算TPS仅看1秒内执行了几次Transaction,如果Action内有多个Transaction则各事务的TPS都一样,反应不出各事务的真实处理能力,因此建议Action内只定义一个或尽量精简的Transaction。
由此TPS才可以准确表示被测应用的事务处理能力。
通过获取生产日志、参考相似系统等方式能够得到具体交易(事务)数量的被测应用程序,以TPS为负载目标是直接也最准确的。但要注意,若以TPS为目标,则前端配置的并发数量就不再代表并发人数,而是并发提交事务的数量。TPS和TRT的计算关系将在下面详述。
2、TRT
TRT指TPS稳定时(不一定是最大时)的平均事务响应时间,不关注个别事务,它和TPS关系紧密,随TPS的变化而变化。当负载增加时TRT会逐渐增大,直至事务阻塞,交易超时。
TPS × TRT = 并发提交事务的数量。如果以TPS=20为目标,且此时TRT=2秒,则并发提交事务的数量=20×2=40笔。如果1个用户单位时间内提交1笔事务,则可等于有40个并发用户数量。
设定好目标TPS后要同时兼顾TRT的表现,若TRT明显超出业务要求,即使达到负载目标也是无效的。TRT无固定的好坏标准,一般来说对OLTP的联机应用,从前端提交到返回不应高于3秒,后台应用程序和数据库的处理应在1秒左右。对OLAP的在线分析系统或一般网站可遵循3/5/8原则,或更长。
3、并发用户数量
通常理解并发用户数量就是LoadRunner里设置的VUser数量,通过梯度增加VUser,对比TPS变化即可找到被测应用的最大并发用户。但我却认为并发用户数量不等于LoadRunner中设置的VUser数量。受交易响应时间、thinktime、pacing和集合点等因素影响,VUser数量不能直接体现被测应用负载能力。假设同样10个VUser并发一次,如果A程序的响应时间是1秒,则A程序的TPS=10/1=10。而B程序的响应时间是5秒,则B程序的TPS=10/5=2。同样在混合场景中用VUser比例体现不同应用的负载比例也是错误的,混合场景下由于各交易相互影响,单交易负载时响应快的很可能现在出现阻塞,前端VUser的比例根本无法准确控制后端应用的压力。
因此我更愿意将“并发用户数量”和“并发提交事务数量”挂钩,体现被测应用实际负载:单位时间内n个用户并发向被测应用提交n个事务请求(n是相同的)。VUser的数量和发起设置只是实现并发用户数量的一种手段。
4、在线用户数量
在线用户数量与并发用户数量、TPS、TRT间没有固定的换算公式,我不提倡10%这样的粗糙比例,对联机类应用在线用户就是每天签到的柜员数量,对经管类应用就是月末、季末时所有登录系统的用户数量。在线用户数量可以从需求人员或生产管理员处获得大概数值,但不能通过性能测试倒推出在线数量。

四、负载目标选择

1. 有明确交易量的应用
通过上面对各种典型负载指标的分析可以看出,以TPS衡量的事务处理能力是最准确的负载目标。通过生产日志或相似系统的交易量可以算出TPS均值、峰值。根据2/8原则和业务扩展可估算更高的峰值。银行的联机类应用属于典型的有明确交易量的应用系统。
LoadRunner中可以通过设置Run-Time Settings的Pacing为At fixed intervals, every 1 sec,来控制每次迭代执行时间为1秒。如果迭代脚本里只定义一个Transaction,且TRT小于1秒,则VUser数量=并发用户数量=TPS,可以通过调节VUser数量方便控制负载目标。注意,如果迭代中包含多个Transaction,或TRT随着TPS目标的增加而变大,则需以TPS目标为基础,实时调整VUser数量和这里every N sec里的间隔时间。

2. 无明确交易量的应用
无明确交易量的被测应用建议以确定最大事务处理能力为目标。设置Pacing为As soon as the previous iteration ends,删除thinktime,部署发压工具和被测应用在同一网段,无网络瓶颈,让VUser能对被测应用产生最大负载。弱化VUser数量听上去的意义,递增直到达到被测应用的最大事务处理能力或其他性能指标阀值(如成功率或TRT)。新业务和经管类Web应用属于无明确交易量的应用系统。

3. VUser的意义
尽管建议在确定负载目标时弱化VUser的意义,但测试中还要注意一种情况,如果被测应用有具体的操作用户数量,如只有签到或登录的用户才能提交交易,则VUser的数量不能高于实际注册用户数量。就按照最大用户数量加压,以需求要求的TRT为目标调优被测应用,尽量提高TPS。

Jmeter性能测试全程实战

本套视频已经过国家版权认证保护,非法盗版倒卖者一律追究法律责任和赔偿!适用人群:无基础和初级测试工程师;想系统学习和提高的;想步入性能测试领域的;感兴趣的;但最好有LoadRunner的基础,因为一些太基础的概念不会再次重复!友情提示,觉得自己是高手的请绕行!
  • 2017年05月07日 15:05

软件测试——负载,压力,容量和性能测试的联系和区别?

最近,在总结系统测试类型的过程中,对“负载测试、压力测试、容量测试、性能测试”这几个测试类型有些分不清界限,上网查了一些资料,汇总如下:   1.负载测试(Load testing):        ...
  • haiyan_cf
  • haiyan_cf
  • 2014-08-31 10:36:17
  • 4229

负载测试、压力测试和性能测试的区别

负载测试、压力测试和性能测试的区别      负载测试(Load testing)、压力测试(Stress Test,应称为强度测试)和性能测试,这三个概念常常引起混淆,难以区分,从而造成不...
  • Triste_1993
  • Triste_1993
  • 2015-11-19 21:56:22
  • 1278

新系统如何确定性能测试目标

前提:新系统上线没有明确数字对比,性能需求非可度量完成目标: 1、服务器的某些资源已耗尽,如CPU、内存、句柄、数据库存在大量slow query 2、需求证明系统是可水平扩展的,即增加服务器配置...
  • silencemylove
  • silencemylove
  • 2015-07-23 11:28:34
  • 2168

LoadRunner:Controller及结果分析 一、性能测试概述 1、关于性能测试目标: ①TPS ②一定并发用户数下功能点的响应时间 ③一定响应时间内功能点的并发用户数 性能测试不是

LoadRunner:Controller及结果分析 一、性能测试概述 1、关于性能测试目标: ①TPS ②一定并发用户数下功能点的响应时间 ③一定响应时间内功能点的并发用户...
  • qq_27888773
  • qq_27888773
  • 2017-10-17 19:55:59
  • 347

性能测试工作的完整过程,目的,最关键的是什么

性能测试工作的完整过程,目的,最关键的是什么   2009-08-07 16:42: 软件测试|举报|字号 订阅 系统测试分类:功能测试(正确性,容错性,并发逻...
  • Alpha5
  • Alpha5
  • 2014-07-11 12:09:04
  • 5930

Visual Studio进行Web性能测试- Part I

原文作者:Ambily.raj Visual Studio是可以用于性能测试的工具之一。Visual Studio Test版或Visual Studio 2010旗舰版为自动化测试提供了支持。本文介...
  • binhualiu1983
  • binhualiu1983
  • 2016-06-12 14:43:59
  • 2744

性能测试中如何设计真实的负载呢?

具体改如何设计和实施整个过程呢?这里划分了几个环节:   [1]场景确定与压测脚本准备用户在注册时需要提交用户的姓名、手机号和手机验证码,之后提交申请即可,所以实际上用户申请注册只调用了一个AP...
  • jiangbqing
  • jiangbqing
  • 2017-05-11 10:03:07
  • 275

性能测试报告模板

  • 2015年09月22日 16:45
  • 282KB
  • 下载

压力测试一(什么是压力测试,压力测试、负载测试和性能测试的区别)

测试有压力测试、负载测试、性能测试、功能测试等等,但究竟什么是压力测试,初学者都能说上一两句,谁还不懂“压力”是什么意思?谁还没经历过压力?然而,压力测试的真正含义和目的,它和其它测试(特别是负载测试...
  • Mc_haoxiansen
  • Mc_haoxiansen
  • 2018-01-14 21:26:27
  • 456
收藏助手
不良信息举报
您举报文章:性能测试负载目标探讨
举报原因:
原因补充:

(最多只允许输入30个字)