我试图了解机器人在测试拆解失败时的行为方式。
从概念上讲,我认为如果测试用例完成执行,则应该考虑通过。拆解不是测试的一部分,因此如果拆卸失败,测试用例仍应标记为已通过。我观察到的行为是,如果测试拆卸失败,则测试用例失败。这是应该发生的事情,有没有办法改变它?
当拆解失败时,我也看到了一些奇怪的东西。
控制台输出显示测试用例已通过,在案例旁边显示|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
==============================================================================
这只是令人困惑。测试通过,并显示为已通过,但在统计数据中标记为失败。这是一个错误,还是有某种方法可以修复它?
答案 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成为一项测试,因此它只显示了一次失败。
如果你愿意,我可以详细说明。