等了这么久,20180210,终于有较大的更新。无论是从 UI 还是功能优化,都让人耳目一新。下面我们就详细看下具体变化。
原文地址:http://jmeter.apache.org/changes.html
下载地址:apache-jmeter-4.0.zip
重要更新
主要变更
JMeter 现在支持 JAVA 9.
新的Boundary Extractor元素可以提供更好的元素提取性能
新的JSON Assertion元素可用于 JSON 响应的断言。
JMS Point-to-Point 样例增加了read,browser,clear选项。
将许多测试元素的最佳选项已设置为默认选中内容,如:
- 新增If Controller控制器使用最佳性能选择的默认表达式。
- 新增JSR223测试元素,在语言使用支持的情况下,默认缓存编写的脚本。
Loop controller和ForEach Controller会使用jm<Name of your element>__idx来暴露循环的遍历次数,可以像下面的方式来使用一个名为 MyLoopController的 Loop Controller:
${__jm__MyLoopController__idx}
详见Bug 61802.
Cookies 在录制过程中,会展示在View Results Tree中。之前他们总是显示为空。
Response Assertion允许定制断言信息和请求数据。
UX 提升
JMeter 现在默认使用Darcula LAFUI样式。
Wokbench 已经被从 UI 中去掉,你可以使用Test Plan中Non Test Elements的子元素来添加对应 Workbench 中的功能。
菜单样式将最常用元素调整为快速进行操作。
HTTP(S) Test Script Recorder 允许在录制时,定制更加人性化的 transactions的名称。
UX样式还有以下提升:
-
Module Controller
会提示用户最少需要有一个Controller
。 -
Function Helper Dialog
(帮助使用和测试功能的说明)在多个位置有提升。
-
Swich Controller
会自动trim
字符串前后的空格,减少问题出现。 -
Test Plan
在运行前会保存。
函数
新函数 __digest 用户快速提升 SHA-XXX,MDX Hash 计算:
${__digest(MD5,Apache JMeter 4.0 rocks !,,,)}
返回0e16c3ce9b6c9971c69ad685fd875d2b
新函数 __dateTimeConvert 提供两种时间格式的快速转换:
${__dateTimeConvert(01 Jan 2017,dd MMM yyyy,dd/MM/yyyy,)}
返回01/01/2017
新函数 changeCase提供字符在大写、小写、驼峰式之间的转换:
${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}
返回AVARO OMNIA DESUNT, INOPI PAUCA, SAPIENTI NIHIL
新函数__isVarDefined和 __isPropDefined 用于测试属性和变量是否可用。
${__isPropDefined(START.HMS)}
返回 true
${__isVarDefined(JMeterThread.last_sample_ok)}
返回 true
编码和插件开发
如果你不想样例在测试结果中出现,可以调用SampleResult#setIgnore()。
JavaSamplerContext 替代在AbstractJavaSamplerClient,有新的方法用于快速的插件开发。
JMeter 现在发布 Maven 源和 JavaDoc在Maven repository中。
插件可以注册监听事件,当收到 TestPlan 的开启/关闭状态通知时。
实时报告和 Web 报告
InfluxDB backend listener支持通过使用TAG_来定制化 tags,详见Bug 61794.
在 Web 报告中 responseTime分布图更加精细。
一些 BUG 修复也被集成在报告模块中,详见Bug 61900,Bug 61956,Bug 61899。图表中 Latency Vs Request 和 Response Time Vs Request 不会超过1000RPS,详见Bug 61962。
JMeter 环境配制
JMeter 的启动脚本用于 JVM设置的被放在了单独的文件中(Unix 中是bin/setenv.sh,Windows 中是bin\setenv.bat),在启动时会被调用。这样,启动脚本再也不用编辑了。
优化调整
- 线程组的Start time 和 End date被移除,详见Bug 61549
- 分布式测试中,Hold模式被删除。使用其它替代和更有效的模式
- 针对第三方插件,方法org.apache.jmeter.gui.tree.JMeterTreeNode为合并至 Java9已被废弃(Bug 61529)
public Enumeration<JMeterTreeNode> children()
- tearDown Thread Group 在默认情况下,会停止并关闭测试。如果你不想这样做,去掉 Test Plan中的Run tearDown Thread Groups after shutdown of main threads on Test Plan勾选。详见Bug 61656
- sampleresult.getbytes.headers_size属性和sampleresult.getbytes.body_real_size属性被废弃。详见Bug 61587
- JMeter 现在会在每次运行时保存测试计划,这个行为可以通过save_automatically_before_run来设置。详见Bug 61731
- Workbench元素被废弃,你可以直接添加Test Plan 中 Non Test Element的子元素来直接添加。当加载一个包含这种元素的 Test Plan时,JMeter 会增加将**Mirror Server, Property Display ** 和 HTTP(s) Test Script Recorder添加为直接子元素。对于任何元素,它会创建一个 Test Fragment元素,调用 Workbench Test Fragment 并将元素移入。
- 下面的类被废弃(org.apache.jmeter.functions.util.ArgumentEncoder, org.apache.jmeter.functions.util.ArgumentDecoder),详见Pull request #335
- 在JMS Point-to-Point样例中,设置超时为0时,表示无穷大的时间。未设置时,表示超时为2000ms。详见Bug 61829
- 当断言用于不同的范围时,它们会被从最外围一个至最内部的一个。详见Bug 61846
- JMeter 现在默认启动语言为英语。这是因为缺少很多种类的语言翻译支持。可以通过修改 jmeter 和 jmeter.bat(或最好用 setenv.sh/setenv.bat)中的JVM_ARGS系统设置来调整。我们也很高兴,如果你能贡献支持语言的翻译工作。
- Switch Controller现在默认会 trim掉无用的空格,减少问题出现。详见Bug 61771
- JMeter JVM 堆设置从-Xms512m -Xmx512m调整为-Xms1g -Xmx1g。