|
在性能测试中,测试结果的统计是非常重要的。例如,下面的这些结果统计指标就可以对被测服务器的性能表现,给用户一个大概的判断。
max concurrent connections 最大并发用户连接数
transaction rate 业务交易速度
latency 时延
bandwidth 带宽
...
在这篇博客中,我们将介绍一下在Netgend的JavaScript上实现的结果统计信息的一些新特点,
用户定义计数器
对于HTTP交易(http transaction),有时侯只看HTTP请求得到了响应是不够的,我们需要看到HTTP响应是否全部为 response 200 OK。 在有些情况下甚至是只看Response 200 OK回应也是不够的,例如,当你尝试提交一个登录某网站的表单,你得到200 OK的回应, 但响应文本会告诉你登录不成功。你怎么能通过查看统计来获取到这样的信息呢?
我们的用户定义计数器可以帮你解决这个问题。在Netgend的Javascript脚本中,你可以定义这个“登陆成功”的计数器。
http.POSTData = "user=${username}&pass=${password}";
action(http,"http://www.example.com/login?");
if (contains(http.replyBody, /Welcome/)) {
stats("success");
}
上述简单的逻辑会检查出response响应中是否包含“welcome”, 并且对所有回应这个字段的Response进行计数统计。你可以把它添加到你的脚本中,并且可以在GUI见面上看到这个统计图表。如果你发现你的Request请求命令曲线和这个“登陆成功”计数器曲线重合,说明你的所有登陆请求都成功了。
这个功能非常有用。如果你正在测试一个非HTTP协议,它没有明确的交易(Transaction)成功定义。 你可以使用用户定义计数器,以了解服务器对请求的响应情况。
用户定义时延
除了计数器统计项目,我们通常还需要测量不同的延迟,包括:
• TCP connection latency,
----TCP连接时延
• First HTTP response latency (the time between request and first packet in response)
----第一个HTTP包响应延迟(请求包和第一个响应数据包之间的时间)
• Last HTTP response latency (the time between request and last packet in response)
----最后一个HTTP包响应延迟(请求包和最后一个响应数据包之间的时间)
然而,有些时候我们可能需要测量一系列的操作。例如,某门户网站可能需要多个HTTP交易,如果我们要测量它的总时延该怎么办?
用户定义时延可以帮你解决这个问题。你只需要在你的运行脚本里再添加两行:
start = currentTick;
//do a bunch of operations here
stats("latency", currentTick - start);
在这里,变量“ currentTick ”里包含系统时时提供的最新时间戳。
有了这多加的两行,在统计窗口里除了系统自带的时延统计项以外,还将显示上述用户定义的时延 。
动态速率调整
在进行性能测试的时候,我们有时会以一个较低速率开始,然后递增速率,比如:每 Y秒种,速率增加X。 通常这样设置是可行的。但在某些情况下,用户希望最好可以手动调整速率,尤其是在当我们不了解被测系统容量的时候:
1 如果速率增加太慢,基于延迟和其他统计指标的反馈,我们一般会愿意增加递增速率。但我们会经常犹豫:是把测试停下来设置更快的递增速率重新测试? 还是耐心地等待速度缓慢地攀升?
2 如果速率增加太快,系统的延迟会开始增长并变得很糟糕,同时我们的速率还在不断增加。我们只能停止测试,重新设置。
在Netgend平台,我们支持动态调整速率。 你可以以一定的速率开始测试,并基于系统状态的反应来手动调整速率,如果延迟正常并且交易成功率还不错(我们还有用户定义的”登陆成功” 计数器☺),你可以手动增加一个自己设置的速率增量。 否则,你可以降低速率,从而通过这个测试测出系统的最大能力和临界点。
当然,如果你已经提前被告知了系统的最大容量后,也可以建立一个自动的速率递增模式(比如每Y秒增加为X的速率 )去验证这个最大容量,这个当然也支持。 |
|