Unittest測試框架

unittest框架解析
unittest 是python 的單元測試框架晕鹊,unittest 單元測試提供了創(chuàng)建測試用例痴脾,測試套件以及批量執(zhí)行的方案, unittest 在安裝pyhton 以后就直接自帶了,直接import unittest 就可以使用躁锁。

作為單元測試的框架峡谊, unittest 也是可以對程序最小模塊的一種敏捷化的測試崖面。在自動化測試中厚骗,必須需要知道所使用語言的單元測試框架。利用單元測試框架浑槽,創(chuàng)建一個類蒋失,該類繼承unittest的TestCase,這樣可以把每個case看成是一個最小的單元桐玻, 由測試容器組織起來篙挽,到時候直接執(zhí)行,同時引入測試報告镊靴。

unittest.TestCase:TestCase類铣卡,所有測試用例類繼承的基本類。

unittest.main():使用她可以方便的將一個單元測試模塊變?yōu)榭芍苯舆\行的測試腳本邑闲,main()方法使用TestLoader類來搜索所有包含在該模塊中以“test”命名開頭的測試方法算行,并自動執(zhí)行他們。執(zhí)行方法的默認順序是:根據ASCII碼的順序加載測試用例苫耸,數字與字母的順序為:0-9,A-Z儡陨,a-z褪子。所以以A開頭的測試用例方法會優(yōu)先執(zhí)行,以a開頭會后執(zhí)行骗村。

unittest.TestSuite():unittest框架的TestSuite()類是用來創(chuàng)建測試套件的嫌褪。

unittest.TextTextRunner():unittest框架的TextTextRunner()類,通過該類下面的run()方法來運行suite所組裝的測試用例胚股,入參為suite測試套件笼痛。

unittest.defaultTestLoader(): defaultTestLoader()類,通過該類下面的discover()方法可自動更具測試目錄start_dir匹配查找測試用例文件(test*.py),并將查找到的測試用例組裝到測試套件缨伊,因此可以直接通過run()方法執(zhí)行discover摘刑。用法如下:

unittest.skip():裝飾器,當運行用例時刻坊,有些用例可能不想執(zhí)行等枷恕,可用裝飾器暫時屏蔽該條測試用例。一種常見的用法就是比如說想調試某一個測試用例谭胚,想先屏蔽其他用例就可以用裝飾器屏蔽徐块。

@unittest.skip(reason): skip(reason)裝飾器:無條件跳過裝飾的測試,并說明跳過測試的原因灾而。

@unittest.skipIf(reason): skipIf(condition,reason)裝飾器:條件為真時胡控,跳過裝飾的測試,并說明跳過測試的原因旁趟。

@unittest.skipUnless(reason): skipUnless(condition,reason)裝飾器:條件為假時铜犬,跳過裝飾的測試,并說明跳過測試的原因轻庆。

@unittest.expectedFailure(): expectedFailure()測試標記為失敗癣猾。

unittest斷言
自動化的測試中, 對于每個單獨的case來說余爆,一個case的執(zhí)行結果中纷宇, 必然會有期望結果與實際結果, 來判斷該case是通過還是失敗蛾方, 在unittest 的庫中提供了大量的實用方法來檢查預期值與實際值像捶, 來驗證case的結果, 一般來說桩砰, 檢查條件大體分為等價性拓春, 邏輯比較以及其他, 如果給定的斷言通過亚隅, 測試會繼續(xù)執(zhí)行到下一行的代碼硼莽, 如果斷言失敗, 對應的case測試會立即停止或者生成錯誤信息( 一般打印錯誤信息即可) 煮纵,但是不要影響其他的case執(zhí)行懂鸵。

image.png
import unittest
# 被測試方法

class Search:
    def search_fun(self):
        print("search")
        return True

class TestSearch(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.search = Search()

    @classmethod
    def tearDownClass(cls) -> None:
        cls.search = Search()

    def test_search1(self):
        print("testsearch1")
        #search = Search()
        assert True == self.search.search_fun()

    def test_search2(self):
        print("testsearch2")
        #search = Search()
        assert True == self.search.search_fun()

    def test_search3(self):
        print("testsearch3")
        #search = Search()
        assert True == self.search.search_fun()


class TestSearch1(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.search = Search()
        print("set up class1")

    @classmethod
    def tearDownClass(cls) -> None:
        cls.search = Search()
        print("tear down class1")

    def test_search1(self):
        print("testsearch1")
        #search = Search()
        assert True == self.search.search_fun()

    def test_search2(self):
        print("testsearch2")
        #search = Search()
        assert True == self.search.search_fun()

    def test_search3(self):
        print("testsearch3")
        #search = Search()
        assert True == self.search.search_fun()

    def test_equal(self):
        print("斷言相等")
        self.assertEqual(1,1,"判斷1 == 1")

    def test_notequal(self):
        print("斷言不相等")
        self.assertNotEqual(1,2,"判斷1 != 2")

class TestSearch2(unittest.TestCase):
    def test_case1(self):
        print("testsearch2")

if __name__ == '__main__':
    #方法一行疏、執(zhí)行當前文件所有的unittest測試用例
    #unittest.main()
    #方法二匆光、執(zhí)行指定的測試用例,將要執(zhí)行的測試用例添加到測試套件里面酿联,批量執(zhí)行
    #創(chuàng)建一個測試套件 testsuite
    # suite = unittest.TestSuite()
    # suite.addTest(TestSearch1("test_search1"))
    # unittest.TextTestRunner().run(suite)

    #方法三终息、執(zhí)行某個或多個測試類
    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSearch1)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(TestSearch2)
    suite = unittest.TestSuite([suite1,suite2])
    unittest.TextTestRunner(verbosity=2).run(suite)

HTML報告生成
腳本執(zhí)行完畢之后夺巩,還需要看到HTML報告,下面我們就通過HTMLTestRunner.py 來生成測試報告

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末周崭,一起剝皮案震驚了整個濱河市柳譬,隨后出現的幾起案子,更是在濱河造成了極大的恐慌休傍,老刑警劉巖征绎,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異磨取,居然都是意外死亡人柿,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門忙厌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凫岖,“玉大人,你說我怎么就攤上這事逢净「绶牛” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵爹土,是天一觀的道長甥雕。 經常有香客問我,道長胀茵,這世上最難降的妖魔是什么社露? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮琼娘,結果婚禮上峭弟,老公的妹妹穿的比我還像新娘。我一直安慰自己脱拼,他們只是感情好瞒瘸,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熄浓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玉组。 梳的紋絲不亂的頭發(fā)上惯雳,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音潮孽,去河邊找鬼。 笑死往史,一個胖子當著我的面吹牛,可吹牛的內容都是我干的挨决。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼刷晋,長吁一口氣:“原來是場噩夢啊……” “哼眼虱!你這毒婦竟也來了撞蚕?” 一聲冷哼從身側響起诈豌,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摧莽,沒想到半個月后庙洼,有當地人在樹林里發(fā)現了一具尸體镊辕,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鬼悠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年它掂,在試婚紗的時候發(fā)現自己被綠了巴帮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虐秋。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出官觅,到底是詐尸還是另有隱情阐污,我是刑警寧澤功氨,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏鸳玩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一不跟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窝革,春花似錦、人聲如沸虐译。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兰英,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畦贸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工薄坏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寨闹,地道東北人胶坠。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓鼻忠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帖蔓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容