Java JMeter不会因BeanShell错误而失败

Java JMeter不会因BeanShell错误而失败,java,jmeter,jmeter-plugins,beanshell,Java,Jmeter,Jmeter Plugins,Beanshell,在我的公司,我们使用JMeter作为发布管道的一部分来运行各种测试冒烟、加载等。因为现在我正在创建更复杂的测试场景,我使用了很多BeanShell,我担心的是,JMeter似乎完全可以处理失败的BeanShell脚本,我想找到一种在BeanShell失败时使测试失败的方法 如果出现语法错误,脚本将失败,报告到日志文件,但这不会阻止整个测试套件的成功,只要缺少的BeanShell执行不会触发任何其他失败。全尺寸图像的单击示例: 如上所述,我有一个带有BeanShell后处理器的采样器,其中包含语法

在我的公司,我们使用JMeter作为发布管道的一部分来运行各种测试冒烟、加载等。因为现在我正在创建更复杂的测试场景,我使用了很多BeanShell,我担心的是,JMeter似乎完全可以处理失败的BeanShell脚本,我想找到一种在BeanShell失败时使测试失败的方法

如果出现语法错误,脚本将失败,报告到日志文件,但这不会阻止整个测试套件的成功,只要缺少的BeanShell执行不会触发任何其他失败。全尺寸图像的单击示例:

如上所述,我有一个带有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
再一次,似乎没问题,只有日志文件才能发现问题。添加测试后脚本来查找文件中的错误不是一个好的自包含测试用例

我尝试了BeanShell监听器,但它似乎没有公开脚本编译/执行的结果,也没有包含有用的信息,即使在进行了大量搜索之后,我也没有找到任何方法


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

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

prev.setSuccessful(false);
//your main Beanshell code goes here
prev.setSuccessful(true);
因此,如果在这些prev.setSuccessful方法之间发生任何Beanshell错误,则父采样器将失败


鉴于您的测试依赖于脚本编写,我建议您切换到和,从性能角度来看,这会更好,有关更多信息、基准测试和脚本编写最佳实践,请参阅文章

在测试结果中获取Beanshell后处理器失败的唯一方法是修改父采样器结果,在Beanshell脚本开始时将其设置为失败,在脚本失败时将其设置为成功,类似于:

prev.setSuccessful(false);
//your main Beanshell code goes here
prev.setSuccessful(true);
因此,如果在这些prev.setSuccessful方法之间发生任何Beanshell错误,则父采样器将失败


鉴于您的测试依赖于脚本编写,我建议您切换到和,从性能角度来看,这会更好,有关更多信息、基准测试和脚本编写最佳实践,请参阅文章

谢谢。显然更快,并且得到更好的错误报告,这很好,但是这种方法仍然需要积极努力,以特定的方式编写脚本以捕获此类故障。作为一名开发人员,我将其视为平台本身的一项工作,在执行所有解释器并知道是否存在错误之后,那么为什么不能使用这些信息来中止测试或设置失败,而不是强迫开发人员使用技巧来达到相同的结果呢?无论如何,谢谢你的回答,这是我目前为止最好的选择。谢谢。显然更快,并且得到更好的错误报告,这很好,但是这种方法仍然需要积极努力,以特定的方式编写脚本以捕获此类故障。作为一名开发人员,我将其视为平台本身的一项工作,在执行所有解释器并知道是否存在错误之后,那么为什么不能使用这些信息来中止测试或设置失败,而不是强迫开发人员使用技巧来达到相同的结果呢?无论如何,谢谢你的回答,这是我目前为止最好的选择。