java - JMeter 不会因 BeanShell 错误而失败

标签 java jmeter jmeter-plugins beanshell

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

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

JMeter screenshot

如上所示,我有一个带有包含语法错误的 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 代码、命令行配置,只要我可以在我的测试套件中添加一次,并且至少触发一个错误或中止套件以确保它将被调查。

最佳答案

在测试结果中获得 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有关更多信息、基准测试和脚本编写最佳实践的文章。

关于java - JMeter 不会因 BeanShell 错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42438716/

相关文章:

jmeter - 如何将从Chrome导出的.HAR文件导入到JMeter中?

ajax - 通过 JMeter 进行 AJAX 调用的性能测试

java - 使用 Java 通过 SSL 的 LDAP

java - 用完整形式替换缩写/俚语

jmeter - 代理服务器拒绝连接 JMeter

javascript - 非法使用 undefined variable 、类或 'void' 文字

JMeter - 为 JMeter 贡献新功能

java - 部署规则集证书错误

SomeClass.class 的 Java 语法

testing - Jmeter模拟两个用户交互