python unittest 單元測試框架

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()

結果

相關文章
相關標籤/搜索