目录
前言
今天跟一素未谋面的网友讨论python调用robot framework api重新re-run-failure-test的问题, 很遗憾未能帮得上忙。
便抽空结合官方的例子写了个小demo, 下面一起来看看吧!
How to re-run failure tests of suite
Gather all failure tests
put those tests into new suite
run the suite
done
Simple demo
two test case of the suites
one pass, one fail
# example: https://robot-framework.readthedocs.io/en/latest/autodoc/robot.running.html#examples
from robot.api import TestSuite
from robot.api import ResultWriter
from robot.conf import RobotSettings
def create_suite(name=None):
return TestSuite(name)
def is_test_suite_obj(suite):
'''
check suite type
'''
if not suite or not isinstance(suite, TestSuite):
raise Exception("Only accepted TestSuite Object")
def import_libs_into_suite(suite, lib_name='OperatingSystem'):
# import library into suite
is_test_suite_obj(suite)
suite.resource.imports.library(lib_name)
def create_test(suite, name, tag='smoke'):
is_test_suite_obj(suite)
return suite.tests.create(name, tags=[tag])
def set_robot_options(name, path="allure-reports"):
options = {
"output": "{}-output.xml".format(name),
"log": "{}-log.html".format(name),
"report": "{}-reporter.html".format(name),
"outputdir": path,
}
return RobotSettings(options)
def run(suite, output_name):
is_test_suite_obj(suite)
settings = set_robot_options(output_name)
result = suite.run(settings, critical='smoke')
ResultWriter(settings.output if settings.log
else result).write_results(
report=settings.report, log=settings.log)
return result
test_suite = create_suite('set failure test')
import_libs_into_suite(test_suite)
test = create_test(test_suite, 'Set Environment Variable')
test.keywords.create('Set Environment Variable', args=[
'SKYNET', 'activated'], type='setup')
test.keywords.create('Environment Variable Should Be Set', args=['SKYNET'])
failed_test = create_test(test_suite, 'Set failure testcase')
failed_test.keywords.create('Should Be Equal', args=[
1, 2])
result = run(test_suite, 'all-results')
Gather all failure tests
Gather all failure tests from result
# Gather all tests which are not passed
# trigger: use dir(result), dir(result.suite)
tests = [item.longname for item in result.suite.tests if not item.passed]
Put all failure tests into new suite
# trigger: cannot append test of the result
# but can append test of the suite
rerun_failed_suite = create_suite('Rerun failure test')
import_libs_into_suite(rerun_failed_suite)
for index, item in enumerate(test_suite.tests):
if item.longname in tests:
rerun_failed_suite.tests.append(item)
The whole demo
from robot.api import TestSuite
from robot.api import ResultWriter
from robot.conf import RobotSettings
def create_suite(name=None):
return TestSuite(name)
def is_test_suite_obj(suite):
'''
check suite type
'''
if not suite or not isinstance(suite, TestSuite):
raise Exception("Only accepted TestSuite Object")
def import_libs_into_suite(suite, lib_name='OperatingSystem'):
# import library into suite
is_test_suite_obj(suite)
suite.resource.imports.library(lib_name)
def create_test(suite, name, tag='smoke'):
is_test_suite_obj(suite)
return suite.tests.create(name, tags=[tag])
def set_robot_options(name, path="allure-reports"):
options = {
"output": "{}-output.xml".format(name),
"log": "{}-log.html".format(name),
"report": "{}-reporter.html".format(name),
"outputdir": path,
}
return RobotSettings(options)
def run(suite, output_name):
is_test_suite_obj(suite)
settings = set_robot_options(output_name)
result = suite.run(settings, critical='smoke')
ResultWriter(settings.output if settings.log
else result).write_results(
report=settings.report, log=settings.log)
return result
test_suite = create_suite('set failure test')
import_libs_into_suite(test_suite)
test = create_test(test_suite, 'Set Environment Variable')
test.keywords.create('Set Environment Variable', args=[
'SKYNET', 'activated'], type='setup')
test.keywords.create('Environment Variable Should Be Set', args=['SKYNET'])
failed_test = create_test(test_suite, 'Set failure testcase')
failed_test.keywords.create('Should Be Equal', args=[
1, 2])
result = run(test_suite, 'all-results')
tests = [item.longname for item in result.suite.tests if not item.passed]
rerun_failed_suite = create_suite('Rerun failure test')
import_libs_into_suite(rerun_failed_suite)
for index, item in enumerate(test_suite.tests):
if item.longname in tests:
rerun_failed_suite.tests.append(item)
run(rerun_failed_suite, 'rerun-results')
最后
以上就是爱笑咖啡最近收集整理的关于python调用robotframework api_Robot框架API系列—在Python中重新运行失败,robotframeworkapi,python,实现,rerunfailed...的全部内容,更多相关python调用robotframework内容请搜索靠谱客的其他文章。
发表评论 取消回复