我有一个python脚本tutorial.py。我想从我的python测试套件中的test_tutorial.py文件运行这个脚本如果tutorial.py执行时没有任何异常,则希望测试通过;如果在tutorial.py执行期间引发任何异常,则希望测试失败。
下面是我如何编写test_tutorial.py,它不会产生所需的行为:

from os import system
test_passes = False
try:
    system("python tutorial.py")
    test_passes = True
except:
    pass
assert test_passes

我发现上面的控制流是不正确的:如果tutorial.py引发异常,那么assert行永远不会执行。
测试外部脚本是否引发异常的正确方法是什么?

最佳答案

如果没有错误,则s0

from os import system
s=system("python tutorial.py")
assert  s == 0

或使用subprocess
from subprocess import PIPE,Popen

s = Popen(["python" ,"tutorial.py"],stderr=PIPE)

_,err = s.communicate() # err  will be empty string if the program runs ok
assert not err

您的try/except没有从教程文件中捕获任何内容,您可以将所有内容移到教程文件之外,它的行为将相同:
from os import system
test_passes = False

s = system("python tutorial.py")
test_passes = True

assert test_passes

10-08 08:41