Python unittest.TestLoader()類的幾種尋找testcase的方法的使用

weixin_33797791發表於2018-04-13

unittest.TestLoader()提供了建立test suite的幾種方法:
TestLoader().loadTestsFromTestCase(testCaseClass)
TestLoader().loadTestsFromModule(module, pattern=None)
TestLoader().loadTestsFromName(name, module=None)
TestLoader().loadTestsFromNames(name, module=None)
TestLoader().discover
下面一一列舉其用法,並會感嘆unittest的精妙之處。

  • loadTestsFromTestCase(testCaseClass)
    testCaseClass必須是TestCase的子類(或孫類也行)
  • loadTestsFromModule(module, pattern=None)
    test case所在的module
  • loadTestsFromName(name, module=None)
    name是一個string,string需要是是這種格式的“module.class.method”
  • loadTestsFromNames(name, module=None)
    names是一個list,用法與上同
  • discover(start_dir, pattern=’test*.py’, top_level_dir=None)
    從python檔案中獲取test cases

以上舉例如下:
含有test cases的檔案:for_all.py

class DefaultTestCase(unittest.TestCase):

    def setUp(self):
        print "Start to run"

    def tearDown(self):
        print "Close"


class CasesALL(DefaultTestCase):

    def ab_test_print_b(self):
        print 'b',
        print time.time()
        time.sleep(2)

用來執行測試用例的檔案:run.py

import unittest
from unittest import TestLoader
import for_all
from for_all import CasesALL


if __name__ == '__main__':
    suite = unittest.TestSuite()
    loader = TestLoader()
    loader.testMethodPrefix = 'ab'
    # loader.sortTestMethodsUsing = None
    # test_cases_name = loader.getTestCaseNames(CasesALL)
    test_cases1 = unittest.TestLoader().loadTestsFromTestCase(CasesALL)
    test_cases2 = unittest.TestLoader().loadTestsFromModule(for_all)
    test_cases3 = unittest.TestLoader().loadTestsFromName('for_all.CasesALL.ab_test_print_b')
    suite.addTests(test_cases1)
    suite.addTests(test_cases2)
    suite.addTests(test_cases3)
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

除錯時發現,其實三種方法得到的test suite的格式都不一樣,但是runner.run()執行的結果是一樣的,這也是我覺得驚喜的原因。

unittest.TextTestRunner(verbosity=2).run(tests)
這裡的verbosity是一個選項,表示測試結果的資訊複雜度,有三個值
0 (靜默模式): 你只能獲得總的測試用例數和總的結果 比如 總共100個 失敗20 成功80

1 (預設模式): 非常類似靜默模式 只是在每個成功的用例前面有個“.” 每個失敗的用例前面有個 “F”

2 (詳細模式):測試結果會顯示每個測試用例的所有相關的資訊
並且 你在命令列里加入不同的引數可以起到一樣的效果

加入 --quiet 引數 等效於 verbosity=0
加入--verbose引數等效於 verbosity=2
什麼都不加就是 verbosity=1</pre>

參考:
https://docs.python.org/3/library/unittest.html

相關文章