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

阿隆·阿拉德

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

就像是:

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())

问题是您在 test_some_test 中获得的异常无法在拆卸中使用回溯调用(回溯返回 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}\n'.format(date=str(datetime.datetime.now()))
        name = '\n' + self._testMethodName + '-\n'
        with open(self.logger, 'a') as doc:
            doc.write(name + date + trace)
    except:
        pass

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Google Test TearDown()中检查测试是否失败?

python在tearDown()方法中获取测试失败的屏幕截图

如何在unittest.TestResult中获取成功测试的方法名称列表?

检测是否在tearDown()函数中测试失败-Xcode UIAutomation,XCTest,Swift

如何在 try/except 块中获取 cgitb 回溯?

如何在PROLOG中回溯

如何在django unittest中测试django会话?

如何在unittest测试用例中退出脚本

如何在Android unitTest/AndroidTest中测试文件IO

如何在unittest中自动生成测试用例编号?

PyCharm 2018中测试失败的两个回溯

如何在我的 UnitTest 中获取返回的 JsonResult 中的数据?

用于多个测试的Unittest setUp / tearDown

用于多个测试的Unittest setUp / tearDown

Unittest tearDown()方法取决于完成的测试

获取函数调用的回溯

如何获取python unittest来测试函数是否返回csv.reader对象?

如何在setUpClass中使python unittest失败?

如何在测试中模拟python函数

如何在 Rust 中测试异步函数?

如何在Jasmine中测试空函数?

如何在Python测试中获取文件?

回溯如何在Python中工作

如何在R中读取回溯

如何在Jupyter中抑制回溯?

获取Python的unittest会产生tearDown()方法

Expect语句适用于$ scope,如何在Karma测试中获取init()函数?

如果另一个先前的测试方法在Python中由于unittest失败,如何跳过测试方法?

在Python unittest中,执行完TestCase中的所有测试后如何调用函数?