Robot Framework:如何使用rebot --merge合并旧状态/新状态并保留唯一状态?

时间:2019-11-01 14:48:35

标签: python python-3.x robotframework

在重新执行失败的测试后,我正在使用rebot工具合并输出。

robot --output original.xml /path/to/dir/.
robot --rerunfailed original.xml --output rerun.xml /path/to/dir/.
rebot -o machine1.xml -l machine1.html --merge original.xml rerun.xml

在少数测试机上提供了相同的操作。 测试套件是相同的,并且针对每个VM执行。所有虚拟机都被认为是相同的,但是它们不稳定,因此我在每台计算机上收到的结果都不相同。 我想合并所有计算机上的所有结果,并获取通过测试的最大数量,以了解测试是否真的失败或只是不稳定的环境而测试本身就可以。

换句话说,如果测试至少在1台计算机上通过,但在其他3台计算机上未通过,则在最终报告中应将其视为“通过”。

但是,在这种情况下,我会收到False。

是否可以以某种方式更改行为?

最终报告中的示例:

Status: FAIL (critical)
Message:    Re-executed test has been merged.
New status: FAIL
New message: Re-executed test has been merged.
New status: FAIL
New message: IndexError: Given index 0 is out of the range 0--1.
Old status: FAIL
Old message: IndexError: Given index 0 is out of the range 0--1.
Old status: PASS
Old message: Re-executed test has been merged.
New status: PASS
New message: 
Old status: PASS
Old message: Re-executed test has been merged.
New status: PASS
New message: 
Old status: PASS
Old message: 

1 个答案:

答案 0 :(得分:1)

使用我自己编写的prerebotmodifier的简单脚本解决。也许对其他人会有帮助。

因此,我创建了 TestStatusChecker.py ,它有助于合并具有以下逻辑的报告:只有在所有报告中都失败的情况下,测试状态才会失败。

from robot.api import SuiteVisitor


class TestStatusChecker(SuiteVisitor):

    def __init__(self, *args):
        pass

    def visit_test(self, test):
        if 'PASS' in test.message and 'Re-executed test has been merged' in test.message:
            test.status = 'PASS'
            test.message = 'Test passed because it passed at least once.'

用于合并结果的CLI命令:

rebot -l final_log.html --prerebotmodifier TestStatusChecker.py --merge 1.xml 2.xml 3.xml 4.xml report