[QA]單元測試

Reference:
廖雪峰-單元測試

單元測試主要用來對一個方法同诫、一個類或者一個模塊進行檢查的∽迦牛基于測試驅動開發(fā)(TDD)的思想,為了讓編寫的某個模塊的代碼能夠通過提前寫好的測試代碼击奶。
單元測試可考慮的級別https://www.zhihu.com/question/27313846/answer/120164282

我給自己的單元測試設置了5個級別:

  1. Level1:正常流程可用,即一個函數(shù)在輸入正確的參數(shù)時吐根,會有正確的輸出
  2. Level2:異常流程可拋出邏輯異常正歼,即輸入?yún)?shù)有誤時,不能拋出系統(tǒng)異常拷橘,而是用自己定義的邏輯異常通知上層調用代碼其錯誤之處
  3. Level3:極端情況和邊界數(shù)據(jù)可用局义,對輸入?yún)?shù)的邊界情況也要單獨測試,確保輸出是正確有效的
  4. Level4:所有分支冗疮、循環(huán)的邏輯走通萄唇,不能有任何流程是測試不到的
  5. Level5:輸出數(shù)據(jù)的所有字段驗證,對有復雜數(shù)據(jù)結構的輸出术幔,確保每個字段都是正確的

unittest

官方文檔地址:https://docs.python.org/zh-cn/3/library/unittest.html#module-unittest
先來看一下unittest的工作原理:Python必會的單元測試框架 —— unittest
總結一下原理:
寫好TestCase另萤,然后由TestLoader加載TestCase到TestSuite,然后由TextTestRunner來運行TestSuite诅挑,運行的結果保存在TextTestResult中四敞,我們通過命令行或者unittest.main()執(zhí)行時,main會調用TextTestRunner中的run來執(zhí)行拔妥,或者我們可以直接通過TextTestRunner來執(zhí)行用例忿危。這里加個說明,在Runner執(zhí)行時没龙,默認將執(zhí)行結果輸出到控制臺铺厨,我們可以設置其輸出到文件,在文件中查看結果

unittest使用步驟:
1.創(chuàng)建一個測試用例類繼承unittest.TestCase類
2.測試方法名稱以test開頭硬纤,在測試方法內調用方法對預期輸出和實際輸出進行比較解滓,方法包括不限于assertEqual(),assertTrue(),assertFalse(),assertRaises()。測試方法的執(zhí)行順序是按test后字母的順序執(zhí)行的筝家。
3.使用unittest.main()來運行測試腳本洼裤,也可以通過在命令行使用python -m unittest 測試文件名.測試用例類名的方式進行調用,如下代碼溪王,我們使用python -m unittest -v testmodel.MyUnittest進行調用(其中-v可以直觀的表現(xiàn)出每一個方法測試時的運行)

import unittest
class MyUnittest(unittest.TestCase):
    def test_upper(self):
        return self.assertEqual('foo'.upper(),'FOO')

if __name__ == '__main__':
    unittest.main()

高階:

  • 如果需要每個用例開始或者結束之前都調用一次腮鞍,用setUp()和tearDown()方法,這種用于的場景是:例如在UI自動化測試時在扰,前置是需要打開瀏覽器缕减,完成測試的操作后再把瀏覽器關閉雷客?(實際上我覺得這種場景應該是用setUpClass...)
import unittest
class MyUnittest(unittest.TestCase):
    def setUp(self):
        print('preparing condition')
    def tearDown(self):
        print('test down')
    def test_upper(self):
        return self.assertEqual('foo'.upper(),'FOO')
    def test_lower(self):
        return self.assertEqual('FOO'.lower(),'foo')
if __name__ == '__main__':
    unittest.main()

但是如果想要在整個測試類進行測試之前準備或釋放環(huán)境資源芒珠,那么可以用@classmethod裝飾器在setUpClass和tearDownClass前面〗寥梗可以看這個博客的用法selenium中的setUp,tearDown與setUpClass,tearDownClass的區(qū)別及用例編寫相關注意點 這個博客也提到了皱卓,在這種場景下裹芝,需要注意的是用例之間的耦合,不要讓前一個用例的狀態(tài)影響到了下一個用例娜汁。

  • skip裝飾器
    包括三種嫂易,unittest.skip()、unittest.skipIf()掐禁、unittest.skipUnless()怜械,下面是官方文檔的一個例子:
class MyTestCase(unittest.TestCase):

    @unittest.skip("demonstrating skipping")
    def test_nothing(self):
        self.fail("shouldn't happen")

    @unittest.skipIf(mylib.__version__ < (1, 3),
                     "not supported in this library version")
    def test_format(self):
        # Tests that work for only a certain version of the library.
        pass

    @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
    def test_windows_support(self):
        # windows specific testing code
        pass

    def test_maybe_skipped(self):
        if not external_resource_available():
            self.skipTest("external resource not available")
        # test code that depends on the external resource
        pass

此外,也可以用expectedFailure()裝飾器表明這個測試預計失敗傅事。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市响鹃,隨后出現(xiàn)的幾起案子驾霜,更是在濱河造成了極大的恐慌,老刑警劉巖买置,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粪糙,死亡現(xiàn)場離奇詭異,居然都是意外死亡堕义,警方通過查閱死者的電腦和手機猜旬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倦卖,“玉大人洒擦,你說我怎么就攤上這事∨绿牛” “怎么了熟嫩?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長褐捻。 經常有香客問我掸茅,道長,這世上最難降的妖魔是什么柠逞? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任昧狮,我火速辦了婚禮,結果婚禮上板壮,老公的妹妹穿的比我還像新娘逗鸣。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布撒璧。 她就那樣靜靜地躺著透葛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卿樱。 梳的紋絲不亂的頭發(fā)上僚害,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音繁调,去河邊找鬼萨蚕。 笑死,一個胖子當著我的面吹牛蹄胰,可吹牛的內容都是我干的门岔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烤送,長吁一口氣:“原來是場噩夢啊……” “哼寒随!你這毒婦竟也來了?” 一聲冷哼從身側響起帮坚,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妻往,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后试和,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讯泣,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年阅悍,在試婚紗的時候發(fā)現(xiàn)自己被綠了好渠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡节视,死狀恐怖拳锚,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情寻行,我是刑警寧澤霍掺,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拌蜘,受9級特大地震影響杆烁,放射性物質發(fā)生泄漏。R本人自食惡果不足惜简卧,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一兔魂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧举娩,春花似錦析校、人聲如沸拍棕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骄噪,卻和暖如春尚困,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背链蕊。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工事甜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滔韵。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓逻谦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陪蜻。 傳聞我的和親對象是個殘疾皇子邦马,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355