2015-10-28 97 views
1

你好,我有这样的问题,当我试图停止测试,如果2个或更多的测试失败,我使用监听器库为此,我检查状态,当计数器== 2时,“FAIL”添加到计数器,测试必须停止,但它不会。如何停止执行测试,如果2个或更多的测试失败

from robot.libraries.BuiltIn import BuiltIn 

class PythonListener(object): 
    ROBOT_LIBRARY_SCOPE = 'TEST SUITE' 
    ROBOT_LISTENER_API_VERSION = 2 

def __init__(self): 
    self.ROBOT_LIBRARY_LISTENER = self 

def end_test(self, name, attrs): 
    global result 
    global count 
    count = 0 
    result = None 
    print 'Suite %s (%s) start %s.' % (name, attrs['longname'], attrs['status']) 
    if attrs['status'] == "FAIL": 
     count += 1 
     if count >= 2: 
      result = BuiltIn.fatal_error(self) 
      return result 
+0

为什么你想中途停止测试?如果两件以上的事情被破坏会怎样? – jonrsharpe

+0

@jonrsharpe我有关于发送电子邮件的功能的报告,停止测试后,我会检查问题并重新运行测试。 – dayzz

+0

这并不能真正回答我的问题。测试需要很长时间才能运行?它们是相互关联的吗?为什么不能在最后检查所有问题? – jonrsharpe

回答

1

你的代码有几个错误。但是,即使修复语法问题,此解决方案也不起作用。监听器不能导致测试失败。监听者纯粹是观察者,它不能运行关键字。您可以拨打电话sys.exit(),但会立即终止测试而不生成报告。

您需要做的是实现每个测试用例调用的关键字,它可以检查侦听器定义的count变量。然后,您可以在每个测试设置或拆卸中调用此关键字。 https://stackoverflow.com/a/28508009/7432

至于在你的代码中的问题:

首先,方法__init__压痕和

实现关键字和相同的模块中的监听器可以在这个答案中可以看出__end_test__不正确,导致这些函数是全局函数而不是该类的方法。

其次,您的end_test方法会在每次调用时将计数重置为零。您需要制作count对象属性。

三,您错误地致电fatal_error。更改此:

result = BuiltIn.fatal_error(self) 

...这(注意BuiltIn()括号):

result = BuiltIn().fatal_error("failed due to failure >= 2") 

但是就像我刚才说的,你可以调用侦听器内这个关键字,但它不会影响你的测试运行。

+0

谢谢你的回答和链接,问题解决了! – dayzz

相关问题