Python 机器人框架中相互依存测试的自动失败/不执行

Python 机器人框架中相互依存测试的自动失败/不执行,python,testing,automated-tests,robotframework,Python,Testing,Automated Tests,Robotframework,我有大量的测试用例,其中几个测试用例是相互依赖的。是否有可能在以后的测试用例被执行时,您可以找到以前执行的测试用例的状态? 在我的例子中,第99个测试用例取决于之前一些测试用例的状态,因此,如果第24个或第38个测试用例失败,我希望第99个测试用例根本不被执行,从而节省我很多时间。 如果可能,请举例说明。提前谢谢 一旦机器人开始运行,就无法根据某些条件跳过测试。我认为这是机器人的弱点之一,但是设计师们。而且,没有一种内置的方式让一个测试依赖于另一个测试。A 然而,robot具有很强的可扩展性,版

我有大量的测试用例,其中几个测试用例是相互依赖的。是否有可能在以后的测试用例被执行时,您可以找到以前执行的测试用例的状态? 在我的例子中,第99个测试用例取决于之前一些测试用例的状态,因此,如果第24个或第38个测试用例失败,我希望第99个测试用例根本不被执行,从而节省我很多时间。
如果可能,请举例说明。提前谢谢

一旦机器人开始运行,就无法根据某些条件跳过测试。我认为这是机器人的弱点之一,但是设计师们。而且,没有一种内置的方式让一个测试依赖于另一个测试。A

然而,robot具有很强的可扩展性,版本2.8.5中引入的一项功能使得编写一个关键字变得很容易,如果另一个测试失败,该关键字将失败。有了它,库可以跟踪每个测试的通过/失败状态。有了这些知识,您可以创建一个关键字,如果其他测试失败,该关键字将立即失败

基本思想是,在每个测试完成时缓存通过/失败状态(通过特殊的
\u end\u test
方法)。然后,使用此值确定是否立即失败

下面是一个如何使用此类关键字的示例:

*** Settings ***
| Library | /path/to/DependencyLibrary.py

*** Test Cases ***
| Example of a failing test
| | fail | this test has failed

| Example of a dependent test
| | [Setup] | Require test case | Example of a failing test
| | log | hello, world
以下是库定义:

from robot.libraries.BuiltIn import BuiltIn

class DependencyLibrary(object):
    ROBOT_LISTENER_API_VERSION = 2
    ROBOT_LIBRARY_SCOPE = "GLOBAL"

    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self
        self.test_status = {}

    def require_test_case(self, name):
        key = name.lower()
        if (key not in self.test_status):
            BuiltIn().fail("required test case can't be found: '%s'" % name)

        if (self.test_status[key] != "PASS"):
            BuiltIn().fail("required test case failed: '%s'" % name)

        return True

    def _end_test(self, name, attrs):
        self.test_status[name.lower()] = attrs["status"]

为了解决这个问题,我使用了如下方法:

Run Keyword if  '${PREV TEST STATUS}'=='PASSED'  myKeyword

因此,这可能也适用于您。

以上内容必须标记为已回答。这真的很有帮助@布莱恩:我有个问题。我希望将其标记为未执行,而不是失败。这可能吗?@Vimal:不,不可能。@Vimal,您只能有通过或失败状态,但当测试失败时,您可以使用并相应地更改标记,使测试变为非关键状态<上面使用的code>BuiltIn.fail允许设置标记,但您也可以使用
set_tags
remove_tags
方法。@BryanOakley-很棒的解决方案,我在测试套件中使用它。@MarkHu:您一定做错了什么,因为
attrs
不应该是测试用例对象。可能您正在使用侦听器API版本3。这个例子显然使用的是版本2。我使用的是与我的套件中的测试设置相同的版本。我在测试设置中调用一个关键字,检查上一次测试是否失败。如果有,它将跳过所有案例,直到到达标记为独立的案例。我在我的测试设置关键字中检查这个标记,并执行独立的测试用例。工作出色。