在我的公司,我们使用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代码,命令行配置,任何东西,只要我可以在我的测试套件上添加一次,并且至少触发一个错误或中止套件以确保它将被调查。
答案 0 :(得分:4)
在测试结果中获得Beanshell PostProcessor故障的唯一方法是修改父级采样器结果,将其设置为&#34;失败&#34;在Beanshell脚本的开头和#34;成功&#34;在脚本失败时,例如:
prev.setSuccessful(false);
//your main Beanshell code goes here
prev.setSuccessful(true);
因此,如果在这些prev.setSuccessful
方法之间发生任何Beanshell错误,则父采样器将失败。
鉴于您的测试依赖于脚本编写,我建议您切换到JRS223 Test Elements和Groovy language,从性能角度来看会更好,有关详细信息,基准测试和脚本编写,请参阅Groovy Is the New Black文章最佳做法。