我编写了一个测试/模糊测试库,允许您简单地为其提供测试功能,然后库将生成一个自动测试,以查找打破该功能的内容,以便您可以采取适当的步骤使该功能高度可靠
heres the link to battle_tested
该项目取得了成功,对我做的事情非常有用。我遇到的问题是发现问题时回溯的大小。由于这个库以完全机械化的方式创建测试,因此测试的函数会将5或6个级别放入我的库中。这导致80%的回溯只是通过库的不同调用,然后才能到达测试函数以显示函数中的哪一行爆炸。
heres a link to a small demo that demonstrates how large the traceback is
我的问题:有没有办法切断回溯,所以它只会在我提出异常之前显示我的库之外的步骤?我真的试图让这个测试库用户友好,而且广泛且难以理解的回溯似乎是尝试使用它的人们的痛点,他们还不知道库正在做什么。< / p>
感谢您的帮助。
答案 0 :(得分: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
你仍然需要从那里识别和切片。