参考学习感谢:《精通软件性能测试与LoadRunner实战》
一、典型的性能测试场景
- 某个产品要发布了,需要对全市的用户做集中培训。通常在进行培训的时候,老师讲解完成一个业务以后,被培训用户会按照老师讲解的实例同步操作前面讲过的业务操作。这样存在用户并发的问题,我们在培训之前需要考虑被培训用户的人数在场景中设计酌情设置并发用户数量。
同一系统可以采用两种构架:Java、.Net,决定用哪个。同样的系统用不同的语言、框架实现效果也会有所不同。为了系统能够有更好的性能,在系统实现前期,可以考虑设计一个小的Demo,设计同样的场景,实际考察不同语言、不同框架之间的性能差异,而后选择性能好的语言、框架开发软件产品。
一门户网站能够支持多少用户并发操作(注册、写博客、看照片、灌水……)。一个门户网站应该是经得起考验的。根据预期的用户量设计相应用户的并发量,同时一个好的网站由于随着用户的逐渐增长以及推广的深入,访问量可能会成数量级的增长。考虑门户网站这些方面的特点,在进行性能测试的时候也需要考虑可靠性测试、失败测试以及安全性测试等。
二、功能测试与性能测试关系
功能测试和性能测试是相辅相成的,对于一款优秀的软件产品来讲,它们是不可减少的2个重要测试环节; 要因地制宜,结合实际需求,选择合适的时间点进行,减少不必要的人力、物力浪费,才能实现利益最大化。
三、性能测试的概念及其分类
- 性能测试
- 负载测试
- 压力测试
- 配置测试
- 并发测试
- 容量测试
- 可靠性测试
- 失败测试
概念及其分类
系统的性能是一个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括:执行效率、资源占用、系统稳定性、安全性、兼容性、可靠性、可扩展性等。性能测试是为描述测试对象与性能相关的特征并对其进行评价,而实施和执行的一类测试。它主要通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。通常大家把性能测试、负载测试、压力测试等统称为性能测试。
负载测试:通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足系统的性能指标情况下,系统所能够承受的最大负载量的测试。简而言之,负载测试是通过逐步加压的方式来确定系统的处理能力、确定系统能够承受的各项阀值。例如:逐步加压,从而得到“响应时间不超过10秒”、“服务器平均CPU利用率低于85%”等指标的阈值。
压力测试:通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并来获得系统能提供的最大服务级别的测试。压力测试是逐步增加负载,使系统某些资源达到饱和甚至失效。
- 配置测试:主要是通过对被测试软件的软硬件配置的测试,找到系统各项资源的最优分配原则。配置测试能充分利用有限的软硬件资源,发挥系统的最佳处理能力,同时可以将其同其它性能测试类型联合应用,从而为系统调优提供重要依据。
并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题,几乎所有的性能测试都会涉及一些并发测试。 因并发测试对时间的要求比较苛刻,通常并发用户的模拟都是借助于工具,采用多线程或多进程方式来模拟多个虚拟用户的并发性操作,在后续讲LoadRunner 工具时,有一个集合点的概念,它就是用来模拟并发的,您可以在VuGen中设置集合点,在Controller中设置其对应的策略,来模拟用例设计的场景。
容量测试:在一定的软、硬件条件下,在数据库中构造不同数量级的记录数量,通过运行一种或多种业务场景在一定虚拟用户数量的情况下,获取不同数量级别的性能指标从而得到数据库能够处理的最大会话能力、最大容量等。确定系统可处理同时在线的最大用户数,通常和数据库有关。
- 可靠性测试:通过给系统加载一定的业务压力(如CPU资源在70%~90%的使用率)的情况下,运行一段时间,检查系统是否稳定。因为运行时间较长,通常可以测试出系统是否有内存泄露等问题。
通常我们不可能做一次可靠性测试执行1年时间,所以多数情况下,可靠性测试是执行一段时间,如:24小时、3×24小时或7×24小时来模拟长时间运行。
- 失败测试:对于有冗余备份和负载均衡的系统,通过这样的测试来检验如果系统局部发生故障用户是否能够继续使用系统,用户受到多大的影响。如:几台机器做均衡负载,一台或几台机器垮掉后系统能够承受的压力。
四、性能指标及相关计算公式
- 吞吐量
- 并发数
- 思考时间
- 响应时间
- 点击数
- 资源利用率
- 网络吞吐量
- 错误率
- 系统稳定性
具体:
- 吞吐量(Throughput):指的是单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力。通常情况下,吞吐量用“请求数/秒”或者“页面数/秒”来衡量。从业务角度来看,吞吐量也可以用“业务数/小时”、“业务数/天”、“访问人数/天”、“页面访问量/天”来衡量。从网络角度来看,还可以用“字节数/小时”、“字节数/天”等来衡量网络的流量。
并发(Concurrency):它最简单的描述就是指多个同时发生的业务操作。例如,100个用户同时单击登录页面的“登录”按钮操作。通常,应用系统会随着用户同时应用某个具体的模块,而导致资源的争用问题,例如,50个用户同时执行统计分析的操作,由于统计业务涉及很多数据提取以及科学计算问题,所以这个时候很有可能内存和CPU会出现瓶颈。并发性测试描述的是多个客户端同时向服务器发出请求,考察服务器端承受能力的一种性能测试方式。
思考时间(Think Time):它就是在录制脚本过程中,每个请求之间的时间间隔,也就是操作过程中停顿的时间。为了真实地描述用户操作的实际场景,在录制脚本的过程中,通常,LoadRunner也会录制这些思考时间,在脚本中lr_think_time()函数就是实现前面所说的思考时间,它实现了在两个请求之间的停顿。
- 响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回结果的响应结束,结果信息展现在客户端,整个过程所耗费的时间。
点击数是衡量Web服务器处理能力的一个重要指标。它的统计是客户端向Web服务器发了多少次HTTP请求计算的。这里需要说明的是,点击数不是通常一般人认为的访问一个页面就是1次点击数,点击数是该页面包含的元素(如:图片、链接、框架等)向Web服务器发出的请求数数量。通常我们也用每秒点击次数(Hits per Second)指标来衡量Web服务器的处理能力。
- 资源利用率,是指系统各种资源的使用情况,一般用“资源的使用量/总的资源可用量×100%”形成资源利用率的数据。通常,系统资源的利用率,结合不同行业系统的需求也有所不同,例如,在银行行业对系统的稳定要求比较严格,结合CPU利用率来讲,其要求不高于60%,而其他行业的系统要求不是很严格CPU利用率不高80%即可。
- 网络吞吐量是指在网络工作正常的情况下单位时间内通过的网络的数据数量。通常,该指标用于衡量系统对于网络设备或链路传输能力的需求。当网络吞吐量指标接近网络设备或链路最大传输能力时,则需要考虑升级网络设备,以提升网络处理吞吐量。
错误率指系统在负载情况下,失败交易的概率。错误率=(失败交易数/交易总数)*100%。不同系统对错误率的要求不同,但一般不超出千分之五。稳定性较好的系统,其错误率应该由超时引起,即为超时率。
- 系统稳定性:基于系统本身的重要性,通常要求非常高,要求365×24小时无故障运行,通常系统稳定性关注的内容是稳定运行时间,该指标表示系统在标准压力(系统的预期日常压力)情况下,能够稳定运行的时间。
因为稳定性测试运行时间长,通常至少连续运行24小时以上,所以平时手工测试或短时间性能测试发现不了的问题,可以在该类型的性能测试过程中发现,如:内存泄漏问题等。
计算公式:
吞吐量
并发数
思考时间