基准测试(Benchmarking Test)
基于 SOA 的性能测试第一阶段是基准测试,基准测试是用来确定被测应用程序是否存在性能衰退,并且收集可重复性能测试结果以作为性能基准。基准测试的最好方法是每次测试只改变一个参数。基准测试包括了相应时间驱动的测试和吞吐量驱动的测试。
响应时间驱动测试
对于 web service 的应用程序,其中响应时间定义为发送一个服务请求到收到服务响应的时间间隔。响应时间驱动的测试主要用来测试单个 service 的性能。首先加一个虚拟用户作为负载量,然后对同一测试用例按照比例的增加并发虚拟用户数,并分别记录下测试结果,最后计算出这些测试结果的平均值作为平均响应时间。
下图为某个 web 服务在不同并发虚拟用户数下平均响应时间曲线图,由图可看出,平均响应时间随着并发虚拟用户数的增加而增加。在用户数从 50 到 100,平均响应时间开始比较大幅度地增长,此时很有可能某个系统资源出现了瓶颈,当然前提条件是在被测应用程序没有出现错误的情况下。此时可以进行调优,但要保证每次只改动一个参数值,然后再次执行相同测试用例,并与之前的结果进行对比,选取结果最优的参数配置。
图 1. 响应时间曲线图
吞吐量驱动测试
吞吐量被定义为在单元时间内能够成功处理的服务请求的数量。吞吐量驱动的测试主要是基于一组连续 web 服务形成一个或多个测试场景,来测量应用在单位时间内能够处理的事务数量。
这是针对一个业务场景进行的性能测试用例,同样首先加一个虚拟用户作为负载量,然后对同一测试用例按比例的增加并发虚拟用户数,最后记录下不同虚拟用户数下的吞吐量。
下图为不同并发虚拟用户数下吞吐量的曲线图,与响应时间一样,吞吐量也随着并发虚拟用户数的增长而增长,但不同的是吞吐量在达到某一最高点后,再增加并发虚拟用户时吞吐量则保持与最高值接近。这是由于当用户数较少时,单位时间内发出的服务请求较少,所以测出的吞吐量较小,当用户数增加,发出的服务请求增加,所以吞吐量也随之增加,当吞吐量达到最高值表明被测应用在测试的硬件环境下达到处理事务的最高能力。最后同样要做性能调优,以选取最优的吞吐量最大值时的配置情况。
图 2. 吞吐量曲线图
容量测试(Capacity Test)
容量测试的目标是要看被测应用在一定测试环境下能够达到的最大处理能力。容量测试将模拟更加接近真实用户使用的环境,并且用更为真实的用户负载来测试 SOA 应用程序的 capacity scale。具体地说,一般容量测试是为了检测在达到一定响应时间或吞吐量的前提下被测应用能够支持的并发用户数。其中容量测试包括了以下几方面内容:
定义访问系统的并发虚拟用户数
定义虚拟用户的 think time,也就是发出两个连续请求之间的时间间隔
用 ramp-up run 的方式增加负载量进行测试,得到被测应用能够支持的虚拟用户数的范围
在应用支持的用户数地范围内,采用 flat run 的方式进行测试,以得到更为精确性能结果
浸泡测试(Soak Test)
Soak test 是在一个稳定的并发用户上进行的 long run 测试,用来测试 SOA 应用程序的健壮性。通过 soak test 往往可以发现内存泄露,频繁 GC 等严重性能问题。进行 soak test 需要注意以下两点:
Soak test 需要在一定适中的用户负载量下进行,最好低于应用支持最大的负载量
在执行 long run 测试时,采用几种不同用户组,并且每个用户组织性不同的业务流程
Soak test 实际上比较简单的性能测试,测试最好能够运行几天,以真正得到一个健壮的应用。确保应用测试是贴近真实世界 , 尽量与实际使用情况接近。