如何使用Robot Framework为每个测试结果获得一行?

MrS*_*eve 2 robotframework

我想从Robot Framework运行中获取测试用例结果,并将这些结果导入其他工具(ElasticSearch,ALM工具等).

为此,我希望能够生成每个测试一行的文本文件.以下是分隔的示例行管道:

testcase name | time run | duration | status
Run Code Online (Sandbox Code Playgroud)

我还会添加其他字段,但这些字段是基本字段.任何帮助赞赏.我一直在关注robot.result http://robot-framework.readthedocs.io/en/3.0.2/autodoc/robot.result.html但尚未弄明白.如果/当我这样做,我会在这里发表答案.

谢谢,

Bry*_*ley 5

output.xml文件很容易使用普通的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))
Run Code Online (Sandbox Code Playgroud)