在对于WEB系统进行性能测试时,第一时间想到的是测试出WEB系统能够承受的最大并发虚拟用户(VU)用户数,因为系统的最大VU并发数可以直接反应系统的承载能力。但是人们往往忽略了VU的并发模型。什么是VU的并发模型呢?如下图所示,我们使用浏览器访问一个页面,浏览器会有多个HTTP请求发向服务端,这些请求有串行的也有并行的(water中有时间重叠的请求属于并行请求。串行请求是指:前一请求结束,后一请求才下发请求)。如果性能测试工具提供WEB录制功能并能按照浏览器的行为模型模拟VU行为,那是最好的了(如果你使用Jmeter或LoadRunner 11那么工具是无法做到的,详见:《性能测试工具Jmeter你所不知道的内幕》、《性能测试工具LoadRunner你所不知道的内幕》)。截止目前我了解到的性能测试工具:kylinTOP可以实现(Jmeter,CPTS(华为),PTS(阿里)均无法实现),但本文并是不讨论如何使用kylinTOP来录制脚本并模拟浏览器的行为,而是如何利用kylinTOP手工构建这样的场景。为什么要手工构建呢,主要是有些web系统对外提供的服务不是WEB页面,而是HTTP接口功能,对这种场景就需要我们手工来构建。
如果被测试系统是一个WEB服务系统,对外提供的HTTP接口不是WEB页面,而是HTTP接口功能。对于这种系统我们应当怎样测试性能呢?要想测试出它能承受的最大并发VU数,首先要分析其VU的请求模型。假定VU的请求模型如下所示:
VU请求模型描述:已知一个WEB系统对上层用户提供A、B、C、D、E、F、G、H、I共9个接口请求。上层用户使用这9个请求的约束要求是A、B是串行下发,C、D、E、F四个请求并行下发,G、H、I是串行下发。按照如下的瀑布图形下发请求:
一个上层用户对WEB系统来说就是一个VU,那么如何手工构建这样的请求模型呢?
步骤1:新建脚本
步骤2:创建请求节点和描述节点
通过“增加”按钮添加HTTP请求节点和描述节点。同时把要并发的请求移动到描述节点下面(作为描述节点的子节点,同时描述节点名称输入:start_concurrent)
说明:kylinTOP手工添加的HTTP请求节节点默认是串行的,“描述节点”的子节点处理为并发请求(描述节点的名称必须是:start_concurrent,否则当作串行处理)。
步骤3:脚本属性修改
设置脚本的“高级设置-虚拟用户“,属性值选择下图标志中的任意一个。
步骤4:调试脚本
点击调试按钮,生成如下所示VU瀑布图。该瀑布图中:CDEF四个是并发请求,其余是串行请求,与场景要求一致。
说到这里,脚本运行的瀑布图与场景要求已经完全一致。后续使用该脚本新建测试任务运行即可测试获得系统可承受的最大VU数。如果使用Jmeter,PTS等其它性能测试工具测试,VU的HTTP请求模型将是一个线性请求(串行请求),无法生成上述场景描述要求脚本,测试结果也是非常不准确的。