1. 程式人生 > >第二種方式,修改python unittest的執行順序,使用猴子補丁

第二種方式,修改python unittest的執行順序,使用猴子補丁

super 之前 ima out teardown 驗證 不同的 執行順序 鏈接

1、按照測試用例的上下順序,而不是按方法的名稱的字母順序來執行測試用例。

之前的文章鏈接

之前寫的,不是猴子補丁,而是要把Test用例的類名傳到run裏面去執行,與原生的使用有一點區別。現在修改成,用的時候代碼與原生unittest完全一模一樣,但運行時候使用與原生不同的邏輯。

import time
import unittest
from unittest.main import TestProgram
from app.utils.utils_ydf import LogManager


class CustomTestCase(unittest.TestCase):
    @classmethod
    
def setUpClass(cls): cls.logger = LogManager(unittest用例的日誌).get_logger_without_handlers() @classmethod def tearDownClass(cls): time.sleep(1) cls.logger.debug(---------------------------------所有用例完成-----------------------------) time.sleep(200000) def
tearDown(self): time.sleep(0.1) def setUp(self): time.sleep(0.1) class CustomLoader(unittest.TestLoader): def getTestCaseNames(self, testCaseClass): """Return a sorted sequence of method names found within testCaseClass """ def isTestMethod(attrname, testCaseClass=testCaseClass, prefix
=self.testMethodPrefix): return attrname.startswith(prefix) and callable(getattr(testCaseClass, attrname)) testFnNames = list(filter(isTestMethod, dir(testCaseClass))) if self.sortTestMethodsUsing: testFnNames.sort(key=lambda fun_name: getattr(testCaseClass, fun_name).__code__.co_firstlineno) return testFnNames custom_loader = CustomLoader() class CustomTestTestProgram(TestProgram): def __init__(self, *args, testLoader=custom_loader, **kwargs): super().__init__(*args, testLoader=testLoader, **kwargs) def patch_unittest(): unittest.TestCase = CustomTestCase unittest.defaultTestLoader = custom_loader unittest.main = CustomTestTestProgram if __name__ == __main__: patch_unittest() class _Test(unittest.TestCase): def test_3(self): print(1) def test_2(self): print(2) def test_1(self): print(3) unittest.main()

這次的unitetest測試用例寫法還是繼承原生的Testcase類,執行生成測試用例也是原生的方法。

可以看到,正常情況下應該打印3 2 1 ,但使用了猴子技術後打印是 1 2 3。

運行結果是:

技術分享圖片

2、可以把調用patch_unittest函數寫在最常用的工具包裏面,就不用親自去調用他了。

之前上篇驗證過,python的模塊只會導入一次,不管你在不同的文件中不同地方import 幾百次,都是只會導入一次的。別的地方import 的unitetest的行為都會發生變化。

第二種方式,修改python unittest的執行順序,使用猴子補丁