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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python unit test 访问开发代码_python unittest 源码分析

發布時間:2023/12/19 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python unit test 访问开发代码_python unittest 源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

unittest單元測試框架總結

unittest單元測試框架既可以適用于單元測試,也能夠適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,并且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果。今天筆者就總結下如何使用unittest單元測試框架來進行WEB自動化測試。

代碼結構介紹 :

case.py ? ? ? ? TestCase的基礎類,assert函數

loader.py ? ? ?對測試文件分析,完成生成測試用例列表

main.py ? ? ? ?unittest的主函數,解析參數,調用各個模塊,完成生成測試用例列表,運行測試用例,生成測試結果

result.py ? ? ? 生成和處理測試結果

runner.py ? ? 運行測試用例或測試用例集

signals.py ? ?對信號量注冊,發出中斷等信號的處理方法

suite.py ? ? ? ?配置測試用例集合的

util.py ? ? ? ? ?工具函數包

test ? ? ? ? ? ? ? unitest使用的例子

先來聊一聊unittest模塊的各個屬性,所謂知己知彼方能百戰百勝,了解unittest的各個屬性,對于后續編寫用例有很大的幫助。

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']

說明:

unittest.TestCase:TestCase類,所有測試用例類繼承的基本類。

class Mydemo(unittest.TestCase):

unittest.main():使用她可以方便的將一個單元測試模塊變為可直接運行的測試腳本,main()方法使用TestLoader類來搜索所有包含在該模塊中以“test”命名開頭的測試方法,并自動執行他們。執行方法的默認順序是:根據ASCII碼的順序加載測試用例,數字與字母的順序為:0-9,A-Z,a-z。所以以A開頭的測試用例方法會優先執行,以a開頭會后執行。

unittest.TestSuite():unittest框架的TestSuite()類是用來創建測試套件的。

unittest.TextTextRunner():unittest框架的TextTextRunner()類,通過該類下面的run()方法來運行suite所組裝的測試用例,入參為suite測試套件。

unittest.defaultTestLoader():?defaultTestLoader()類,通過該類下面的discover()方法可自動更具測試目錄start_dir匹配查找測試用例文件(test*.py),并將查找到的測試用例組裝到測試套件,因此可以直接通過run()方法執行discover。用法如下:

discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

如:

test_dir = os.getcwd()

unittest.defaultTestLoader.discover(start_dir=test_dir, pattern='test*.py', top_level_dir=None)跟據指定目錄下所有測試模塊,可以查詢到子目錄下的測試模塊,只有匹配到文件名才能被加載,如果不是頂層目錄,那么頂層目錄必須單獨指定

stat_dir:要測試的模塊名或者用例目錄

pattern=‘test*.py’:文件的匹配原則,此處表示以‘test’開頭,以‘py’結尾,‘*’表示任意多個字符

top_level_dir=None:測試模塊的頂層目錄,如果沒有頂層目錄,默認為none

unittest.skip():裝飾器,當運行用例時,有些用例可能不想執行等,可用裝飾器暫時屏蔽該條測試用例。一種常見的用法就是比如說想調試某一個測試用例,想先屏蔽其他用例就可以用裝飾器屏蔽。

@unittest.skip(reason):?skip(reason)裝飾器:無條件跳過裝飾的測試,并說明跳過測試的原因。

@unittest.skipIf(reason):?skipIf(condition,reason)裝飾器:條件為真時,跳過裝飾的測試,并說明跳過測試的原因。

@unittest.skipUnless(reason):?skipUnless(condition,reason)裝飾器:條件為假時,跳過裝飾的測試,并說明跳過測試的原因。

@unittest.expectedFailure(): expectedFailure()測試標記為失敗。

2.TestCase類的屬性如下:

['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_addSkip', '_baseAssertEqual', '_classSetupFailed', '_deprecate', '_diffThreshold', '_formatMessage', '_getAssertEqualityFunc', '_truncateMessage', 'addCleanup', 'addTypeEqualityFunc', 'assertAlmostEqual', 'assertAlmostEquals', 'assertDictContainsSubset', 'assertDictEqual', 'assertEqual', 'assertEquals', 'assertFalse', 'assertGreater', 'assertGreaterEqual', 'assertIn', 'assertIs', 'assertIsInstance', 'assertIsNone', 'assertIsNot', 'assertIsNotNone', 'assertItemsEqual', 'assertLess', 'assertLessEqual', 'assertListEqual', 'assertMultiLineEqual', 'assertNotAlmostEqual', 'assertNotAlmostEquals', 'assertNotEqual', 'assertNotEquals', 'assertNotIn', 'assertNotIsInstance', 'assertNotRegexpMatches', 'assertRaises', 'assertRaisesRegexp', 'assertRegexpMatches', 'assertSequenceEqual', 'assertSetEqual', 'assertTrue', 'assertTupleEqual', 'assert_', 'countTestCases', 'debug', 'defaultTestResult', 'doCleanups', 'fail', 'failIf', 'failIfAlmostEqual', 'failIfEqual', 'failUnless', 'failUnlessAlmostEqual', 'failUnlessEqual', 'failUnlessRaises', 'failureException', 'id', 'longMessage', 'maxDiff', 'run', 'setUp', 'setUpClass', 'shortDescription', 'skipTest', 'tearDown', 'tearDownClass']

說明:

setUp():setUp()方法用于測試用例執行前的初始化工作。如測試用例中需要訪問數據庫,可以在setUp中建立數據庫連接并進行初始化。如測試用例需要登錄web,可以先實例化瀏覽器。

tearDown():tearDown()方法用于測試用例執行之后的善后工作。如關閉數據庫連接。關閉瀏覽器。

assert*():一些斷言方法:在執行測試用例的過程中,最終用例是否執行通過,是通過判斷測試得到的實際結果和預期結果是否相等決定的。

assertEqual(a,b,[msg='測試失敗時打印的信息']):斷言a和b是否相等,相等則測試用例通過。

assertNotEqual(a,b,[msg='測試失敗時打印的信息']):斷言a和b是否相等,不相等則測試用例通過。

assertTrue(x,[msg='測試失敗時打印的信息']):斷言x是否True,是True則測試用例通過。

assertFalse(x,[msg='測試失敗時打印的信息']):斷言x是否False,是False則測試用例通過。

assertIs(a,b,[msg='測試失敗時打印的信息']):斷言a是否是b,是則測試用例通過。

assertNotIs(a,b,[msg='測試失敗時打印的信息']):斷言a是否是b,不是則測試用例通過。

assertIsNone(x,[msg='測試失敗時打印的信息']):斷言x是否None,是None則測試用例通過。

assertIsNotNone(x,[msg='測試失敗時打印的信息']):斷言x是否None,不是None則測試用例通過。

assertIn(a,b,[msg='測試失敗時打印的信息']):斷言a是否在b中,在b中則測試用例通過。

assertNotIn(a,b,[msg='測試失敗時打印的信息']):斷言a是否在b中,不在b中則測試用例通過。

assertIsInstance(a,b,[msg='測試失敗時打印的信息']):斷言a是是b的一個實例,是則測試用例通過。

assertNotIsInstance(a,b,[msg='測試失敗時打印的信息']):斷言a是是b的一個實例,不是則測試用例通過。

3.TestSuite類的屬性如下:(組織用例時需要用到)

['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_addClassOrModuleLevelException', '_get_previous_module', '_handleClassSetUp', '_handleModuleFixture', '_handleModuleTearDown', '_tearDownPreviousClass', '_tests', 'addTest', 'addTests', 'countTestCases', 'debug', 'run']

說明:

addTest():?addTest()方法是將測試用例添加到測試套件中,如下方,是將test_baidu模塊下的BaiduTest類下的test_baidu測試用例添加到測試套件。

TestSuite = unittest.TestSuite()

TestSuite.addTest(Mydemo.test1)

4.TextTextRunner的屬性如下:(組織用例時需要用到)

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_makeResult', 'buffer', 'descriptions', 'failfast', 'resultclass', 'run', 'stream', 'verbosity']

說明:

run():?run()方法是運行測試套件的測試用例,入參為suite測試套件。

TestSuite =unittest.TextTestRunner()

runner.run(TestSuite)

二、使用unittest框架編寫測試用例思路

設計基本思路如下:

import unittestfromHTMLTestRunner3 import HTMLTestRunner

import sys

import os

import time

#定義測試類,父類為unittest.TestCase

#可繼承unittest.TestCase的方法,如setUp和tearDown方法,不過此方法可以在子類重寫,覆蓋父類方法

#可繼承unittest.TestCase的斷言classMydemo(unittest.TestCase):

def setUp(self):

self.number=1self.desc='test'print("Test start")

def test1(self):try:#異常處理

self.number=2print(self.number)

self.assertEqual(self.number,2,msg='number不是1')

except:

print("無效的")

pass

# @unittest.skip

def test2(self):

print(self.number)

self.assertEqual(self.number,1,msg='number不是1')

# @unittest.skip('暫時跳過該用例')

def test3(self):

print("excute test3")

@unittest.expectedFailure#用例失敗了不計入失敗case

def test4(self):

print("excute test4")

def tearDown(self):

print('Test over')

#8如果直接運行該文件(__name__值為__main__),則執行以下語句,常用于測試腳本是否能夠正常運行

if __name__=='__main__':

#8.1執行測試用例方案一如下:

#unittest.main()方法會搜索該模塊下所有以test開頭的測試用例方法,并自動執行它們。

#執行順序是命名順序:先執行test1,再執行test2、test3、test4

unittest.main()

'''

#8.2執行測試用例方案二如下:

#8.2.1先構造測試集

#8.2.1.1實例化測試套件

suite=unittest.TestSuite()

#8.2.1.2將測試用例加載到測試套件中。

#執行順序是安裝加載順序:先執行test2,再執行tes1

suite.addTest(Test('test2'))

suite.addTest(Test('test'))

#8.2.2執行測試用例

#8.2.2.1實例化TextTestRunner類

runner=unittest.TextTestRunner()

#8.2.2.2使用run()方法運行測試套件(即運行測試套件中的所有用例)

runner.run(suite)

'''

'''

#8.3執行測試用例方案三如下:

#8.3.1構造測試集(簡化了方案二中先要創建測試套件然后再依次加載測試用例)

#執行順序同方案一:執行順序是命名順序:先執行test_case1,再執行test_case2

test_dir = './'

discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

#8.3.2執行測試用例

#8.3.2.1實例化TextTestRunner類

runner=unittest.TextTestRunner()

#8.3.2.2使用run()方法運行測試套件(即運行測試套件中的所有用例)

runner.run(discover)

'''

總結

以上是生活随笔為你收集整理的python unit test 访问开发代码_python unittest 源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。