分享unittest單元測(cè)試框架中幾種常用的用例加載方法
unittest模塊是Python自帶的一個(gè)單元測(cè)試模塊,我們可以用來(lái)做單元測(cè)試。unittest模塊包含了如下幾個(gè)子模塊:
- 測(cè)試用例:TestCase
- 測(cè)試集:TestSuite
- 加載用例:TestLoader
- 執(zhí)行用例:TextTestRunner
首先編寫(xiě)一個(gè)簡(jiǎn)單的加減乘除數(shù)學(xué)方法類(lèi):
class MathCalculate: ''' 加減乘除的計(jì)算類(lèi) ''' def __init__(self, first_num, second_num): self.first_num = first_num self.second_num = second_num def add(self): ''' 加法 :return: ''' return self.first_num + self.second_num def subtract(self): ''' 減法 :return: ''' return self.first_num - self.second_num def multiply(self): ''' 乘法 :return: ''' return self.first_num * self.second_num def divide(self): ''' 除法 :return: ''' try: return round(self.first_num / self.second_num, 2) except ZeroDivisionError: return '∞'
接下來(lái)我們利用unittest中的TestCase類(lèi)來(lái)編寫(xiě)測(cè)試用例,編寫(xiě)之前,要先知道TestCase類(lèi)以及類(lèi)方法的用法:
- 要引用TestCase類(lèi),需要引入unittest模塊
- 引用TestCase是編寫(xiě)一個(gè)測(cè)試類(lèi),所以要新建一個(gè)類(lèi)
- 測(cè)試類(lèi)里面的方法名都是以test_開(kāi)頭,這樣unittest才能識(shí)別到用例并去執(zhí)行
新建一個(gè)模塊,編寫(xiě)一個(gè)簡(jiǎn)單的測(cè)試用例類(lèi):
import unittest from python_for_unittest_testsuite.MathCalculate import MathCalculate as MC class TestMathCalculate(unittest.TestCase): ''' 測(cè)試加減乘除類(lèi) ''' def test_add(self): actual = MC(1, 1).add() self.assertEqual(2, actual, msg='兩數(shù)相加測(cè)試失敗') def test_subtract(self): actual = MC(1, 1).subtract() self.assertEqual(0, actual, msg='兩數(shù)相減測(cè)試失敗') def test_multiply(self): actual = MC(1, 1).multiply() self.assertEqual(1, actual, msg='兩數(shù)相乘測(cè)試失敗') def test_divide(self): actual = MC(1, 1).divide() self.assertEqual(1, actual, msg='兩數(shù)相除測(cè)試失敗') if __name__ == '__main__': unittest.main()
我們運(yùn)行代碼之后,得到如下結(jié)果:

但是這樣遠(yuǎn)遠(yuǎn)達(dá)不到我們的要求,還需要繼續(xù)優(yōu)化,接下來(lái)進(jìn)入正題......
上面我們看到的是利用unittest.main()執(zhí)行所有的用例,但是有的時(shí)候我們不需要執(zhí)行所有的測(cè)試用例,并且可以按照自己的需求去添加用例,這時(shí)我們就要使用TestSuite來(lái)幫助我們更好地去實(shí)現(xiàn)單元測(cè)試
方法一:加載測(cè)試用例,直接使用addTest()方法添加測(cè)試用例,代碼示范如下:
import unittest
from python_for_unittest_testsuite.test_math_calculate import TestMathCalculate
suite = unittest.TestSuite()
# 增加一條用例 addTest()方法傳入:類(lèi)名(測(cè)試方法名)
suite.addTest(TestMathCalculate('test_add'))
suite.addTest(TestMathCalculate('test_subtract'))
suite.addTest(TestMathCalculate('test_multiply'))
suite.addTest(TestMathCalculate('test_divide'))
# 上下文管理器,生成測(cè)試報(bào)告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
runner = unittest.TextTestRunner(f, 'text', 2)
runner.run(suite)
方法二:加載測(cè)試類(lèi),通過(guò)TestLoader里面的loadTestsFromTestCase來(lái)加載測(cè)試類(lèi),代碼示范如下:
import unittest
from python_for_unittest_testsuite.test_math_calculate import TestMathCalculate
suite = unittest.TestSuite()
loader = unittest.TestLoader()
# 加載測(cè)試類(lèi)
suite.addTest(loader.loadTestsFromTestCase(TestMathCalculate))
# 上下文管理器,生成測(cè)試報(bào)告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
runner = unittest.TextTestRunner(f, 'text', 2)
runner.run(suite)
方法三:加載測(cè)試模塊,通過(guò)TestLoader里面的loadTestsFromModule來(lái)加載測(cè)試類(lèi),代碼示范如下:
import unittest
from python_for_unittest_testsuite import test_math_calculate
suite = unittest.TestSuite()
loader = unittest.TestLoader()
# 加載測(cè)試模塊
suite.addTest(loader.loadTestsFromModule(test_math_calculate))
# 上下文管理器,生成測(cè)試報(bào)告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
runner = unittest.TextTestRunner(f, 'text', 2)
runner.run(suite)
方法四:自動(dòng)搜尋測(cè)試用例,根據(jù)傳入的測(cè)試模塊的所屬目錄路徑自動(dòng)去查找測(cè)試用例,代碼示范如下:
import unittest
# 根據(jù)傳入的測(cè)試模塊的所屬目錄路徑自動(dòng)去查找
suite = unittest.defaultTestLoader.discover("G:\pycharm\PycharmProjects\python_class\python_for_unittest_testsuite")
# 上下文管理器,生成測(cè)試報(bào)告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
runner = unittest.TextTestRunner(f, 'text', 2)
runner.run(suite)
以上就是unittest單元測(cè)試框架中常用的幾種用例加載方法的詳細(xì)內(nèi)容,更多關(guān)于unittest單元測(cè)試框架 用例加載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python單元測(cè)試工具doctest和unittest使用解析
- Django使用unittest模塊進(jìn)行單元測(cè)試過(guò)程解析
- Python單元測(cè)試unittest的具體使用示例
- Python unittest單元測(cè)試框架總結(jié)
- Python unittest單元測(cè)試框架的使用
- 詳解python單元測(cè)試框架unittest
- unittest+coverage單元測(cè)試代碼覆蓋操作實(shí)例詳解
- Python Unittest自動(dòng)化單元測(cè)試框架詳解
- 利用Python中unittest實(shí)現(xiàn)簡(jiǎn)單的單元測(cè)試實(shí)例詳解
- python單元測(cè)試unittest實(shí)例詳解
相關(guān)文章
python中實(shí)現(xiàn)延時(shí)回調(diào)普通函數(shù)示例代碼
這篇文章主要給大家介紹了關(guān)于python中實(shí)現(xiàn)延時(shí)回調(diào)普通函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
解決numpy矩陣相減出現(xiàn)的負(fù)值自動(dòng)轉(zhuǎn)正值的問(wèn)題
這篇文章主要介紹了解決numpy矩陣相減出現(xiàn)的負(fù)值自動(dòng)轉(zhuǎn)正值的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python操作MySQL數(shù)據(jù)庫(kù)9個(gè)實(shí)用實(shí)例
這篇文章主要介紹了Python操作MySQL數(shù)據(jù)庫(kù)9個(gè)實(shí)用實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12
如何使用Python實(shí)現(xiàn)數(shù)據(jù)透視表、音頻文件格式轉(zhuǎn)換
這篇文章主要介紹了用Python實(shí)現(xiàn)數(shù)據(jù)透視表、音頻文件格式轉(zhuǎn)換,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10
python常見(jiàn)進(jìn)制轉(zhuǎn)換方法示例代碼
Python為我們提供了強(qiáng)大的內(nèi)置函數(shù)和格式化數(shù)字的方法去實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的功能,下面這篇文章主要給大家介紹了關(guān)于python常見(jiàn)進(jìn)制轉(zhuǎn)換方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
淺談Python的自省Introspection和反射機(jī)制Reflection
這篇文章主要介紹了淺談Python的自省Introspection和反射機(jī)制Reflection,反射就是通過(guò)字符串的形式去對(duì)象(模塊)中操作(查找/獲取/刪除/添加)成員,一種基于字符串的事件驅(qū)動(dòng),需要的朋友可以參考下2023-08-08
python+matplotlib演示電偶極子實(shí)例代碼
這篇文章主要介紹了python+matplotlib演示電偶極子實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
python猜數(shù)字小游戲?qū)崿F(xiàn)代碼
大家好,本篇文章主要講的是python猜數(shù)字小游戲?qū)崿F(xiàn)代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01

