① setUp():每个测试函数运行前运行
② tearDown():每个测试函数运行完后执行
③ setUpClass():必须使用@classmethod 装饰器,所有test运行前运行一次
④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次
由上可见,setUp()相当于测试用例的前置条件,tearDown()相当于测试用例的执行后对数据及环境的后期处理。
1、setUpClass()和tearDownClass()
import unittest
class TestDemo(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setupclass")
def test_A(self):
print("test_A")
def test_a(self):
print("test_a")
def test_2(self):
print("test_2")
def gest_3(self):#故意将test写成gest,看是否会被执行
print("gest_3")
@classmethod
def tearDownClass(cls):
print("teardownclass")
if __name__ == '__main__':
unittest.main()
运行结果:
...
---------------------------------------------------------------
Ran 3 tests in 0.000s
OK
setupclass
test_2
test_A
test_a
teardownclass
Process finished with exit code 0
2、setUp()和tearDown()
import unittest
class TestDemo(unittest.TestCase):
def setUp(self):
print("setUp")
def test_A(self):
print("test_A")
def test_a(self):
print("test_a")
def test_2(self):
print("test_2")
def gest_3(self):#故意将test写成gest,看是否会被执行
print("gest_3")
def tearDown(self):
print("tearDown")
if __name__ == '__main__':
unittest.main()
运行结果:
...
---------------------------------------------------------------
Ran 3 tests in 0.000s
OK
setUp
test_2
tearDown
setUp
test_A
tearDown
setUp
test_a
tearDown
Process finished with exit code 0
从上面两个示例可以看到,每运行一个用例,都会执行一次setUp()和tearDown()方法;而执行所有用例,setUpClass()和tearDownClass()只需要执行一次。不难看出,后者配对使用最大的优势是节省测试时间,主要体现在两个方面:(1)不需要反复地打开浏览器操作(2)只需要建立一次数据库连接,并进行清理。
值得注意的是:在setUpClass()和tearDownClass()时,千万不要忽略了用例直接的相互影响,要充分考虑到用例之间的耦合