当xmlrunner遇到subtest

xmlrunner遇到subtest

最近在学Jenkins的自动化测试,生成报告时发现需要xml文件,查询到可以借用xmlrunner来自动生成xml文件的报告。我们需要创建一个XMLTestRunner的实例,并在执行unittest.main时将其testRunner参数设置为该实例,下面是我的代码:

top_dir = '/Volumes/D/auto_test/Selenium_CSDN'
start_dir = '/Volumes/D/auto_test/Selenium_CSDN/tests'
xRunner = xmlrunner.XMLTestRunner(output=os.path.join(top_dir, 'xml_report'), verbosity=2)

if __name__ == '__main__':
    unittest.main(module=None, argv=['tests', 'discover', '-v', '-s', start_dir], testRunner=xRunner)

但时在执行过程时发生了错误,因此我的测试中代码中有使用subtest的功能,而XMLTestRunner中并没有重写addSubTest方法,没有创建每一个subtest的_TestInfo对象,导致在打印时调用该对象发生错误。

我的解决方法是直接在源码的_XMLTestResult中重写addSubTest方法,代码如下:

    def addSubTest(self, test, subtest, err):
        "让xmlrunner适用于subtest,但无法计算出每一个subtest的耗时"
        if not err:
            self.addSuccess(subtest)
            verbose_str = 'OK'
            short_str = '.'
        elif issubclass(err[0], AssertionError):
            self.addFailure(subtest, err)
            verbose_str = 'FAIL'
            short_str = 'F'
        else:
            self.addError(subtest, err)
            verbose_str = 'ERROR'
            short_str = 'E'
        if self.showAll:
            self.stream.write('  ' + subtest.id())
            self.stream.writeln('--' + verbose_str)
        elif self.dots:
            self.stream.write('  ' + str(subtest))
            self.stream.writeln('--' + short_str)

由于受unittest框架限制,无法记录每一个subtest的耗时。修改后执行,结果如下:
在这里插入图片描述
另外,我发现源码中的addFailure与addError是完全一样的,导致最后的汇总统计中只有error而没有failure。这里只需要将addFailure中的error部分改成failure就行了:

    def addFailure(self, test, err):
        """
        Called when a test method fails.
        """
        testinfo = _TestInfo(self, test, _TestInfo.FAILURE, err)
        self.failures.append((
            testinfo,
            self._exc_info_to_string(err, test)
        ))
        self._prepare_callback(testinfo, [], 'FAIL', 'F')

在xmlrunner源码中,创建了TextTestRunner的子类XMLTestRunner和TestResult的子类_XMLTestResult。XMLTestRunner中增加了记录测试耗时的功能,_XMLTestResult中主要新增了将测试结果转换为xml格式并写入xml文件中的功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值