【问题标题】:JMeter doesn't fail on BeanShell errorsJMeter 不会因 BeanShell 错误而失败
【发布时间】:2023-03-17 10:20:01
【问题描述】:

在我的公司,我们使用 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 监听器,但它似乎没有暴露脚本编译/执行的结果(SampleEvent 不包含有用的信息),即使经过大量搜索,我也没有办法做完全没有。

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

【问题讨论】:

    标签: java jmeter jmeter-plugins beanshell


    【解决方案1】:

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

    prev.setSuccessful(false);
    //your main Beanshell code goes here
    prev.setSuccessful(true);
    

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


    鉴于您的测试依赖于脚本,我建议切换到 JRS223 Test ElementsGroovy language,从性能角度来看,它会好得多,请参阅 Groovy Is the New Black 文章了解更多信息、基准和脚本最佳实践。

    【讨论】:

    • 谢谢。显然更快并获得更好的错误报告,这很好,但是这种方法仍然需要积极努力以特定方式对脚本进行编码以捕获此类故障。作为开发人员,我将其视为平台本身的工作,毕竟解释器已执行并知道是否存在错误,那么为什么不能使用这些信息来中止测试或设置失败而不是强迫开发人员使用技巧来达到相同的结果?无论如何,感谢您的回答,这是我迄今为止最好的选择。
    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 2012-08-09
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2017-02-11
    • 2020-08-28
    相关资源
    最近更新 更多