响应时间很明显地随着线程的增加而增加。若要继续进行测试,我们可以更改线程数、等候周期和循环数。注意:我们没有更改或调整服务器的配置。WebLogic Server 9.0中有一个可自动配置的线程池,其配置范围受到限制(请参阅Naresh Revanuru撰写的 Workload Management in WebLogic Server 9.0 ,Dev2Dev),上表说明客户端数量的增长对服务器响应时间的影响是非线性的。实际上,将这个数字提高两倍或十倍不会产生明显的影响!然而,使用接近或超过默认服务器限制的线程数来运行同一个试验时应引起注意。为了检验从服务器收到的响应是真实的SOAP响应而不是HTTP错误,我们观察下列输出文件的内容。这是符合上面要求的SOAP响应:
为了使测试结果更加可视化,向计划中添加Spline Visualizer,它紧靠着Graph Results。Spline Visualizer提供了关于所有样本次数的视图。它用分段插入功能绘制出一条连续的线,在绘制时跨越10个点,每个点代表10?的样本。在样条图表中用直线取代连接点,提供了基于多项式近似算法的平滑分布视图。结果如图7所示
图7:使用Spline Visualizer说明与图6相同测试结果的图表
Multiple JMeters
JMeter还具有一项十分有用的Remote Start功能,它允许用户从多台机器启动JMeter测试。客户端主机地址可以输入到位于bin文件夹下的“jmeter.properties”文件中。找到remote_hosts属性并在那里添加远程主机名称,使用逗号进行分隔。重新启动Jmeter,在Run菜单中单击Remote Start或Remote Start All。某些Web和应用程序服务器可连续处理同一个IP地址的多个请求以及并行处理不同IP地址的请求,因此,对于请求来自不同的机器或将测试负载分布到几个客户端显得十分关键的情况,可以使用该选项来执行操作。
其他功能
前面已经提到,Jmeter包含HTTP、FTP和 LDAP取样器。创建这些请求是一项简单的任务,Jmeter用户手册中作了详细说明;它通常包括创建Thread Group、添加取样器、定时器和监听器。下面我们介绍一些有关这些标准取样器之外的、可能需要一些非标准配置步骤的功能。
脚本
特别支持Java请求和BeanShell脚本的自定义测试和脚本是JMeter的另一个功能,它为负载测试开发人员提供了更大的灵活性。我们可以创建脚本化测试并将其作为一个Java类进行编译,然后将其传递给JMeter运行。为了使用BeanShell脚本功能,需要下载BeanShell jar并将其放置在/lib目录下面,以便JMeter在运行时可以选取它。用户可以使用Java取样器中的beanshell API,或者创建BeanShell取样器,由它读取文件中的脚本或处理文本框中所键入的命令。下面的代码样本说明了添加到HTTP取样器中的BeanShell断言。用户可以对基于HTTP请求的响应的测试执行过程进行分析和控制。一个好的方案应该创建具有线程组的测试计划,并在计划的时间循环启动负载测试。请求将点击Web服务器并获得其响应。
响应可用添加到测试计划的BeanShell断言进行记录,它紧靠着HTTP取样器,如果Web服务器响应与某个条件相匹配,也是说,如果成功或包含了预期的字符串,则脚本会停止测试或线程,否则将继续执行。
JMS应用程序
为了使用JMeter对JMS应用程序进行负载测试,要下载ActiveMQ jar并将其复制到/lib目录。根据前面的测试,我们首先创建线程组,并添加JMS Point-to-Point样本。JMS Point-to-Point对话框需要填写下列参数:QueueConnection Factory、JNDI Name Request队列和JNDI Name Receive队列。例如,我们可以使用WebLogic示例服务器上安装的JMS模块中的参数;在这种情况下,它们为weblogic.examples.jms.QueueConnectionFactory和weblogic.examples.jms.exampleQueue。我们也可以创建自定义的JMS连接工厂和队列。对于WebLogic服务器,我们还需要添加 weblogic.jndi.WLInitialContextFactory作为初始Context Factory值和Provider URL,通常情况下,其形式为:t3://hostname:7001,例如:t3://localhost:7001。