子測試subTest
歡迎加入測試交流群:夜行者自動化測試(816489363)進行交流學習QAQ
–成都-阿木木
如果測試方法內(nèi),還需要對某些差異非常小的參數(shù)進行測試,unittest支持使用subTest()上下文管理器在測試方法的內(nèi)部區(qū)分他們,也就是說,我們可以在測試方法的內(nèi)部進行調(diào)用的測試方法的測試,也就是測試方法嵌套,可以傳遞一個參數(shù)集(數(shù)據(jù)驅(qū)動)對于子測試方法進行測試,子測試方法會針對參數(shù)集(數(shù)據(jù)驅(qū)動)中的每一個參數(shù)值,進行測試結(jié)果的輸出。
classNumbersTest(unittest.TestCase):deftest_even(self):"""
? ? ? ? Test that numbers between 0 and 5 are all even.
? ? ? ? """foriinrange(0,6):withself.subTest(i=i):self.assertEqual(i%2,0)
結(jié)果為:======================================================================FAIL:test_even(__main__.NumbersTest)(i=1)Test that numbers between0and5arealleven.----------------------------------------------------------------------Traceback(most recent call last):File"D:/TestScriptDir/python_web/mysite/unittest_demo.py",line25,intest_even? ? self.assertEqual(i%2,0)AssertionError:1!=0======================================================================FAIL:test_even(__main__.NumbersTest)(i=3)Test that numbers between0and5arealleven.----------------------------------------------------------------------Traceback(most recent call last):File"D:/TestScriptDir/python_web/mysite/unittest_demo.py",line25,intest_even? ? self.assertEqual(i%2,0)AssertionError:1!=0======================================================================FAIL:test_even(__main__.NumbersTest)(i=5)Test that numbers between0and5arealleven.----------------------------------------------------------------------Traceback(most recent call last):File"D:/TestScriptDir/python_web/mysite/unittest_demo.py",line25,intest_even? ? self.assertEqual(i%2,0)AssertionError:1!=0----------------------------------------------------------------------Ran1testin0.001sFAILED(failures=3)
如果不使用子測試,則在第一次失敗后執(zhí)行將停止,并且錯誤將不那么容易診斷,因為i?不會顯示的值:
FAIL:test_even(__main__.NumbersTest)----------------------------------------------------------------------Traceback(most recent call last):File"subtests.py",line32,intest_even? ? self.assertEqual(i%2,0)AssertionError:1!=0