日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

unittest框架学习笔记

發(fā)布時(shí)間:2024/8/26 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unittest框架学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 1、unittest全部屬性
  • 2、用例基本類:unittest.TestCase
    • 2.1、前置條件:setUp()
    • 2.2、后置條件:tearDown()
    • 2.3、斷言:assert*()
  • 3、單元測(cè)試:unittest.main()
  • 4、用例套件_1:unittest.TestSuite()
  • 5、用例套件_2:unittest.defaultTestLoader()
  • 6、執(zhí)行套件:unittest.TextTextRunner()
  • 7、裝飾器:unittest.skip()
  • 8、裝飾器:@classmethod
  • 9、數(shù)據(jù)驅(qū)動(dòng):ddt
  • 10、生成測(cè)試報(bào)告:HTMLTestRunner
  • 11、截圖

1、unittest全部屬性

['BaseTestSuite', 'FunctionTestCase', 'SkipTest', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult', 'TestSuite', 'TextTestResult', 'TextTestRunner', '_TextTestResult', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__unittest', 'case', 'defaultTestLoader', 'expectedFailure', 'findTestCases', 'getTestCaseNames', 'installHandler', 'loader', 'main', 'makeSuite', 'registerResult', 'removeHandler', 'removeResult', 'result', 'runner', 'signals', 'skip', 'skipIf', 'skipUnless', 'suite', 'util']

2、用例基本類:unittest.TestCase

TestCase類,所有測(cè)試用例類繼承的基本類。使用方法:class BaiduTest(unittest.TestCase):pass

2.1、前置條件:setUp()

  • 用于測(cè)試用例執(zhí)行前的初始化工作。
  • 如:連接數(shù)據(jù)庫(kù)、初始化瀏覽器等。
# 使用方法:def setUp(self):'''這里編寫執(zhí)行用例的前置條件'''pass

2.2、后置條件:tearDown()

  • 用于測(cè)試用例執(zhí)行之后的善后工作。
  • 如:關(guān)閉數(shù)據(jù)庫(kù)、關(guān)閉瀏覽器之內(nèi)的。
# 使用方法:def tearDown(self):'''這里編寫執(zhí)行用例的善后工作'''pass

2.3、斷言:assert*()

  • assert*():一些斷言方法:在執(zhí)行測(cè)試用例的過(guò)程中,最終用例是否執(zhí)行通過(guò),是通過(guò)判斷測(cè)試得到的實(shí)際結(jié)果和預(yù)期結(jié)果是否相等決定的。
assertEqual(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a和b是否相等,相等則測(cè)試用例通過(guò)。assertNotEqual(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a和b是否相等,不相等則測(cè)試用例通過(guò)。assertTrue(x,[msg='測(cè)試失敗時(shí)打印的信息']):斷言x是否True,是True則測(cè)試用例通過(guò)。assertFalse(x,[msg='測(cè)試失敗時(shí)打印的信息']):斷言x是否False,是False則測(cè)試用例通過(guò)。assertIs(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a是否是b,是則測(cè)試用例通過(guò)。assertNotIs(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a是否是b,不是則測(cè)試用例通過(guò)。assertIsNone(x,[msg='測(cè)試失敗時(shí)打印的信息']):斷言x是否None,是None則測(cè)試用例通過(guò)。assertIsNotNone(x,[msg='測(cè)試失敗時(shí)打印的信息']):斷言x是否None,不是None則測(cè)試用例通過(guò)。assertIn(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a是否在b中,在b中則測(cè)試用例通過(guò)。assertNotIn(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a是否在b中,不在b中則測(cè)試用例通過(guò)。assertIsInstance(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a是是b的一個(gè)實(shí)例,是則測(cè)試用例通過(guò)。assertNotIsInstance(a,b,[msg='測(cè)試失敗時(shí)打印的信息']):斷言a是是b的一個(gè)實(shí)例,不是則測(cè)試用例通過(guò)。

3、單元測(cè)試:unittest.main()

【1】作用:可以運(yùn)行單個(gè)測(cè)試用例檢查用例是否正確,單元測(cè)試。【2】執(zhí)行條件:執(zhí)行的時(shí)候會(huì)自動(dòng)搜索模塊中以“test”命名開頭的測(cè)試方法。【3】執(zhí)行默認(rèn)順序: 1、根據(jù)ASCII碼的順序加載測(cè)試用例。 2、數(shù)字與字母的順序?yàn)?#xff1a;0-9,A-Z,a-z。 3、所以A開頭的測(cè)試用例方法會(huì)優(yōu)先執(zhí)行,以a開頭會(huì)后執(zhí)行。【4】使用方法:import unittestclass Test(unittest.TestCase):def setUp(self):print('start')def test_01(self):print('test_01')def test_02(self):print('test_02')def tearDown(self):print('end')if __name__ == '__main__':unittest.main()# 執(zhí)行順序:setUp() -> test_01() -> tearDown() -> setUp() -> test_01() -> tearDown()#完整流程即 [前置 -> 用例 -> 后置]這樣一個(gè)循環(huán)反復(fù)的順序。

4、用例套件_1:unittest.TestSuite()

  • unittest框架的TestSuite()類是用來(lái)創(chuàng)建測(cè)試套件的。

addTest():

  • addTest()方法是將測(cè)試用例添加到測(cè)試套件中。
import unittestclass Test(unittest.TestCase):def test_01(self):print('test_01')if __name__ == '__main__':suite = unittest.TestSuite()suite.addTest(Test('test_01'))suite.addTest(Test('test_02'))runner = unittest.TextTestRunner()runner.run(suite)

5、用例套件_2:unittest.defaultTestLoader()

  • unittest框架的defaultTestLoader()類,通過(guò)該類下面的discover()方法可根據(jù)測(cè)試目錄匹配查找測(cè)試用例文件(test*.py),并將查找到的測(cè)試用例組裝到測(cè)試套件,因此可以直接通過(guò)run()方法執(zhí)行discover。用法如下:
··· ···· ·····if __name__ == '__main__':case_path =os.path.join(os.getcwd(),'case')discover = unittest.defaultTestLoader.discover(case_path, pattern='test_*.py')runner = unittest.TextTestRunner()runner.run(discover)#case_path是存放測(cè)試用例的地方

備注:discover方法里面有三個(gè)參數(shù)

-case_dir:這個(gè)是待執(zhí)行用例的目錄。

-pattern:這個(gè)是匹配腳本名稱的規(guī)則,test*.py意思是匹配test開頭的所有腳本。

-top_level_dir:這個(gè)是頂層目錄的名稱,一般默認(rèn)等于None就行了。

6、執(zhí)行套件:unittest.TextTextRunner()

  • unittest框架的TextTextRunner()類,配合TestSuite()、defaultTestLoader()類一起使用,通過(guò)TextTextRunner類下面的run()方法來(lái)運(yùn)行套件所組裝的測(cè)試用例,入?yún)閟uite測(cè)試套件。
import unittestclass Test(unittest.TestCase):def setUp(self):print('start')def test_01(self):print('test_01')def test_02(self):print('test_02')def tearDown(self):print('end')if __name__ == '__main__':suite = unittest.TestSuite()suite.addTest(Test('test_01'))suite.addTest(Test('test_02'))runner = unittest.TextTestRunner()runner.run(suite)

7、裝飾器:unittest.skip()

  • unittest.skip():裝飾器,當(dāng)運(yùn)行用例時(shí),有些用例可能不想執(zhí)行等,可用裝飾器暫時(shí)屏蔽該條測(cè)試用例。
@unittest.skip(reason): skip(reason)裝飾器:無(wú)條件跳過(guò)裝飾的測(cè)試,并說(shuō)明跳過(guò)測(cè)試的原因。@unittest.skipIf(reason): skipIf(condition,reason)裝飾器:條件為真時(shí),跳過(guò)裝飾的測(cè)試,并說(shuō)明跳過(guò)測(cè)試的原因。@unittest.skipUnless(reason): skipUnless(condition,reason)裝飾器:條件為假時(shí),跳過(guò)裝飾的測(cè)試,并說(shuō)明跳過(guò)測(cè)試的原因。@unittest.expectedFailure(): expectedFailure()測(cè)試標(biāo)記為失敗。

8、裝飾器:@classmethod

  • 作用:在某些特定情況下,避免每次執(zhí)行用例時(shí)候都會(huì)執(zhí)行一次unittest里面setUp()。
  • 比如進(jìn)行登陸、打開瀏覽器、連接數(shù)據(jù)庫(kù)等操作的時(shí)候。
#使用方法: import unittestclass Test(unittest.TestCase):@classmethoddef setUpClass(cls): #注意這里傳入的參數(shù)不是self,而是指定參數(shù)clsprint('start')@classmethoddef test_01(self):print('test_01')@classmethoddef test_02(self):print('test_02')@classmethoddef tearDownClass(cls): #注意這里傳入的參數(shù)不是self,而是指定參數(shù)clsprint('end')if __name__ == '__main__':unittest.main()#運(yùn)行結(jié)果: # start # test_01 # test_02 # end

9、數(shù)據(jù)驅(qū)動(dòng):ddt

【1】作用:

  • 針對(duì)某些功能相同,但是輸入的參數(shù)數(shù)據(jù)不同時(shí),可以使用數(shù)據(jù)驅(qū)動(dòng)設(shè)計(jì)的模式,一組數(shù)據(jù)對(duì)應(yīng)一個(gè)測(cè)試用例,用例自動(dòng)加載生成,有效的較少代碼量。如:登錄時(shí)。

【2】安裝ddt模塊

pip install ddt

【3】ddt模塊使用方法

  • 測(cè)試數(shù)據(jù)為存放多個(gè)字典的列表。
  • 測(cè)試類的前面需要加上修飾器:@ddt.ddt
  • 對(duì)應(yīng)測(cè)試用例之前加上修飾器:@ddt.data()
  • import unittest import ddt# 測(cè)試數(shù)據(jù):每一條數(shù)據(jù)都是一個(gè)字典;全部數(shù)據(jù)存放在一個(gè)列表中。 testDate = [{'username': 'AAA', 'password': '11111'},{'username': 'BBB', 'password': '22222'},{'username': 'CCC', 'password': '33333'}]#測(cè)試類之前需要加上裝飾器:@ddt.ddt @ddt.ddt class Test(unittest.TestCase):def setUp(self):print('start')#測(cè)試用例前面需要加上裝飾器:@ddt.data()#裝飾器的參數(shù)就是測(cè)試數(shù)據(jù):@ddt.data(*testDate)@ddt.data(*testDate)def test_ddt(self, data):print(data)def tearDown(self):print('end')if __name__ == '__main__':unittest.main()//#輸出結(jié)果:start {'username': 'AAA', 'password': '11111'} end start {'username': 'BBB', 'password': '22222'} end start {'username': 'CCC', 'password': '33333'} end

    10、生成測(cè)試報(bào)告:HTMLTestRunner

    【1】安裝HTMLTestRunner

    • 1.HTMLTestRunner這個(gè)模塊下載不能通過(guò)pip安裝了,只能下載后手動(dòng)導(dǎo)入,下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html

    • 2.Download下HTMLTestRunner.py文件就是我們需要下載的包。
    • 3.下載后手動(dòng)拖到python安裝文件的Lib目錄下

    【2】使用方法:

    ···· ·····if __name__ == '__main__':#將測(cè)試用例加入到套件中suite = unittest.TestSuite()suite.addTest(Test('test_01'))suite.addTest(Test('test_02'))# 獲取當(dāng)前時(shí)間,這樣便于下面的使用。now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time())) + '.html'# filePath:測(cè)試報(bào)告保存的路徑filePath = os.path.join(os.getcwd(), 'report', now)fp = open(filePath, 'wb')# 測(cè)試報(bào)告的title、描述runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='自動(dòng)化測(cè)試HTML文件標(biāo)題',description='自動(dòng)化測(cè)試HTML文件描述')runner.run(suite)# 最后記著關(guān)閉文件fp.close()

    11、截圖

    在測(cè)試過(guò)程中,用的最多的就是截圖功能,畢竟有圖有真相嘛,截圖不僅可以把缺陷原原本本的記錄下來(lái),也方便后面我們根據(jù)缺陷。

    webdriver中提供的截圖方法一:

    • get_screenshot_as_file(filename)
    • 這個(gè)方法是獲取當(dāng)前window的截圖,出現(xiàn)IOError時(shí)候返回False,截圖成功返回True。
    • filename參數(shù)是保存文件的路徑。
    import os import time import unittestfrom selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWaitclass Test(unittest.TestCase):def setUp(self):'''初始化瀏覽器、打開網(wǎng)址、并等待頁(yè)面加載完'''self.driver = webdriver.Chrome()self.driver.get('https://www.baidu.com/')self.wait = WebDriverWait(self.driver, 10)self.wait.until(EC.presence_of_all_elements_located)def test_get_screenshot(self):'''獲取當(dāng)前時(shí)間,用于后面創(chuàng)建圖片名'''now = '百度' + time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time())) + '.jpg'filePath = os.path.join(os.getcwd(), 'image', now)# get_screenshot_as_file()的參數(shù)就是圖片保存路徑self.driver.get_screenshot_as_file(filePath)def tearDown(self):self.driver.quit()if __name__ == '__main__':unittest.main()

    方法二:

    • get_screenshot_as_base64()
    • 這個(gè)方法也是獲取屏幕截圖,保存的是base64的編碼格式,在HTML界面輸出截圖的時(shí)候,會(huì)用到。

    方法三:

    • get_screenshot_as_png()
    • 這個(gè)是獲取屏幕截圖,保存的是二進(jìn)制數(shù)據(jù)。

    轉(zhuǎn)載于:https://www.cnblogs.com/jasontang369/p/9568979.html

    與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的unittest框架学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。