1

我编写了一个测试/模糊测试库,它允许您简单地给它一个测试函数,然后该库将生成一个自动化测试以找出破坏该函数的原因,以便您可以采取适当的步骤使该函数高度可靠。

这是battle_tested的链接

该项目结果证明是成功的,它对于做我想做的事情非常有用。我遇到的问题是发现问题时回溯的大小。由于该库以完全机械化的方式创建测试,因此测试的函数将在我的库中炸毁 5 或 6 个级别。这会导致 80% 的回溯只是通过库的不同调用,然后才到达被测函数以显示函数中的哪一行发生故障。

这是一个小演示的链接,该演示演示了回溯的大小

我的问题:有没有办法分割回溯,所以它只会在我引发异常之前显示我的库之外的步骤?我真的在努力使这个测试库对用户友好,对于那些尝试使用它但还不知道该库在下面做什么的人来说,广泛且难以理解的回溯似乎是他们的痛点。

我在这里先向您的帮助表示感谢。

4

1 回答 1

2

您始终可以使用 traceback.format_exc().splitlines() 创建一个列表:

#!/usr/bin/env python3
import traceback


def thing_that_will_blowup():
    assert False is True


def catch_it_blowup():
    try:
        thing_that_will_blowup()
    except AssertionError:
        exception_data = traceback.format_exc().splitlines()
        for index, line in enumerate(exception_data):
            if 'File' in line and os.path.basename(__file__) in line:
                print("{} - {}".format(index, line))
                print("{} - {}".format(index + 1, exception_data[index + 1]))


if __name__ == "__main__":
    catch_it_blowup()

返回:

1 -   File "split_stacktrace.py", line 11, in check_it_blowup
2 -     thing_that_will_blowup()
3 -   File "split_stacktrace.py", line 6, in thing_that_will_blowup
4 -     assert False is True

您仍然需要从那里识别和切片。

于 2017-06-13T19:47:17.613 回答