如何在tearDown()函数中获取失败测试(Unittest)的回溯

how to get the traceback of failed test (unittest) in the tearDown() function(如何在tearDown()函数中获取失败测试(Unittest)的回溯)
本文介绍了如何在tearDown()函数中获取失败测试(Unittest)的回溯的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望将我运行的每个失败测试的所有异常的所有回溯保存到外部文件中。 我希望使用unittest的teardown,而不是在每个测试中使用try和Except,这样会更通用。

类似:

import traceback
import unittest

class SomeTestCase(unittest.TestCase):
    def setUp(self):
        pass

    def test_some_test(self):
        self.assertTrue(False)

    def tearDown(self):
        with open(logger.txt, 'a') as doc:
            doc.write(traceback.format_exc())

问题是,无法使用tearDown中的回溯调用您在test_ome_test中获得的异常(tracebacke返回NONE)

有什么建议吗?

推荐答案

所以在我检查了一大段单元测试代码后,我找到了一个解决方案!

TestCase类具有_outcome属性。
_outcome有一个名为errors的列表类型属性。 errors[0][1]是与包含回溯的sys.exc_info()输出完全相同的元组。
现在我有了这个元组,我可以在traceback.format_exception()中使用它,就像traceback.format_exc()使用它并解决问题一样

def tearDown(self):
    try:
        etype, value, tb = self._outcome.errors[0][1]
        trace = ''.join(traceback.format_exception(etype=etype, value=value, tb=tb, limit=None))
        date = '{date}
'.format(date=str(datetime.datetime.now()))
        name = '
' + self._testMethodName + '-
'
        with open(self.logger, 'a') as doc:
            doc.write(name + date + trace)
    except:
        pass

这篇关于如何在tearDown()函数中获取失败测试(Unittest)的回溯的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)