前言
在python unittest框架中,內置了用例加載及跳過的標準函數。
其加載用例通過TestLoader類實現,而跳過測試方法則通過unittest.skip()類實現。下面我們一起來學習下。
TestLoader加載用例
TestLoader類有一個discover()函數,簡潔的實現了從指定頂層目錄、模塊等加載測試用例。
將下述代碼保存至==test==_disvover.py中
# _*_ coding:utf-8 _*_
__author__ = '苦葉子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# 被測函數
def add(a, b):
return a + b
# 測試用例
class demoTest(unittest.TestCase):
def test_add_4_5(self):
print u"測試 discover 命令"
self.assertEquals(add(4,5),9)
切換至==test==_disvover.py所在目錄,在命令行中執行一下命令:
python -m unittest discover
執行結果如下:
discover.png
通過該命令,unittest測試框架會嘗試在當前目錄及其子目錄加載所有滿足要求的測試(==注意:所有的用例模塊應該以test開頭進行命名==,默認加載test開頭的模塊)
下面我們一起看下其他相關的命令
序號 | 命令選項 | 描述 |
---|---|---|
1 | -v, --verbose | 詳細輸出 |
2 | -s, --start-directory | 啟動目錄(默認為當前目錄) |
3 | -p, --pattern | 匹配加載的測試文件(默認匹配test*.py) |
4 | -t, --top-level-directory | 頂層目錄(默認同--start-directory) |
例如我們指定C:\test下,匹配assert開頭的所有測試模塊
python -m unittest -v -s "c:\\test" -p "assert*.py"
這個命令將加載C:\test目錄下所有assert開頭的測試模塊中的測試方法
unittest.skip跳過測試方法
python unittest測試框架從python2.7開始支持設置跳過指定的測試方法或是跳過滿足某種條件的測試用例。
下面我看一個強制跳過指定的測試用例的示例:
# _*_ coding:utf-8 _*_
__author__ = '苦葉子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# 被測函數
def add(a, b):
return a + b
class demoSkipTest(unittest.TestCase):
@unittest.skip(u"強制跳過示例")
def test_add(self):
self.assertEqual(add(4,5), 9)
def test_add_2(self):
self.skipTest("強制跳過示例2")
self.assertEqual(add(4,5), 9)
if __name__ == '__main__':
unittest.main()
將上述代碼保存至demoskip.py,運行下述命令:
python demoskip.py
結果如下:
demoskip.png
下面我們一起看下各種skip方法說明
序號 | 方法 | 說明 |
---|---|---|
1 | unittest.skip(reason) | 強制跳轉。reason是跳轉原因 |
2 | unittest.skipIf(condition, reason) | 條件跳轉,如果condition是True則跳轉 |
3 | unittest.skipUnless(condition, reason) | 除非conditioin為True,才進行調整 |
4 | unittest.expectedFailure() | 標記該測試預期為失敗 ,如果該測試方法運行失敗,則該測試不算做失敗 |
下面我們一起看下各種方式實踐的示例
# _*_ coding:utf-8 _*_
__author__ = '苦葉子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class demoSkipTest(unittest.TestCase):
a = 50
b = 20
def test_add(self):
"""加法"""
result = self.a + self.b
self.assertEqual(result, 40)
@unittest.skipIf(a>b, u"a>b就跳過")
def test_sub(self):
"""減法"""
result = self.a - self.b
self.assertTrue(result == -30)
@unittest.skipUnless(b==0, u"除數為0,則跳轉")
def test_div(self):
"""除法"""
result = self.a / self.b
self.assertTrue(result == 1)
@unittest.expectedFailure
def test_mul(self):
"""乘法"""
result = self.a * self.b
self.assertTrue(result == 0)
if __name__ == "__main__":
unittest.main()
將上述代碼保存至demo_skip_test.py,運行結果如下
allskip.png
總結
本次就用例加載及如何跳過某些測試方法或用例進行了分享,大家可以基于上述示例代碼進行改造學習和實踐。