经常有人问我web service的性能测试是用JMeter好还是SoapUI好。说句实话这两款都是非常的开源Web Service性能测试工具,简单地说哪个更好真不太容易。影响Web Service性能测试的因素太多到底谁的结果更准确一些很多时候并不主要取决于测试工具。在soapUI官方网站上有一个文章比较了这两款工具,我将要点抽出来加以分析希望能反映它们的特点。
JMeter在整个负载测试的优越性是毋庸置疑的,它覆盖了常见的各种测试类型,如HTTP, JDBC, JMS 和SOAP。单Web Service测试,作者做了一个简单的实验,但并没有涉及太多的细节。
试验准备:本地Web Service,运行于JBoss 4.0.3SP1,每个简单请求在4种不同负载下执行5000次,分别是1线程,5线程,10线程和25线程。在SoapUI中为简单起见均使用简单负载策略,并且五执行延时。要分别记录关闭连接和非关闭连接方式的数据。关闭连接方式是指每次请求完毕后关闭连接。反之则是让连接仍然保持打开以等待下个请求,显然会省去很多额外开销。在JMeter中也可以做类似配置,如线程数为1,循环次数5000或线程数25,循环200次。
环境:WinXP SP2, Pentium M 1.8 1 G RAM, JRE 1.5.0_06.
结果:
其中带*的是非关闭连接模式下测试的结果。从结果中看出Jmeter的测试值均较SoapUI偏大,但与UI连接关闭模式下执行结果相差无几。实验未给出JMeter命令行下的测试结果。但从经验来讲,命令行执行方式避免了测试工具本身带来的巨大资源消耗,更接近真实值。soapUI在命令行连接不关闭模式下TPS随线程的增加在初期有明显上升的。
从计时机制来看,JMeter 用的是System.currentTimeMillis(),而soapUI用的是更为精确的System.nanoTime().
综上所述(文中没有点明,但这是显而易见的),soapUI在单纯的Web Service 测试时有明显的优势,当要综合其他测试时可以组合使用多种工具。
当然这是soapUI自己做的实验,难免有王婆卖瓜之嫌,有兴趣的朋友可以自己设计实验来测试一下。