1、jmeter在测试中的定位
对于测试工具或测试框架,咱们可能会以为,若是一个工具就能知足全部的测试需求就行了,测试数据生成、自动测试、结果分析、报告产出、日志回溯等等,所有由一个工具来实现。因而,当了解到jmeter有这么强大的功能以后,咱们很天然就去研究如何用jmeter来实现上述种种功能。而后通过长时间调研发现,jmeter确实能够作到,由于jmeter有各类控制器、取样器、断言、监听器,甚至还有BeanShell这样能够在中间某个环节本身写代码来处理一些逻辑的方法。
第一感受,好像确实这些工做都用jmeter来实现就行了,但实际上,这里的坑却有很多。举个最简单的例子,当咱们用jmeter来处理请求数据、返回数据时,每一个请求至关于会在jmeter这里增长额外的耗时和资源占用,若是处理的逻辑比较复杂,好比写个超级复杂的BeanShell,这些额外的开销可能会很大程度上影响咱们测试的结果。小编曾经遇到过,为了实现一个对返回结果进行判断和分类的功能,致使测试获得的接口QPS比以前降低了不少,虽然最后实现了将返回结果进行自动化分析、归类等操做,但最重要的性能指标却出现了误差,还得返工再测,得不偿失。
因此,在这里,咱们须要明确下jmeter在测试中的定位,小编认为,jmeter最重要的功能是实现自动化并发测试+日志收集,而并不是是用来作数据处理和统计的。在jmeter接口测试的脚本中,若是存在不少的与请求无关的逻辑处理,在这里强烈建议你们对脚本进行精简,避免出现问题。
web
2、jmeter线程组的使用
利用jmeter的线程组,咱们能够很方便地对接口进行并发测试,不管是性能测试仍是稳定性测试,咱们均可以用线程组来实现。jmeter一个测试计划中能够添加多个线程组,每一个线程组均可以独立起若干个线程进行测试。因而有时咱们会在测某个服务时,把该服务的全部接口分红不一样线程组放到测试计划下,指望实现“一个脚本测全部”。但每每这样作又会产生一些意想不到的问题。小编在实际测试中就遇到过相似定时器跨线程组使用的时间问题,多个线程组共享变量致使的问题、多个线程组的启停问题等等,给测试带了比较大的困扰,虽然每次能够找到解决方法,但这样频繁踩坑也着实不爽。
为了不麻烦,后来我逐渐换了一种设计脚本的方式,那就是尽可能在一个脚本中只使用一个线程组,不一样的接口,若是互不关联,就分红不一样的脚原本进行测试。这样看似增长了脚本的数量,但实际上却大大优化了设计、修改脚本以及执行测试的效率和自由度。测试时,每一个接口的测试都是单独的进程,彼此之间不会产生影响,且能够作到每一个接口的测试随起随停,在NO-GUI模式下操做起来很是方便。
centos
一个极简的jmeter脚本,只需一个线程组、一个请求微信
3、使用NO-GUI模式进行测试
jmeter支持使用GUI和NO-GUI两种模式进行测试,这两种模式的各有特色。在GUI模式下,咱们能够经过图形化界面直观地进行测试脚本的设计以及经过监听器实时观察测试结果,使用起来十分方便;而NO-GUI模式与GUI模式执行测试脚本的方式是相同的,但因为不显示图形界面,也不实时打印测试结果,使得测试中jmeter自己对资源占用的影响降到最低,在并发测试中能够很大程度得减小对性能结果的干扰。在公司环境中,性能好的机器通常都使用centos等linux操做系统,几乎不会用到图形界面,加之为了得到更准确的测试结果,在进行大并发测试时,咱们通常会采用NO-GUI模式进行测试。
因此,在脚本设计阶段,咱们依然能够在PC上使用GUI模式进行设计,发挥图形化设计的优点。当脚本设计完成后,咱们只需将脚本放到linux机器上,而后用NO-GUI模式执行,以最大程度保证得到更准确的测试结果。测试完成后,若是须要在GUI模式下查看测试结果或图表信息,将NO-GUI模式下产生的日志文件在GUI模式下导入便可。
并发
小结app

有任何想说的话,均可以发送内容到“搜狗测试”公众号,咱们一块儿聊聊~编辑器


欢迎添加咱们的搜狗测试微信号,与咱们一块儿聊聊测试。工具
本文分享自微信公众号 - 搜狗测试(SogouQA)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。性能