【Python】unittest框架使用以及常用的assert語句

Python內(nèi)部自帶了一個單元測試的模塊——pyUnit,也就是我們說的:unittest

先介紹一下unittest的基本使用方法

1. import unittest模塊

2. 定義一個繼承 unittest.TestCase 的測試用例類

3. 定義 setUp 和 tearDown兩個方法,tearDown的過程很重要,是為以后的TestCase留一個干凈的測試環(huán)境。

4. 定義測試用例,均要以test開頭

5. 一個測試用例只需要測試一個方面,測試的目的和測試內(nèi)容要很明確。一般使用assertEqual、assertIn等斷言方法去判斷程序執(zhí)行的結(jié)果和預(yù)期結(jié)果是否相符

6. 調(diào)用 unittest.main() 開始跑測試用例

7. 測試全部通過,不輸出任何東西;若測試未通過,則會輸出相應(yīng)的錯誤提示。



unittest執(zhí)行順序

在pycharm里執(zhí)行腳本的時候,發(fā)現(xiàn)了一個問題。本來在執(zhí)行的時候,我還加了幾步往config文件里寫登錄信息的步驟,但是在執(zhí)行完成之后我發(fā)現(xiàn),config文件里根本沒有我想要寫入的信息。然后我就加了一些打印信息,發(fā)現(xiàn)在執(zhí)行這個腳本的時候,紅框里的方法根本沒有執(zhí)行。后來查了一下,找到了原因,是pycharm里執(zhí)行方式選擇導(dǎo)致的。

這是我想要在執(zhí)行測試用例之前想要執(zhí)行的步驟
右上角可以選擇執(zhí)行方式

主程序中先加載哪個方法,或者后加載哪個方法,在unittests運行的模式下,沒有任何作用。在該模式運行下,主程序先執(zhí)行哪個類,是按照這個類的名字字母以及數(shù)據(jù)排序的;先運行哪個方法,是按照某類中,方法的名字、數(shù)字排序的。

這是普通模式

而在普通模式下,就是按照寫的執(zhí)行順序運行的。而unittest.main()方法會自動把所有的測試類加到測試集里,然后再加載到runner中去執(zhí)行。



下面是unittest中常用的assert語句

assertEqual(a,b,[msg='測試失敗時打印的信息']):若 a=b,則測試用例通過

assertNotEqual(a,b,[msg='測試失敗時打印的信息']):若a != b,則測試用例通過

assertTrue(x,[msg='測試失敗時打印的信息']):若x是True,則測試用例通過

assertFalse(x,[msg='測試失敗時打印的信息']):若x是False,則測試用例通過

assertIs(a,b,[msg='測試失敗時打印的信息']):若a是b,則測試用例通過

assertNotIs(a,b,[msg='測試失敗時打印的信息']):若a不是b,則測試用例通過

assertIsNone(x,[msg='測試失敗時打印的信息']):若x是None,則測試用例通過

assertIsNotNone(x,[msg='測試失敗時打印的信息']):若x不是None,則測試用例通過

assertIn(a,b,[msg='測試失敗時打印的信息']):若a在b中,則測試用例通過

assertNotIn(a,b,[msg='測試失敗時打印的信息']):若a不在b中,則測試用例通過

assertIsInstance(a,b,[msg='測試失敗時打印的信息']):若a是b的一個實例,則測試用例通過

assertNotIsInstance(a,b,[msg='測試失敗時打印的信息']):若a不是b的實例,則測試用例通過

assertAlmostEqual(a, b):round(a-b, 7) == 0

assertNotAlmostEqual(a, b):round(a-b, 7) != 0

assertGreater(a, b):a > b ? ??

assertGreaterEqual(a, b):a >= b ? ??

assertLess(a, b):a < b ? ??

assertLessEqual(a, b):a <= b ? ??

assertRegexpMatches(s, re):regex.search(s) ? ??

assertNotRegexpMatches(s, re):not regex.search(s) ? ??

assertItemsEqual(a, b):sorted(a) == sorted(b) and works with unhashable objs ? ??

assertDictContainsSubset(a, b):all the key/value pairs in a exist in b ? ??

assertMultiLineEqual(a, b):strings ? ??

assertSequenceEqual(a, b):sequences ? ??

assertListEqual(a, b):lists ? ??

assertTupleEqual(a, b):tuples ? ??

assertSetEqual(a, b):sets or frozensets ? ??

assertDictEqual(a, b):dicts ? ??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容