使用xunit参数时nose.run生成空测试XML报告的问题
解决nose生成xunit报告显示测试数为0的问题
我之前也碰到过一模一样的情况——控制台明明显示所有测试都执行了,但生成的xunit报告就是显示tests="0"。结合你的代码和Python 2.7.14的环境,问题根源在于手动构造的unittest TestSuite没有被nose的xunit插件正确识别统计,下面给你两种可行的修改方案:
方案一:让nose自动处理测试发现(推荐)
放弃手动构造suite的逻辑,直接让nose自己扫描测试文件,这样xunit插件能完美适配它的原生测试发现流程,生成正确的报告:
import nose if __name__ == "__main__": xunit_report = True log_file = 'my_report.xml' # 把测试路径直接加入参数,让nose自动发现测试用例 arguments = ["nosetests", '--verbosity=2', '<path_to_test_files>'] if xunit_report: arguments += ['--with-xunit', '--xunit-file', log_file] nose.run(argv=arguments)
方案二:保留手动构造suite的方式(适配现有逻辑)
如果必须手动加载测试用例,需要把unittest的TestSuite转换成nose兼容的ContextSuite,同时用run_suite方法配合配置触发插件生效:
import nose import unittest from nose.suite import ContextSuite from nose.config import Config if __name__ == "__main__": test_cases = unittest.TestLoader().discover('<path_to_test_files>') # 将unittest的测试套件转换为nose可识别的ContextSuite suite = ContextSuite([test_cases]) xunit_report = True log_file = 'my_report.xml' arguments = ["nosetests", '--verbosity=2'] if xunit_report: arguments += ['--with-xunit', '--xunit-file', log_file] # 传入配置确保xunit插件能正常统计测试用例 config = Config(argv=arguments) nose.run_suite(suite, config=config)
为什么原来的代码不生效?
- 你使用的是
unittest.TestSuite,而nose的xunit插件是基于自身的suite结构设计的,无法正确遍历统计unittest套件里的测试用例; - 直接调用
nose.run(suite=suite, argv=arguments)时,插件的初始化逻辑不会主动扫描你传入的suite,导致报告统计结果为0。
修改后运行代码,你应该就能看到my_report.xml里的tests数值和控制台显示的测试数完全一致了。
内容的提问来源于stack exchange,提问作者user2700889
相关产品推荐
相关产品推荐

