① 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()時,千萬不要忽略了用例直接的相互影響,要充分考慮到用例之間的耦合