2017-02-24 31 views
1

在我的公司,我们使用JMeter作为我们的发布管道的一部分来运行各种测试(烟雾,负载等)。就像现在我创建更复杂的测试场景一样,我使用了很多BeanShell,而且我担心JMeter对于BeanShell脚本失败似乎完全正确,并且我想找到一种失败的方法测试BeanShell何时失败。JMeter在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 Listener,但它似乎没有公开脚本编译/执行的结果(SampleEvent不包含有用的信息),甚至在经过大量搜索之后,我发现没有办法做到这一点在所有。

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

回答

4

得到测试结果的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本文的详细信息,基准和脚本的最佳实践。

+0

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

相关问题