十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
我們可以直接在測試用例里面添加unittest框架自帶的斷言(也就相當(dāng)于判斷),斷言方法提供了測試結(jié)果是True還是False,所有的斷言方法都有一個(gè)msg參數(shù),如果指定msg參數(shù)的值,則將該信息作為失敗的錯(cuò)誤信息返回;
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的和碩網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
如果斷言失敗則拋出一個(gè)AssertionError,并標(biāo)識該測試為失敗狀態(tài);如果成功,則標(biāo)識該測試為成功狀態(tài);如果異常,則當(dāng)做錯(cuò)誤來處理;
先來看一個(gè)實(shí)例,在一個(gè)測試類MyTestCase中添加多個(gè)測試方法和斷言
from unittest import TestCase, main, skip
class MyTestCase(TestCase):
def setUp(self):
print('setUp')
def tearDown(self):
print('tearDown')
def test_print1(self):
print('第一個(gè)測試用例')
# unittest框架自帶的斷言,如果不相等,直接拋出異常,相等什么都不做
self.assertEqual(200, 200, '測試失敗')
def test_print2(self):
print('第二個(gè)測試用例')
def test_print3(self):
print('第三個(gè)測試用例')
if __name__ == '__main__':
main()
========輸出========:
setUp
第一個(gè)測試用例
tearDown
setUp
第二個(gè)測試用例
tearDown
setUp
第三個(gè)測試用例
tearDown
這里有三個(gè)測試用例,每個(gè)測試用例開始之前都先執(zhí)行了setUp方法,每個(gè)測試用例之后都執(zhí)行了tearDown方法。如果我們想要忽略某個(gè)測試用例不執(zhí)行,要怎么做?比如忽略第三個(gè)測試用例,只需要在第三個(gè)測試用例之前加上skip裝飾器:
@skip('do not need test_print3')
def test_print3(self):
print('第三個(gè)測試用例')
我們可以使用unitest.skip裝飾器跳過不需要的測試用例,
@unittest
.skip(reason)
表示無條件跳過測試用例,reason是用來說明原因的;
@unittest
.skipIf(conditition,reason)
:condititon為true時(shí)跳過測試用例;
@unittest
.skipunless(condition,reason)
:condition為False時(shí)跳過測試用例;
之前我們學(xué)習(xí)了setup方法和setUpClass方法,會(huì)在每個(gè)測試用例的前后都執(zhí)行一遍,那如果我們只想要在所有測試用例的前后執(zhí)行一遍,也就是在整個(gè)類中只執(zhí)行一遍要怎么辦呢,我們可以使用setUpClass方法和tearDownClass方法:
from unittest import TestCase, main, skip
class MyTestCase(TestCase):
@classmethod
def setUpClass(cls):
print('setUpClass')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
def test_print1(self):
print('第一個(gè)測試用例')
# unittest框架自帶的斷言,如果不相等,直接拋出異常,相等什么都不做
self.assertEqual(200, 200, '測試失敗')
def test_print2(self):
print('第二個(gè)測試用例')
@skip('do not need test_print3')
def test_print3(self):
print('第三個(gè)測試用例')
if __name__ == '__main__':
main()
==========輸出===========
setUpClass
第一個(gè)測試用例
第二個(gè)測試用例
tearDownClass
setup方法和teardown方法在每次執(zhí)行一個(gè)測試用例時(shí)都會(huì)重新執(zhí)行一遍,所以要想在整個(gè)類中只執(zhí)行一遍可以用setUpClass和tearDownClass方法;
setUpClass
:需要添加
@classmethod
裝飾器,在一個(gè)類中只會(huì)在所有測試用例運(yùn)行前調(diào)用一次;
tearDownClass
:需要添加
@classmethod
裝飾器,在所有測試用例運(yùn)行后調(diào)用一次;
unittest.TestSuite類
創(chuàng)建測試套件,然后使用這個(gè)類的addTest() 方法將需要被測試的測試用例添加到測試套件中,最后使用
unittest.TextTestRunner類
中的run()方法來運(yùn)行suite所組裝的測試用例;
from unittest import TestCase
from unittest import skip
from unittest import main as main_method
class MyTestCase(TestCase):
@classmethod
def setUpClass(cls):
print('setUpClass')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
def test_print1(self):
print('第一個(gè)測試用例')
self.assertEqual(200, 200, '測試失敗')
def test_print2(self):
print('第一個(gè)測試用例')
@skip('do not need test_print3')
def test_print3(self):
print('第一個(gè)測試用例')
if __name__ == '__main__':
main_method()
from test1 import MyTestCase
from unittest import TestSuite, TextTestRunner
suite = TestSuite()
# 在測試用例集中添加測試用例, 只添加兩個(gè)測試的方法
suite.addTest(MyTestCase('test_print1'))
suite.addTest(MyTestCase('test_print3'))
if __name__ == '__main__':
# 創(chuàng)建測試runner,執(zhí)行測試用例集
runner = TextTestRunner()
runner.run(suite)
=========輸出=============
setUpClass
第一個(gè)測試用例
tearDownClass
我們運(yùn)行這段代碼,只有第一個(gè)測試用例輸出,因?yàn)槲覀冎粚⒌谝粋€(gè)和第三個(gè)測試用例加入到測試集中,所有第二個(gè)測試用例不會(huì)執(zhí)行,而我們在第三個(gè)測試用例前面機(jī)上了skip裝飾器會(huì)跳過此測試用例,所有第三個(gè)也不會(huì)執(zhí)行啦。
def add(x, y):
return x + y
def sub(x, y):
return x - y
from unittest import TestCase
from unittest import skip
from unittest import main as main_method
from add_sub import add, sub
class MyTestCase(TestCase):
@classmethod
def setUpClass(cls):
print('setUpClass')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
def test_print1(self):
ret = 1 + 2
result = add(1, 2)
self.assertEqual(result, ret, 'test_print1測試失敗')
def test_print2(self):
print('第二個(gè)測試用例')
@skip('do not need test_print3')
def test_print3(self):
print('第三個(gè)測試用例')
if __name__ == '__main__':
main_method()
from test import MyTestCase
from unittest import TestSuite, TextTestRunner
suite = TestSuite()
# 在測試用例集中添加測試用例
suite.addTest(MyTestCase('test_print1'))
suite.addTest(MyTestCase('test_print2'))
suite.addTest(MyTestCase('test_print3'))
if __name__ == '__main__':
# 創(chuàng)建測試runner,執(zhí)行測試用例集
runner = TextTestRunner()
runner.run(suite)
========輸出=========
setUpClass
第一個(gè)測試用例
第二個(gè)測試用例
tearDownClass
參考: https://www.9xkd.com/user/plan-view.html?id=4822012440