我正在扩展python 2.7 unittest框架来进行一些功能测试.我想做的一件事就是阻止所有测试在测试内部和setUpClass()方法内部运行.有时如果测试失败,程序就会破坏,不再有任何用处继续测试,所以我想阻止测试运行.
我注意到TestResult有一个shouldStop属性和一个stop()方法,但我不确定如何访问测试内部.
有没有人有任何想法?有没有更好的办法?
python testing automated-tests functional-testing python-unittest
下面是一个示例脚本,它在第一个测试用例中检查前置条件,如果不满足前置条件,我的目的是中止脚本.
#!/usr/bin/python
import unittest
import sys
class TestMyScript(unittest.TestCase):
def test_000_prerequisite(self):
a = 0
if not a:
sys.exit()
return
def test_001_test1(self):
print "Inside test 1"
return
def test_002_test2(self):
print "Inside test 2"
return
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
但是,sys.exit()仅退出套件的单个测试用例.它不会退出整个脚本.
我理解unittest对每个测试用例进行单独处理,这就是为什么测试用例处理由任何测试用例引起的任何异常并进入下一个测试用例的原因.
但是我想要脚本自杀,我该怎么做?
这是我的脚本的输出:
./temp.py
EInside test 1
.Inside test 2
.
======================================================================
ERROR: test_000_prerequisite (__main__.TestMyScript)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./temp.py", line 9, in test_000_prerequisite
sys.exit()
SystemExit
----------------------------------------------------------------------
Ran 3 tests in 0.000s
FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)
我的猜测是,如果测试用例返回一些信号,我必须乱用TestRunner并终止脚本.但不确定如何真正实现它.
解:
我unittest用来测试我的Flask应用程序,并nose实际运行测试.
我的第一组测试是确保测试环境干净并阻止在Flask应用程序配置的数据库上运行测试.我确信我已经干净地设置了测试环境,但是如果没有运行所有测试,我想要一些保证.
import unittest
class MyTestCase(unittest.TestCase):
def setUp(self):
# set some stuff up
pass
def tearDown(self):
# do the teardown
pass
class TestEnvironmentTest(MyTestCase):
def test_environment_is_clean(self):
# A failing test
assert 0 == 1
class SomeOtherTest(MyTestCase):
def test_foo(self):
# A passing test
assert 1 == 1
Run Code Online (Sandbox Code Playgroud)
如果它失败了,我想要TestEnvironmentTest引起unittest或nose保释,并阻止SomeOtherTest和进行任何进一步的测试.是否存在一些内置的方法unittest(首选)或nose允许这样做?