python中的單元測試模塊unittest

一、概述:

? ? 由于最近在做自動化測試,所以對unittest進行了學(xué)習(xí)。unittest模塊有自己的斷言,運行用例,組織用例等的屬性,所以,掌握了unittest,自動化也就不會太難了。

二、unittest的屬性:

? 該文以思維導(dǎo)圖的形式描述unittest的重要屬性。

其中前四個是unittest最核心的三個屬性。

testcase:測試用例;

testsuite:測試套件,多個測試用例組成一個測試套件;

test runner:執(zhí)行測試用例,該類中的run()方法會執(zhí)行testsuite/testcase中的run()方法。測試的結(jié)果會保存在testresult中。

還有一個很重要的就是fixture,看著是挺陌生的,其實就是一個測試用例執(zhí)行之前環(huán)境的準備和執(zhí)行之后環(huán)境的銷毀。

三、實例:

首先準備一些待測方法,functions.py:

def fun_div(x):

? ? return x/2

def fun_add(x):

? ? return x+2

def fun_minus(x):

? ? return x-2

def fun_multi(x):

? ? return x*2

接下來寫一些測試用例來測這些方法,test.py

import unittest

from functions import fun_add,fun_minus,fun_multi,fun_div

class TestFun(unittest.TestCase):

? ? times = 0

? ? @classmethod

? ? def setUpClass(cls):

? ? ? ? print('setUpclass')

? ? def setUp(self):

? ? ? ? # 每個測試用例執(zhí)行之前都會執(zhí)行該方法

? ? ? ? TestFun.times += 1

? ? ? ? print('setUp', TestFun.times)

? ? def tearDown(self):

? ? ? ? # 每個測試用例執(zhí)行之后都會執(zhí)行該方法

? ? ? ? TestFun.times += 1

? ? ? ? print('tearDown', TestFun.times)

? ? def test1(self):

? ? ? ? # 測試用例1:fun_div

? ? ? ? # 使用unittest提供的斷言驗證functions中的函數(shù)的正誤

? ? ? ? # 如果不相等就會失敗

? ? ? ? self.assertEqual(2, fun_div(4))

? ? ? ? self.failUnlessEqual(2, 2)

? ? ? ? # 如果表達式為False,測試失敗

? ? ? ? self.assertTrue(1 < 2)

? ? ? ? self.failUnless(2 == 2)

? ? ? ? # 如果兩個值相等,就會測試失敗

? ? ? ? self.assertNotEqual(2, 1)

? ? def test2(self):

? ? ? ? # 測試用例2:fun_add

? ? ? ? self.assertNotEqual(2, 1)

? ? def test2(self):

? ? ? ? # 測試用例2:fun_add

? ? ? ? self.assertTrue(fun_add(6) == 8)

? ? def test3(self):

? ? ? ? # 測試用例3:fun_minus

? ? ? ? self.assertNotEqual(6, fun_minus(6))

? ? ? ? self.assertEqual(4, fun_minus(6))

? ? def test4(self):

? ? ? ? # 測試用例4:fun_multi

? ? ? ? self.assertIsInstance(4, int)

? ? ? ? self.assertEqual(8, fun_multi(4))

? ? @unittest.skipIf(True, 'no')

? ? def test5(self):

? ? ? ? print('跳過!')

? ? @classmethod

? ? def tearDownClass(cls):

? ? ? ? print('tearDownClass')

if __name__ == '__main__':

? ? # unittest.main()

? ? suit = unittest.TestSuite()

? ? suit.addTest(TestFun('test1'))

? ? suit.addTest(TestFun('test2'))

? ? suit.addTest(TestFun('test3'))

? ? suit.addTest(TestFun('test4'))

? ? runner = unittest.TextTestRunner()

? ? runner.run(suit)

執(zhí)行結(jié)果:

解釋:

1、setUp和tearDown是每個用例的環(huán)境準備和環(huán)境銷毀函數(shù),也就是在每個用例執(zhí)行之前要執(zhí)行一次setUp函數(shù),每個用例執(zhí)行之后會執(zhí)行一次tearDown函數(shù);

2、setUpClass和tearDownClass是所有用例的環(huán)境準備和環(huán)境銷毀函數(shù),也就是說,在這么多用例執(zhí)行之前只會執(zhí)行一次setUpClass函數(shù),執(zhí)行之后會執(zhí)行一次tearDownClass函數(shù),舉例來說,比如此次測試用例需要使用數(shù)據(jù)庫,那么在setUpClass函數(shù)中就會進行數(shù)據(jù)庫連接,在tearDownClass函數(shù)中進行數(shù)據(jù)庫斷開;

3、一般執(zhí)行測試用例,都會使用testsuit的addTest()方法將要執(zhí)行的用例放在一個測試套件中,創(chuàng)建一個testrunner對象,然后調(diào)用該對象的run()方法;

4、skip是一個裝飾器,可以屏蔽一些測試用例,此功能可以用于調(diào)試測試用例。(大型項目中,執(zhí)行所有的用例需要用很久的時間,但是我們剛好需要調(diào)試某個用例,就可以把其他的用例屏蔽掉);

5、一個測試用例類都會繼承于TestCase類;

6、測試用例報告可以使用TextTestRunner輸出(txt報告),也可以用HTMLTestRunner輸出(html報告)。


后記:unittest大概了解就是這些了,后續(xù)會學(xué)習(xí)HTMLTestRunner輸出漂亮的html報告。如果此文有問題,請記得評論,感謝~

---------------------

作者:peiyao456

來源:CSDN

原文:https://blog.csdn.net/peiyao456/article/details/81542377

轉(zhuǎn)載,原文鏈接。 https://blog.csdn.net/peiyao456/article/details/81542377

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容