2024-05-19 01:35:52 发布
网友
我正在扩展python 2.7unittest框架来进行一些功能测试。我想做的一件事是停止所有测试在测试内部和setUpClass()方法内部运行。有时,如果一个测试失败了,程序就崩溃了,不再需要继续测试,所以我想停止运行测试。
unittest
setUpClass()
我注意到一个TestResult有一个shouldStop属性和一个stop()方法,但是我不确定如何在测试内部访问它。
shouldStop
stop()
有人有什么想法吗?有更好的办法吗?
我又想了一个答案:
首先,我添加了一个新的异常:
class StopTests(Exception): """ Raise this exception in a test to stop the test run. """ pass
然后我向子测试类添加了一个新的assert:
assert
def assertStopTestsIfFalse(self, statement, reason=''): try: assert statement except AssertionError: result.addFailure(self, sys.exc_info())
最后,我重写了run函数,以便在testMethod()调用下面包含此函数:
run
testMethod()
except StopTests: result.addFailure(self, sys.exc_info()) result.stop()
我更喜欢这个,因为现在任何测试都可以停止所有测试,而且没有特定于cpython的代码。
目前,您只能在套件级别停止测试。进入TestCase后,在迭代测试时不使用TestResult的stop()方法。
TestCase
TestResult
与您的问题有些关联,如果您使用的是python 2.7,那么在使用-f/--failfast调用测试时可以使用python -m unittest标志。这将在第一次失败时停止测试。
-f/--failfast
python -m unittest
见25.3.2.1. failfast, catch and buffer command line options
您还可以考虑使用Nose运行测试,并使用-x, --stopflag提前停止测试。
-x, --stop
如果您感兴趣,这里有一个简单的示例,您可以自己决定如何使用py.test干净地退出测试套件:
# content of test_module.py import pytest counter = 0 def setup_function(func): global counter counter += 1 if counter >=3: pytest.exit("decided to stop the test run") def test_one(): pass def test_two(): pass def test_three(): pass
如果你运行这个,你会得到:
$ pytest test_module.py ============== test session starts ================= platform linux2 -- Python 2.6.5 -- pytest-1.4.0a1 test path 1: test_module.py test_module.py .. !!!! Exit: decided to stop the test run !!!!!!!!!!!! ============= 2 passed in 0.08 seconds =============
您还可以将py.test.exit()调用放入测试或项目特定的插件中。
py.test.exit()
侧注:py.test本机支持py.test --maxfail=NUM在NUM失败后实现停止。
py.test
py.test --maxfail=NUM
Sidenote2:py.test对以传统的unittest.TestCase样式运行测试的支持有限。
unittest.TestCase
我又想了一个答案:
首先,我添加了一个新的异常:
然后我向子测试类添加了一个新的
assert
:最后,我重写了
run
函数,以便在testMethod()
调用下面包含此函数:我更喜欢这个,因为现在任何测试都可以停止所有测试,而且没有特定于cpython的代码。
目前,您只能在套件级别停止测试。进入
TestCase
后,在迭代测试时不使用TestResult
的stop()
方法。与您的问题有些关联,如果您使用的是python 2.7,那么在使用
-f/--failfast
调用测试时可以使用python -m unittest
标志。这将在第一次失败时停止测试。见25.3.2.1. failfast, catch and buffer command line options
您还可以考虑使用Nose运行测试,并使用
-x, --stop
flag提前停止测试。如果您感兴趣,这里有一个简单的示例,您可以自己决定如何使用py.test干净地退出测试套件:
如果你运行这个,你会得到:
您还可以将
py.test.exit()
调用放入测试或项目特定的插件中。侧注:
py.test
本机支持py.test --maxfail=NUM
在NUM失败后实现停止。Sidenote2:
py.test
对以传统的unittest.TestCase
样式运行测试的支持有限。相关问题 更多 >
编程相关推荐