如何在PyTest生成的XML中指定自定义测试用例名称?
自定义Python测试用例的XML输出名称
如果你使用的是pytest框架(从你提供的XML格式来看是pytest生成的),以下是两种简单有效的实现方式:
方法一:用自定义标记+钩子函数修改XML
这种方式灵活可控,适合需要给不同测试用例设置不同自定义名称的场景。
- 在项目根目录创建
conftest.py文件,添加以下钩子函数:
import pytest def pytest_xml_modifytestcase(xmltestcase, item): # 读取测试用例上的自定义标记 custom_name = item.get_closest_marker("case_name") if custom_name: # 修改XML中testcase元素的name属性 xmltestcase.set("name", custom_name.args[0])
- 在测试用例代码中添加自定义标记:
import pytest @pytest.mark.case_name("My test case blalbla") def test_case_blalbla(): assert True
运行测试并生成XML(命令:pytest --junitxml=result.xml),生成的XML中testcase的name就会变成你指定的自定义字符串。
方法二:利用测试用例的文档字符串
如果不想额外添加标记,可以直接用测试用例的文档字符串作为自定义名称,更简洁。
- 同样在
conftest.py中添加钩子函数:
def pytest_xml_modifytestcase(xmltestcase, item): # 读取测试用例的文档字符串 docstring = item.function.__doc__ if docstring: xmltestcase.set("name", docstring.strip())
- 给测试用例添加文档字符串:
def test_case_blalbla(): """My test case blalbla""" assert True
运行测试后,XML中的testcase name会自动替换为文档字符串内容。
如果你使用的是unittest框架
如果项目用的是unittest,可以通过自定义XML测试运行器来实现:
import unittest from xmlrunner import XMLTestRunner from xmlrunner.result import _TestInfo class CustomXMLTestRunner(XMLTestRunner): def _make_testcase_element(self, test_info: _TestInfo, xml_document): testcase = super()._make_testcase_element(test_info, xml_document) # 从测试方法的文档字符串获取自定义名称 if test_info.test_method.__doc__: testcase.set("name", test_info.test_method.__doc__.strip()) return testcase # 测试用例类 class MyTest(unittest.TestCase): def test_case_blalbla(self): """My test case blalbla""" self.assertTrue(True) if __name__ == "__main__": with open('test_results.xml', 'wb') as output: runner = CustomXMLTestRunner(output=output) unittest.main(testRunner=runner)
运行上述代码后,生成的XML文件中testcase的name会被替换为自定义内容。
内容的提问来源于stack exchange,提问作者user2422659
相关产品推荐
相关产品推荐

