Robotframework:拆卸失败时的行为

时间:2016-02-19 21:11:35

标签: robotframework

我试图了解机器人在测试拆解失败时的行为方式。

从概念上讲,我认为如果测试用例完成执行,则应该考虑通过。拆解不是测试的一部分,因此如果拆卸失败,测试用例仍应标记为已通过。我观察到的行为是,如果测试拆卸失败,则测试用例失败。这是应该发生的事情,有没有办法改变它?

当拆解失败时,我也看到了一些奇怪的东西。

控制台输出显示测试用例已通过,在案例旁边显示|PASS|。但是,输出底部的统计信息显示所有情况都失败了。

以下是一个例子:

*** Settings ***
Suite Teardown      Teardown

*** Keywords ***
Setup
    Log to Console      setup

Teardown
    Should Be Equal     1       2


*** Test Cases ***
case1
    [Setup]     Setup
    Log To Console      case

和输出:

==============================================================================
Test
==============================================================================
case1                                                                 setup
.case
case1                                                                 | PASS |
------------------------------------------------------------------------------
Test                                                                  | FAIL |
Suite teardown failed:
1 != 2

1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================

这只是令人困惑。测试通过,并显示为已通过,但在统计数据中标记为失败。这是一个错误,还是有某种方法可以修复它?

2 个答案:

答案 0 :(得分:1)

有时,拆卸测试失败是一个重要问题,例如,清理工作未完成,导致其他测试用例失败。因此,如果测试用例在拆除时失败,则机器人框架始终会报告FAIL。如果关键字失败对您的测试用例不是问题,请使用Run Keyword And Ignore Error

*** Keywords ***
Teardown
    Run Keyword And Ignore Error    Should Be Equal     1       2

但是,您应该注意,如果关键字失败,除非您检查输出日志中的详细信息,否则不会报告任何内容。

套件拆除在所有测试用例完成后运行 。第一个测试用例通过,程序打印PASS。之后,套件拆卸运行并且失败,因此程序打印FAIL。这是预期的结果。如果一个套件中有更多测试用例,则更容易理解,例如:

Test suite A
    run case 1            ---->    print PASS
    run case 2            ---->    print PASS
    run case 3            ---->    print PASS
    run suite teardown    ---->    print FAIL (and change case 1, 2, 3 to FAIL)

拆卸失败与机器人框架中的测试用例失败相同,因此机器人框架最终报告所有测试用例失败。检查输出log.html,您可以看到所有测试用例都是FAIL

答案 1 :(得分:0)

我找到了一个可能有用也可能没用的解决方案。我们有一个Jenkins集成,Jenkins将报告我希望看到的所有这些测试失败。我所做的不是从机器人生成html,只是生成xml。

然后我使用etree创建一个新的测试xml标记。

def create_test(id= 'sx-tx', name='Test'):
return ET.Element("test", attrib={'id': id, 'name': name})

我将拆解内部复制到新测试并使用'rebot'从新的xml生成xml。这使得Teardown成为一项测试,因此它只显示了一次失败。

如果你愿意,我可以详细说明。