Robot Framework中的自定义执行状态

时间:2014-08-21 09:29:59

标签: python robotframework

在Robot Framework中,每个测试用例的执行状态可以是PASS或FAIL。但是我有一个特定的要求,即在由于依赖性而失败时将少数测试标记为NOT EXECUTED。

我不确定如何实现这一目标。我需要专家建议我继续前进。

5 个答案:

答案 0 :(得分:1)

您无能为力,机器人仅支持测试状态的两个值:通过和失败。您可以将测试标记为非关键,以便它不会破坏构建,但它仍会在日志和报告中显示为已运行。

机器人核心团队表示他们不会支持此功能。有关详细信息,请参阅issue 1732

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

答案 1 :(得分:1)

如果您只需要对日志/报告文件进行更改,则应该查看here以实现--prerebotmodifier选项的SuiteVisitor。正如布莱恩·奥克利所说,如果你不记住这一点,这可能会搞砸你的通过/失败计数。

目前似乎无法在创建output.xml 之前实际更改测试状态,但有plans to implement it in RF 3.0。还讨论了skip status

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

还有可能在测试执行期间设置标签,但我还不熟悉,所以我无法真正讲述关于该atm的任何内容。这可能是另一种考虑依赖性失败的可能性,因为有些选项可以忽略某些标记关键字以进行日志/报告生成

答案 2 :(得分:1)

在实现跳过状态之前,如果关键测试失败,则可以使用exitonfailure停止进一步执行,然后更改output.xml(和tests.html)以将这些测试显示为“ < strong> NOT_RUN ”(灰色),而不是“ FAILED”(红色)。

这是一个示例(在RobotFramework 3.1.1和Python 3.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()),请运行它而无需,创建report.html和log.html:

outputDir = suite.name.replace(" ", "_") 
outputFile = "output.xml"

logger.info(F"Running Test Suite: {suite.name}", also_console=True)
result = suite.run(output=outputFile, outputdir=outputDir, \
         report=None, log=None, critical='Critical', exitonfailure=True)

请注意,我已使用“关键” 作为关键测试的识别标签,并使用了 exitonfailure 选项。

然后,重新访问output.xml,并从中创建report.html和log.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)

应在严重故障后显示所有测试,并且状态为灰色“ NOT_RUN”:

enter image description here

答案 3 :(得分:0)

我这样解决了:

运行关键字如果$ {blabla} == $ {True},请执行此任务ELSE日志以控制台$ {PREV_TEST_STATUS} $ {yellow} | NRUN |

测试未执行并标记为NRUN

enter image description here

答案 4 :(得分:-1)

实际上,您可以 SET TAG 运行您喜欢的任何关键字(用于完整性测试,回归测试......)

只需转到测试脚本配置并设置标记

即可

每当您想要运行时,只需转到“运行”选项卡并选择复选框“仅使用这些标签运行测试/使用这些标签跳过测试”

然后单击“开始”按钮:)机器人框架将选择匹配并运行它的任何关键字。

抱歉,我没有足够的声誉来发布图片:(