我想从Robot Framework运行中获取测试用例结果,并将这些结果导入其他工具(ElasticSearch,ALM工具等)。
为此,我希望能够生成每个测试一行的文本文件。以下是一个分隔的行管道示例:
testcase name | time run | duration | status
我还会添加其他字段,但这些字段是基本字段。任何帮助赞赏。我一直在关注robot.result http://robot-framework.readthedocs.io/en/3.0.2/autodoc/robot.result.html,但还没有想到它。如果/当我这样做,我会在这里发布答案。
谢谢,
答案 0 :(得分:5)
使用普通的XML解析库很容易解析output.xml文件。
这是一个简单的例子:
from __future__ import print_function
import xml.etree.ElementTree as ET
from datetime import datetime
def get_robot_results(filepath):
results = []
with open(filepath, "r") as f:
xml = ET.parse(f)
root = xml.getroot()
if root.tag != "robot":
raise Exception("expect root tag 'robot', got '%s'" % root.tag)
for suite_node in root.findall("suite"):
for test_node in suite_node.findall("test"):
status_node = test_node.find("status")
name = test_node.attrib["name"]
status = status_node.attrib["status"]
start = status_node.attrib["starttime"]
end = status_node.attrib["endtime"]
start_time = datetime.strptime(start, '%Y%m%d %H:%M:%S.%f')
end_time = datetime.strptime(end, '%Y%m%d %H:%M:%S.%f')
elapsed = str(end_time-start_time)
results.append([name, start, elapsed, status])
return results
if __name__ == "__main__":
results = get_robot_results("output.xml")
for row in results:
print(" | ".join(row))
答案 1 :(得分:4)
Bryan是正确的,使用标准的XML解析模块很容易解析Robot的output.xml。或者,您可以使用Robot自己的结果解析模块以及从中获得的模型:
from robot.api import ExecutionResult, SuiteVisitor
class PrintTestInfo(SuiteVisitor):
def visit_test(self, test):
print('{} | {} | {} | {}'.format(test.name, test.starttime,
test.elapsedtime, test.status))
result = ExecutionResult('output.xml')
result.suite.visit(PrintTestInfo())
有关上面使用的API的更多详细信息,请参阅http://robot-framework.readthedocs.io/。