Robot Fram中的定制执行状态

2024-04-24 06:26:31 发布

您现在位置:Python中文网/ 问答频道 /正文

在Robot框架中,每个测试用例的执行状态可以是通过或失败。但是我有一个特殊的要求,就是当测试因依赖关系而失败时,将少数测试标记为未执行。在

我不知道如何实现这一点。我需要专家的建议才能继续前进。在


Tags: 标记框架关系状态robot测试用例建议专家
3条回答

在实现跳过状态之前,如果关键测试失败,可以使用exitonfailure停止进一步的执行,然后更改输出.xml(以及测试结果.html)将这些测试显示为“不运行”(灰色),而不是“失败”(红色)。在

下面是一个示例(在robotframework3.1.1和python3.6上测试):

首先创建一个扩展抽象类ResultVisitor的新类:

class ResultSkippedAfterCritical(ResultVisitor):

    def visit_suite(self, suite):
        suite.set_criticality(critical_tags='Critical')
        for test in suite.tests:
            if test.status == 'FAIL' and "Critical failure occurred" in test.message:
                test.status = 'NOT_RUN'
                test.message = 'Skipping test execution after critical failure.'

假设您已经创建了套件(例如使用TestSuiteBuilder()),那么在不创建的情况下运行它报告.html以及日志.html公司名称:

^{pr2}$

注意,我使用了“Critical”作为关键测试的标识标记,以及exitonfailure选项。在

然后,再次访问输出.xml,并创建报告.html以及日志.html从中:

revisitOutputFile = os.path.join(outputDir, outputFile)
logger.info(F"Checking skipped tests in {revisitOutputFile} due to critical failures", also_console=True)
result = ExecutionResult(revisitOutputFile) 
result.visit(ResultSkippedAfterCritical())
result.save(revisitOutputFile)

reportFile = 'report.html'
logFile = 'log.html'
logger.info(F"Generating {reportFile} and {logFile}", also_console=True)
writer = ResultWriter(result)
writer.write_results(outputdir=outputDir, report=reportFile, log=logFile)

它应显示严重故障后的所有测试,状态为灰色=“不运行”:

enter image description here

你无能为力,robot只支持两个测试状态值:通过和失败。您可以将测试标记为非关键测试,这样它就不会中断构建,但它仍将在日志和报告中显示为已运行。在

机器人核心团队表示,他们将不支持这一功能。有关详细信息,请参见issue 1732。在

即使robot不支持跳过测试的概念,您也可以选择编写一个脚本来扫描输出.xml并删除以某种方式标记为跳过的测试(可能通过向测试添加标记)。您还必须调整xml中失败测试的计数。一旦你修改了输出.xml文件,可以使用rebot重新生成日志和报表文件。在

如果您只需要对日志/报告文件进行更改,您应该查看一下here实现--prerebotmodifier选项的SuiteVisitor。正如布莱恩·奥克利所说,如果你不记住这一点,这可能会使你的及格/不及格人数减少。在

目前看来不可能真正改变之前的测试状态输出.xml已创建,但存在plans to implement it in RF 3.0。还有一个关于a skip status的讨论

另一个更复杂的解决方案是通过实现一个listener来创建自己的输出文件,该选项与--listener选项一起使用,该选项可以根据您的需要创建一个输出文件(可能与原始文件一起使用)输出.xml). 在

也有可能在测试执行期间设置标记,但我还不熟悉这一点,所以我不能真正告诉任何关于atm的信息。这可能是解释这些依赖关系失败的另一种可能,因为在生成日志/报告时可以忽略某些标记的关键字

相关问题 更多 >