JMeter 不会因 BeanShell 错误而失败

mdr*_*drg 1 java jmeter beanshell jmeter-plugins

在我的公司,我们使用 JMeter 作为发布管道的一部分来运行各种测试(冒烟、负载等)。现在我正在创建更复杂的测试场景,我使用了很多 BeanShell,我担心 JMeter 似乎对失败的 BeanShell 脚本完全没问题,我想找到一种失败的方法当 BeanShell 失败时进行测试。

如果存在语法错误,脚本将失败,并向日志文件报告,但它不会阻止整个测试套件成功,只要缺少的 BeanShell 执行不会触发任何其他失败。示例(点击查看全尺寸图片):

JMeter 截图

如上所示,我有一个带有 BeanShell 后处理器的采样器,其中包含一个语法错误。执行时记录错误并增加顶部的错误计数器,仅此而已。如果用户没有注意到这一点,错误就会转移到我们的发布过程中,从而降低我们的测试可靠性。如果我使用命令行运行 JMeter,结果如下:

Writing log file to: /home/user/jmeter/jmeter.log
Creating summariser <summary>
Created the tree successfully using Bad BeanShell Test.jmx
Starting the test @ Fri Feb 24 12:23:11 CET 2017 (1487935391815)
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary =      2 in 00:00:01 =    1.9/s Avg:   382 Min:    29 Max:   736 Err:     0 (0.00%)
Tidying up ...    @ Fri Feb 24 12:23:13 CET 2017 (1487935393168)
... end of run
Run Code Online (Sandbox Code Playgroud)

再次,似乎没问题,只有在日志文件中找出错误。并且添加一个测试后脚本来查找文件中的错误并不是一个好的独立测试用例。

我尝试了一个 BeanShell 侦听器,但它似乎没有公开脚本编译/执行的结果(SampleEvent不包含有用的信息),即使经过大量搜索,我也根本没有办法做到这一点。

它可以是一个监听器、一个断言、插件上的自定义 Java 代码、一个命令行配置,只要我可以在我的测试套件中添加一次,并且至少触发一个错误或中止套件以确保它调查。

Dmi*_*i T 5

在测试结果中获得 Beanshell PostProcessor 失败的唯一方法是修改父采样器结果,在 Beanshell 脚本开始时将其设置为“失败”,在脚本失败时将其设置为“成功”,例如:

prev.setSuccessful(false);
//your main Beanshell code goes here
prev.setSuccessful(true);
Run Code Online (Sandbox Code Playgroud)

因此,如果在这些prev.setSuccessful方法之间发生任何 Beanshell 错误- 父采样器将失败。


鉴于您的测试依赖于脚本,我建议切换到JRS223 测试元素Groovy 语言,从性能角度来看会好得多,请参阅Groovy Is the New Black文章以获取更多信息、基准测试和脚本最佳实践。