我正在尝试理解当Test teardown出现故障时Robot的行为。
从概念上讲,我认为如果一个测试用例完成了执行,它应该被认为是通过的。teardown不是测试的一部分,所以如果Teardown中有失败,测试用例仍然应该标记为通过。我观察到的行为是,如果测试teardown失败,测试用例也会失败。这是应该发生的吗,有什么方法可以改变它吗?
当Suite teardown失败时,我也看到了一些奇怪的事情。
控制台输出将测试用例显示为已通过,并在用例旁边显示|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
==============================================================================这太让人困惑了。测试通过,并显示为通过,但在统计数据中标记为失败。这是一个bug,或者有什么方法可以修复它吗?
发布于 2016-02-20 15:09:29
有时拆卸测试失败是一个重要的问题,例如,清理工作没有完成,这会导致其他测试用例失败。因此,如果测试用例在拆卸时失败,robot框架将始终报告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的。
发布于 2017-01-05 22:49:50
我想出了一个可能有用也可能没用的解决方案。我们有一个Jenkins集成,Jenkins将报告我希望看到的所有这些测试失败。我所做的不是从机器人生成html,而是xml。
然后,我使用etree创建了一个新的测试xml标记。
def create_test(id= 'sx-tx', name='Test'):
return ET.Element("test", attrib={'id': id, 'name': name})我将teardown内部代码复制到新的测试中,并使用'rebot‘从新的xml生成xml。这使得Teardown成为一个测试,因此它只显示一个失败。
如果你愿意,我可以详细说明。
https://stackoverflow.com/questions/35515110
复制相似问题