selenium單元測試框架unittest
阿新 • • 發佈:2018-11-22
單元測試框架的優勢:
- 用例規範,組織明瞭,方便後續維護
- 提供多種比較方法
- 日誌清晰,能夠快速定位bug
四個概念:
- test case:測試用例,即一個包括setUp--run--tearDown的測試流程
- test suite:測試套件,可以執行一個或多個測試用例
- test runner:執行用例,測試結果儲存到TextTeestResult例項中
- test fixture:對一個測試用例環境的搭建和銷燬,通過setUp和tearDown視線
在count.py檔案中定義Count類
#coding=utf-8class Count: """docstring for Count""" def __init__(self,a,b): #初始化引數 self.a=a self.b=b def add(self): return self.a+self.b
un_test.py檔案
#coding=utf-8 from count import Count import unittest class TestCount(unittest.TestCase): """docstring for TestCount""" def setUp(self): #測試開始前的前置性工作 self.c = Count(4,6) def test_count(self): #測試案例必須以test開頭 self.add = self.c.add() self.assertEqual(self.add,10) def tearDown(self): #完成測試後的後置工作 pass if __name__ == '__main__': unittest.main() #main方法預設執行所有的用例
將assertEqual(self.add,10)改為assertEqual(self.add,8),再執行一次,則有詳細的報錯資訊
main()方法中封裝了TestSuite()和TextTestRunner(),註釋掉main()方法後如下:
#unittest.main() #構造測試集 suite = unittest.TestSuite() suite.addTest(TestCount('test_count')) #addTest裝載測試用例,只執行裝載的用例 #執行測試 runner = unittest.TextTestRunner() runner.run(suite)
unittest中提供的比較方法:
discover更多測試用例
太多用例寫在一個檔案中不便於後續的維護工作,discover方法後續新增 un_*.py 檔案時,不需要對 alltest.py 檔案進行修改
如果discover中執行的檔案涉及到多層級目錄,需要在每個目錄中新增__init__.py檔案
#alltest.py #coding=utf-8 import unittest def creatsuite(): testunit = unittest.TestSuite() test_address = 'C:\\Users\\user\\Desktop\\python_study\\script' #測試指令碼所在目錄 #定義discover方法的引數 discover = unittest.defaultTestLoader.discover(test_address,pattern='un_*.py',top_level_dir=None) for test_suite in discover: for test_case in test_suite: testunit.addTests(test_case) return testunit if __name__ == '__main__': runner = unittest.TextTestRunner() runner.run(creatsuite())
兩個測試類檔案un_test.py un_test2.py
#un_test.py #coding=utf-8 from count import Count import prime import unittest class TestCount(unittest.TestCase): """docstring for TestCount""" def setUp(self): self.c = Count(4,6) def test_count(self): self.add = self.c.add() self.assertEqual(self.add,10) def test_prime(self): self.pr = prime.is_Prime(3) self.assertTrue(self.pr,msg='is not prime') def tearDown(self): pass
#un_test2.py #coding=utf-8 from count import Count import prime import unittest class TestCount2(unittest.TestCase): """docstring for TestCount""" def setUp(self): self.c = Count(4,6) def test_count2(self): self.add = self.c.add() self.assertEqual(self.add,10) def test_prime2(self): self.pr = prime.is_Prime(3) self.assertTrue(self.pr,msg='is not prime') def tearDown(self): pass
對於目錄、檔案、用例來說,預設根據ASCII碼順序執行:0~9,A~Z,a~z
如果對用例執行有順序要求,可以通過調整目錄、檔案、用例的名稱或者用 TestSuite 類的 addTest() 方法按照一定的順序來載入