先貼一下unittest官網地址。unittest文檔開頭介紹了四個重要的概念:test fixture,test case, test suite, test runner。html
test fixture表示執行一個或多個測試所需的準備。怎麼去理解這句話呢?好比咱們執行一條建立文章的測試用例,可是若是咱們調用建立文章的接口,須要咱們進行登陸。那麼咱們能夠把登陸做爲一個test fixture。python
測試用例,這個沒必要多說,沒有測試用例就不能叫作接口測試了。微信
咱們在作接口測試的時候,通常都是執行多條測試用例。這就有了test suite概念,簡單來講,就是把想要執行的測試用例進行組裝而後進行測試。框架
執行測試用例。
爲了方便你們的理解,會用一個實例對上面四個概念進行解釋。請看以下代碼:函數
import unittest class AddTest(unittest.TestCase): def setUp(self): print("在每一個用例執行以前") def tearDown(self): print("在每一個用例執行以後") @classmethod def setUpClass(cls): print("在用例執行以前,只執行一次,優先於setUp") @classmethod def tearDownClass(cls): print("全部用例運行以後只執行一次") def add(self, a, b): if type(a) == int and type(b) == int: return a + b else: return "請輸入數字" def test_add1(self): self.assertEqual(self.add(2, 3), 5, "驗證加法") def test_add2(self): self.assertEqual(self.add(2, 4), 6, "驗證加法") if __name__ == '__main__': # unittest.main() # test suite(構造測試集) suite = unittest.TestSuite() suite.addTest(AddTest("test_add1")) suite.addTest(AddTest("test_add2")) # test runner (執行測試) runner = unittest.TextTestRunner() runner.run(suite)
上面代碼輸出以下內容:單元測試
在用例執行以前,只執行一次,優先於setUp
在每一個用例執行以前
在每一個用例執行以後
在每一個用例執行以前
在每一個用例執行以後
全部用例運行以後只執行一次學習
咱們來根據代碼拆解一下,看哪部分對應test fixture,test case, test suite, test runner。首先,在使用unittest單元測試框架以前,咱們須要導包,咱們先import unittest
,而後建立一個AddTest類,這個類繼承unittest.TestCase。而後咱們建立一個add方法(注意:通常類中的函數咱們稱做爲方法),而後建立了2條測試用例test_add1,test_add2,注意!測試用例必須以test開頭!而後使用test fixture中setUp、tearDown、setUpClass 、tearDownClass。而後使用test suite把2條測試用例加進去,固然須要注意一點,用例執行是有順序的(按照 ASCII 碼的從小到大的順序),好比test_add1和test_add2,前面都是同樣的,可是最後1位1排在2前面,因此先執行1,最後使用test runner執行測試用例。到這裏想必你們都已經明白。最後畫一張思惟導圖,更方便你們的理解。測試
細心的人能夠看到,測試用例中有一個assertEqual,這就是咱們說比assert更好用的斷言,那麼這些斷言有哪些呢?請看下面表格:ui
Method | Checks that |
---|---|
assertEqual(a, b) | a == b |
assertNotEqual(a, b) | a != b |
assertTrue(x) | bool(x) is True |
assertFalse(x) | bool(x) is False |
assertIs(a, b) | a is b |
assertIsNot(a, b) | a is not b |
assertIsNone(x) | x is None |
assertIsNotNone(x) | x is not None |
assertIn(a, b) | a in b |
assertNotIn(a, b) | a not in b |
assertIsInstance(a, b) | isinstance(a, b) |
assertNotIsInstance(a, b) | not isinstance(a, b) |
小結:本章內容只是簡單介紹了一下unittest的使用方法以及相關概念,unittest框架使用起來很簡單也很方便,建議你們多去官網學習,固然無論是UI自動化也好,仍是接口自動化也好,若是使用Python實現,通常都不會繞過Unittest這個概念,但願你們能夠熟練掌握。 code
歡迎關注微信公衆號:軟件測試汪。軟件測試交流羣:809111560