unittest單元測試框架不只能夠適用於單元測試,還能夠適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,而且提供了豐富的斷言方法,判斷測試用例是否經過,最終生成測試結果。今天初步總結一下unittest的 用法。python
測試一段程序是否有錯誤,咱們既能夠採用普通的測試方法,也能夠採用unittest測試框架瀏覽器
class Count(): def __init__(self,a,b): self.a=a self.b=b def add(self): return self.a+self.b if __name__=="__main__": c=Count(2,3) print(c.add())
首先用普通方法進行測試框架
from count import Count class TestCount(): def test_add(self): try: c = Count(2, 3) sum = c.add() assert (sum == 6), 'The result is not correct' except AssertionError as e: print(e) # e 是一個變量,記錄了異常的類,能夠打印出錯誤信息 else: print("test pass") if __name__=="__main__": a = TestCount() a.test_add()
採用python內置的斷言方法,而後與異常處理相結合單元測試
如今再使用unittest測試框架進行測試測試
import unittest from count import Count class TestCount(unittest.TestCase): def setUp(self): print("test case starts") def tearDown(self): print("test case ends") def test_add(self): c=Count(2,4) sum=c.add() self.assertEqual(sum,7) def test_add2(self): c = Count(2, 4) sum=c.add() self.assertEqual(sum,6) if __name__=="__main__": suite=unittest.TestSuite() suite.addTest(TestCount("test_add")) # TestCount 是測試類名 suite.addTest(TestCount("test_add2")) # test__add是測試類中測試用例名,有幾個測試用例就添加幾個 runner=unittest.TextTestRunner() runner.run(suite)
其中if __name__=="__main__":中的代碼能夠用下面代碼代替ui
if __name__=="__main__": unittest.main()
unittest自帶的main方法能夠執行測試類中全部以test開頭的用例spa
unittest執行測試用例,總會自動執行setUp和tearDown方法,setUp方法完成測試用例一些初始工做,如開啓瀏覽器,teardown方法完成用例執行完的收尾工做,如關閉瀏覽器code
unittest測試類中用例名老是以test開頭視頻
unittest自身帶有一系列的斷言方法:blog
assertEqual(a,b,[msg='測試失敗時打印的信息']) 斷言a,b是否相等
assertNotEqual(a,b,[msg='測試失敗時打印的信息']) 斷言a,b不等
assertTrue(x,[msg='測試失敗時打印的信息']):斷言x是否True
assertFalse(x,[msg='測試失敗時打印的信息']):斷言x是否False
assertIn(a,b,[msg='測試失敗時打印的信息']):斷言a是否在b中
assertNotIn(a,b,[msg='測試失敗時打印的信息']):斷言a是否在b中
若是有大量的測試用例,存在於不一樣的文件中,若是要同時執行這些文件,能夠經過discover方法實現,這樣右分爲兩種狀況:1.文件都在同級目錄下2.含有子級目錄
1.文件都在同級目錄下
import unittest if __name__=="__main__": testdir = r"F:\python視頻\python_file\unit_test" # testdir是測試文件根目錄 discover = unittest.defaultTestLoader.discover(testdir, pattern="test_un*.py", top_level_dir=None) runner=unittest.TextTestRunner() runner.run(discover)
2.含有子級目錄
代碼同上,只是在每一個子級目錄中新建一個__init__.py文件
多個測試用例同時執行,unittest如何排序,肯定先執行哪個
unittest 經過比較用例名的ascll碼,哪一個用例名的ascll碼在前,先執行,不然後執行
import unittest from count import Count class TestCount(unittest.TestCase): def setUp(self): print("test case starts") def tearDown(self): print("test case ends") def test_add(self): print("test_add") c=Count(2,4) sum=c.add() self.assertEqual(sum,6) def test_bdd(self): print("test_bdd") c = Count(2, 4) sum=c.add() self.assertEqual(sum,6) if __name__=="__main__": unittest.main()
結果