一、概述:
? ? 由于最近在做自動化測試,所以對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