python自動化之unittest的addTest使用方法總結
阿新 • • 發佈:2021-05-17
當寫好一個測試類後,呼叫unittest.main()將執行所有的測試用例,為了只執行需要的用例,可以使用TestSuite套件,將指定的單條/多條用例加進來一起執行。
關於TestSuite.addTest()加入用例的方法或者說寫法非常的多,這裡做一個小總結。
先是簡單的測試類,只包含了兩個測試用例供一會載入
沒有加斷言,所以在pycharm下不能以test的方式跑
import unittest
class Unittest_addTest(unittest.TestCase):
def setUp(self):
pass
def tearDown (self):
pass
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
pass
def test_one(self):
print('-----one-----')
def test_two(self):
print('-----two-----')
if __name__ == '__main__':
# 執行全部用例
unittest.main()
1、TestSuite與TestResult結合
我個人不太喜歡這種,感覺不是很清晰,TestResult是存測試結果的,TestSuite還提供了需要TestResult引數的run方法。總之正常執行是沒有問題的
suite = unittest.TestSuite()
# 格式:類命(用例名)
suite.addTest(Unittest_addTest('test_one'))
suite.addTest(Unittest_addTest('test_two'))
result = unittest.TestResult( )
suite.run(result)
執行結果:
2、TestSuite與TextTestRunner執行器結合
這個就比前一個方法清晰些了,一眼就能看出在跑套件中的用例
runner = unittest.TextTestRunner()
suite = unittest.TestSuite()
# 格式:類命(用例名)
suite.addTest(Unittest_addTest('test_one'))
suite.addTest(Unittest_addTest('test_two'))
result = runner.run(suite)
也可以寫成這種形式:(不太推薦,每個都進行例項化比較麻煩
#用例載入
case1 = Unittest_addTest("test_one")
case2 = Unittest_addTest("test_two")
suite.addTest(case1)
suite.addTest(case2)
3、TestSuite與TextTestRunner、Testloader載入器結合
基本框架如下:
suite = unittest.TestSuite()
loader = unittest.TestLoader()
runner = unittest.TextTestRunner()
#中間載入指定用例
runner.run(suite)
①通過方法名來載入
# 模組名.類名.方法名
suite.addTest(loader.loadTestsFromName("UnitTest_addTests.Unittest_addTest.test_one"))
前面用的方法都可以細到類中的某條用例,下面是以模組/類名的方式一次性載入各個測試類
②通過測試用例類進行載入
suite.addTest(loader.loadTestsFromTestCase(Unittest_addTest))
③通過路徑載入
path指定用例所在的目錄
pattern指定檔名,可以按名字字首等查詢,比如
UnitTest*.py, 就是加入所有開頭能與UnitTest匹配上的py檔案中的測試用例
path = os.path.dirname(os.path.abspath(__file__))
suite.addTest(loader.discover(path, pattern='UnitTest_addTests.py'))
深入的原理在以後有時間的情況下會繼續補充。