JMeter
Apache旗下,自然无需过多吹捧,JMeter是一个功能和压力测试软件,主要应对Web和数据库方面的测试。其实这类软件非常非常多,商业化的软件也很多,JMeter是开源的Java实现,我用了一下,在同类软件中也许UI不算最好,但绝对值得一试。
压力测试
简单的说,JMeter用一个图形界面的方法来构造一个完整的测试用例,JMeter下,基本的测试过程是放在Thread Group下的,Thread Group是一个可以并发的线程对象,我们在Thread Group下设置它的并发数,时间参数等,就可以用JMeter轻松的做压力测试了,这也是大部分人用JMeter所做的事情。
功能测试
在测试功能时,一样可以用GUI来构造完整的测试过程,比如在Thread Group下加入一个HTTP Request就相当于发送一个HTTP请求了,所有的参数都可以在GUI中设置,很容易,在HTTP Request下我们可以加一个Response Assert就可以断言一个返回是否符合预期(比如通过正则表达式的匹配)。
看的出,JMeter是基于HTTP协议来进行测试的,所以对于HTML页面的解释,JMeter没有提供任何支持,使用者仅仅是可以拿到页面的原始内容而已,所以如果要进行UI方面的测试,JMeter不是很合适,或者说胜任,这方面可以考虑Selenium等工具。
自动录制
对于较冗长的测试,全部一步步构造测试过程是很冗长的,JMeter提供了一个内置的录制功能,但是实现的很巧妙,它内置了一个HTTP Proxy,只需要在浏览器中设置这个Proxy,再通过浏览器访问被测网站时就会被JMeter记录下作为测试过程,包括所有的HTTP参数,当然如果要加入结果的验证还是必须自己来写的。
如果觉得这样还不够的话,可以直接编辑JMeter的测试配置.jmx文件,实际上这是一个XML文件, 可以直接编辑测试过程,当然我是不太习惯这样写的。
变量,函数及流程控制
看起来JMeter还不够强,因为上面没有提到一般测试脚本都支持的变量和流程控制,这些在做测试时太重要了,比如你想测试通过Web创建和删除一个Blog帖子,自然要在创建帖子之后,将服务器返回的帖子ID记录到变量中,这样才能对应的删除,另外象流程控制,比如循环,分支也都是必须要有。这些其实JMeter也提供了,当然由于XML的格式限制,它不像一些通用脚本语言那么灵活,但看起来还算全,也足够满足大部分测试的需要了。
JMeter还内置了一些函数(大概20来个),像是取时间,取线程ID等,这些都是很常用的,当然函数也可以嵌套来得到更多的功能。不过,少量的函数并不能满足各种各样的需求,还好JMeter支持BeanShell(Java解释执行脚本),所以应该不用担心不够用了。