概要
1. 如何在python中使用robot api执行测试用例
文档中提供了一个简单的例子, demo如下:
# 官网: https://robot-framework.readthedocs.io/en/latest/autodoc/robot.running.html
# 默认会在当前目录生成三个文件: output, log和report
from robot.api import TestSuite
from robot.api import ResultWriter
suite = TestSuite('Activate Skynet')
suite.resource.imports.library('OperatingSystem')
test = suite.tests.create('Should Activate Skynet', tags=['smoke'])
test.keywords.create('Set Environment Variable', args=[
'SKYNET', 'activated'], type='setup')
test.keywords.create('Environment Variable Should Be Set', args=['SKYNET'])
result = suite.run(critical='smoke', output='skynet.xml')
# Report and xUnit files can be generated based on the result object.
ResultWriter(result).write_results(report='skynet.html', log='skynet-log.html')
1.1 demo的问题
运行后使用浏览器打开log文件, 日志中少了keyword信息(如左图, 没有setup和KEYWORD), 那如何才能达到右图的效果呢?
1.2 如何解决
- 使用allure_robotframework, 参考文章
- 使用RobotSettings
2. 使用RobotSettings解决robot api 结果不显示keyword信息问题
- import RobotSettings: from robot.conf import RobotSettings
- 使用默认配置: settings = RobotSettings()
- suite.run()中增加settings参数: result = suite.run(settings, critical=‘smoke’, output=‘skynet.xml’)
- ResultWriter中使用settings的默认参数: ResultWriter(settings.output if settings.log else result).write_results(report=settings.report, log=settings.log)
完整代码如下:
# 官网: https://robot-framework.readthedocs.io/en/latest/autodoc/robot.running.html
# 默认会在当前目录生成三个文件: output, log和report
from robot.api import TestSuite
from robot.api import ResultWriter
from robot.conf import RobotSettings
suite = TestSuite('Activate Skynet')
suite.resource.imports.library('OperatingSystem')
test = suite.tests.create('Should Activate Skynet', tags=['smoke'])
test.keywords.create('Set Environment Variable', args=[
'SKYNET', 'activated'], type='setup')
test.keywords.create('Environment Variable Should Be Set', args=['SKYNET'])
settings = RobotSettings()
result = suite.run(settings, critical='smoke', output='skynet.xml')
# Report and xUnit files can be generated based on the result object.
# ResultWriter(result).write_results(report='skynet.html', log='skynet-log.html')
ResultWriter(settings.output if settings.log
else result).write_results(
report=settings.report, log=settings.log)
2.1 Log文件显示了keyword信息, 但如何修改默认文件名呢
答案是: 配置RobotSettings的options, 将代码修改如下:
from robot.api import TestSuite
from robot.api import ResultWriter
from robot.conf import RobotSettings
suite = TestSuite('Activate Skynet')
suite.resource.imports.library('OperatingSystem')
test = suite.tests.create('Should Activate Skynet', tags=['smoke'])
test.keywords.create('Set Environment Variable', args=[
'SKYNET', 'activated'], type='setup')
test.keywords.create('Environment Variable Should Be Set', args=['SKYNET'])
path = "reports"
apiname = 'skynet'
options = {
"output": "{}-output.xml".format(apiname),
"log": "{}-log.html".format(apiname),
"report": "{}-reporter.html".format(apiname),
"outputdir": path,
}
settings = RobotSettings(options)
result = suite.run(settings, critical='smoke')
ResultWriter(settings.output if settings.log
else result).write_results(
report=settings.report, log=settings.log)
3. 回顾
- 如何解决robot api结果没有显示keyword信息
- 第一种使用allure
- 第二种使用RobotSettings, 配置options(更多options, 参考源码。路径: robot/conf/settings.py)