在Robot Framework中,每个测试用例的执行状态可以是PASS或FAIL。但是我有一个特定的要求,即在由于依赖性而失败时将少数测试标记为NOT EXECUTED。
我不确定如何实现这一目标。我需要专家建议我继续前进。
答案 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”:
答案 3 :(得分:0)
我这样解决了:
运行关键字如果$ {blabla} == $ {True},请执行此任务ELSE日志以控制台$ {PREV_TEST_STATUS} $ {yellow} | NRUN |
测试未执行并标记为NRUN
答案 4 :(得分:-1)
实际上,您可以 SET TAG 运行您喜欢的任何关键字(用于完整性测试,回归测试......)
只需转到测试脚本配置并设置标记
即可每当您想要运行时,只需转到“运行”选项卡并选择复选框“仅使用这些标签运行测试/使用这些标签跳过测试”
然后单击“开始”按钮:)机器人框架将选择匹配并运行它的任何关键字。
抱歉,我没有足够的声誉来发布图片:(