1
等了这么久,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 controllerForEach 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 PlanNon 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 计算:

1
${__digest(MD5,Apache JMeter 4.0 rocks !,,,)}

返回0e16c3ce9b6c9971c69ad685fd875d2b

新函数 __dateTimeConvert 提供两种时间格式的快速转换:

1
${__dateTimeConvert(01 Jan 2017,dd MMM yyyy,dd/MM/yyyy,)}

返回01/01/2017

新函数 changeCase提供字符在大写、小写、驼峰式之间的转换:

1
${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}

返回AVARO OMNIA DESUNT, INOPI PAUCA, SAPIENTI NIHIL

新函数__isVarDefined__isPropDefined 用于测试属性和变量是否可用。

1
${__isPropDefined(START.HMS)}

返回 true

1
${__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 61900Bug 61956Bug 61899。图表中 Latency Vs RequestResponse Time Vs Request 不会超过1000RPS,详见Bug 61962

JMeter 环境配制

JMeter 的启动脚本用于 JVM设置的被放在了单独的文件中(Unix 中是bin/setenv.sh,Windows 中是bin\setenv.bat),在启动时会被调用。这样,启动脚本再也不用编辑了。

优化调整

  • 线程组的Start timeEnd date被移除,详见Bug 61549
  • 分布式测试中,Hold模式被删除。使用其它替代和更有效的模式
  • 针对第三方插件,方法org.apache.jmeter.gui.tree.JMeterTreeNode为合并至 Java9已被废弃(Bug 61529)
1
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 PlanNon 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