![](/img/trans.png)
[英]Parse output.xml before Suite Teardown in Robot Framework
[英]Parse Robot Framework's output xml
机器人框架吐出输出XML,然后用于构建HTML报告(带有rebot
),重新运行失败等。
我需要解析此文件以生成其他报告,特别是,我需要解析测试用例的文档以获取正则表达式,获取测试用例结果然后构建报告(这是为了与遗留系统集成)。
Robot Framework是否提供了轻松解析输出XML文件的功能,或者我们只使用标准的XML解析库?
好的,找到3个可行的回复:
DbBot
并查询创建的数据库。 xml.etree.ElementTree
非常简单。 visit_test
方法中执行您需要的visit_test
。 最后选择3作为Robot Framework的一部分,如果XML文件的格式发生变化,则不太可能破坏(或更容易修复)。
我遇到了类似的问题,对我来说使用Robot Framework的Listener Interface是最方便的解决方案。
当写入输出文件准备就绪时,将调用Listener版本3 API中的output_file
方法。 该方法的参数是输出XML文件的绝对路径,这是创建任何类型的新报告所需的全部内容。
例:
import os
"""Listener that parses the output XML when it is ready and creates a unique log."""
ROBOT_LISTENER_API_VERSION = 3
def output_file(path):
# parse xml with etree or lxml
log_dir = os.path.split(path)[0]
print('Extra log: %s' % (log_dir + '\\extra.log'))
测试执行的控制台日志:
D:\robot_framework>robot --listener my_listener.py my_test.robot
==============================================================================
My Test
==============================================================================
Some Test | PASS |
------------------------------------------------------------------------------
My Test | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Extra log: D:\robot_framework\extra.log
Output: D:\robot_framework\output.xml
Log: D:\robot_framework\log.html
Report: D:\robot_framework\report.html
附加日志文件列在默认输出中。
这个答案借鉴了Bence的例子,但增加了回显大总摘要行的功能。
#!/usr/bin/env python3
# invoke with robot --listener API-Libs/RF_Listener.py
import xml.etree.ElementTree as xmlElementTree
ROBOT_LISTENER_API_VERSION = 3
class RF_Listener: # class should be same as filename
def __init__(self):
self.ROBOT_LISTENER_API_VERSION = 3
def output_file(self, path): # Listener that parses the output XML when it is ready
root = xmlElementTree.parse(path).getroot()
for type_tag in root.findall('./statistics/total/stat'):
# <stat pass="1" fail="2">Critical Tests</stat>
# <stat pass="3" fail="4">All Tests</stat>
cntPassed = int(type_tag.attrib.get("pass")) # attrib is dict-like (except for 'text')
cntFailed = int(type_tag.attrib.get("fail"))
cntTests = cntPassed + cntFailed
pct_pass = cntPassed / cntTests * 100
fmt_str = "{}: {} tests, {} passed, {} failed, {:.3g}% pass rate (--listener summary)"
print(fmt_str.format(type_tag.text,cntTests, cntPassed, cntFailed,pct_pass))
# optionally write grand total results summary to a file
此版本打印到STDOUT而不是写入文件,因此在输出的末尾附近插入这两行。 适用于grep
(尤其适用于Jenkins作业description-setter
插件。)
Critical Tests: 3 tests, 1 passed, 2 failed, 33.3% pass rate (--listener summary)
All Tests: 7 tests, 3 passed, 4 failed, 42.9% pass rate (--listener summary)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.