junit/xunit妨碍结果xml文件
junitparser的Python项目详细描述
它是做什么的?
junit parser是一个junit/xunit结果xml解析器。使用它来分析和操作 现有的结果XML文件,或者从头开始创建新的JUnit/XUnit结果XMLS。
已经有很多模块可以从 特定格式,但您可能会遇到一些专有的或不太为人所知的格式 你想转换它们并将结果提供给另一个工具,或者,你可以 想用你自己的方式操纵结果。这就是junitparser来的地方 变成便利。
为什么是junitparser?
- 功能性。有各种junit/xunit xml库,有些库有 解析,有些是XML生成,有些是操作。这个模块可以 都是一个包裹。
- 可扩展性。junit/xunit几乎不是一种标准格式。基本格式 有点普遍同意,但除此之外,可能还有“习俗” 元素和属性。junitparser的目标是通过 允许用户对一些基类进行monkeypatch和子类化。
- Python。您可以用pythonic方式操作测试用例和套件。
安装
pip install junitparser
用法
您应该相对熟悉junit xml格式。如果没有,就跑 pydoc,查看公开的类和函数的结构。
从头开始创建junit xml格式的报告
您有一些测试结果数据,希望将它们转换为junit.xml 格式。
fromjunitparserimportTestCase,TestSuite,JUnitXml,Skipped,Error# Create casescase1=TestCase('case1')case1.result=Skipped()case2=TestCase('case2')case2.result=Error('Example error message','the_error_type')# Create suite and add casessuite=TestSuite('suite1')suite.add_property('build','55')suite.add_testcase(case1)suite.add_testcase(case2)suite.delete_testcase(case2)# Add suite to JunitXmlxml=JUnitXml()xml.add_testsuite(suite)xml.write('junit.xml')
< H3>读取和操作退出JUnit/XUnit XML文件
您有一些现有的JunIT.xml文件,并且希望修改内容。
fromjunitparserimportJUnitXmlxml=JUnitXml.fromfile('/path/to/junit.xml')forsuiteinxml:# handle suitesforcaseinsuite:# handle casesxml.write()# Writes back to file
合并XML文件
您有两个或多个XML文件,希望将它们合并为一个。
fromjunitparserimportJUnitXmlxml1=JUnitXml.fromfile('/path/to/junit1.xml')xml2=JUnitXml.fromfile('/path/to/junit2.xml')newxml=xml1+xml2# Alternatively, merge in placexml1+=xml2
注意,它不会检查重复的条目。你需要处理他们 你自己的。
使用自定义属性创建xml
要使用默认不支持的属性。
fromjunitparserimportTestCase,Attr,IntAttr,FloatAttr# Add the custom attributeTestCase.id=IntAttr('id')TestCase.rate=FloatAttr('rate')TestCase.custom=Attr('custom')case=TestCase()case.id=123case.rate=0.95case.custom='foobar'
使用自定义元素处理xml
也许1000年后你会想这样做一次,但无论如何。 假设您想将元素customelement添加到testcase。
fromjunitparserimportElement,Attr,TestSuite# Create the new element by subclassing Element,# and add custom attributes to it.classCustomElement(Element):_tag='custom'foo=Attr()bar=Attr()testcase=TestCase()custom=CustomElement()testcase.append(custom)# To find a single sub-element:testcase.child(CustomElement)# To iterate over custom elements:forcustomintestcase.iterchildren(CustomElement):...# Do things with custom element
处理自定义xml属性
假设您有一些数据作为自定义属性存储在xml中,并且您希望 读出来:
fromjunitparserimportElement,Attr,TestSuite# Create the new element by subclassing Element or one of its child class,# and add custom attributes to it.classMyTestCase(TestCase):foo=Attr()xml=JUnitXml.fromfile('/path/to/junit.xml')forsuiteinxml:# handle suitesforcaseinsuite:my_case=MyTestCase.fromelem(case)print(my_case.foo)
命令行
$ junitparser --help usage: junitparser [-h][-v]{merge} ... Junitparser CLI helper. positional arguments: {merge}command merge Merge Junit XML format reports with junitparser. optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit
$ junitparser merge --help usage: junitparser merge [-h] paths [paths ...] output positional arguments: paths Original XML path(s). output Merged XML Path. optional arguments: -h, --help show this help message and exit
测试
您可以直接运行案例:
python test.py
或者使用pytest:
pytest test.py
注释
还有一些其他包提供类似的功能。他们是 在那里呆了很长时间,但可能不像 青年人:
- xunitparser:读取junit/xunit xml文件并将它们映射到python对象
- xunitgen:生成xunit.xml文件
- xunitmerge:用于将多个xunit xml报告合并到单个xunit xml报告中的实用工具 XML报表。
- junit-xml:创建可由 詹金斯等工具
贡献
求你了!