unittest測試框架的使用方法

2021-10-03 21:27:16 字數 3983 閱讀 3725

import unittest

class

myclass

(object):

@classmethod

defsum

(cls,a,b)

:return a + b

@classmethod

defsub

(cls,a,b)

:return a - b

class

mytest

(unittest.testcase):

@classmethod

defsetupclass

(cls)

:print

("---所有測試前的準備工作"

) @classmethod

defteardownclass

(cls)

:print

("---所有測試完成後的清理"

)#初始化工作

defsetup

(self)

: self.a =

3 self.b =

1print

("---初始化完成"

)#退出清理

defteardown

(self)

:print

("退出清理工作"

)#具體的測試用例

deftestsum

(self)

: self.assertequal(myclass.

sum(self.a,self.b),4

,'test_sum_fail'

)def

testsub

(self)

: self.assertequal(myclass.sub(self.a,self.b),2

,'test_sub_fail'

)if __name__ ==

'__main__'

: unittest.main(

)'''

四要素:

1.test fixture(測試韌體)

乙個test fixture代表乙個或者多個測試執行前的準備動作和測試結果後的清理動作

2.test case(測試用例)

乙個test case就是乙個最小測試單元,也就是乙個完整的測試流程,通過繼承unittest.testcase建立新的測試用例

3.test suite(測試套件)

乙個test suite就是一組測試用例,一組測試套件或者兩者共同組成的集合

4.testrunner(測試執行器)

乙個testrunner由執行設定的測試用例和將測試結果提供給使用者兩部分功能組成

單元測試載入方法:

1.直接通過unittest.main()方法載入,測試方法的執行順序按照方法名的ascii碼公升序排序

2.將所有的單元測試用例(test case)新增到測試套件(test suite)中一次性載入所有的物件

testcase類中定義的特殊方法:

setup();每個測試方法執行前執行,測試前的初始化工作

teardown();每個測試方法結束後執行,測試的清理工作

setupclass();所有測試方法執行前執行,單元測試前期準備,必須使用classmethod裝飾器進行修飾,setup()執行前

執行,整個測試過程只執行一次

teardownclass();所有測試方法執行結束後執行,單元測試後期清理,必須使用classmethod裝飾器進行修飾,teardown()執行後

執行,整個測試過程只執行一次

testloader()類:測試用例載入器,返回乙個測試用例的集合

loadtestfromtestcase():根據給定的測試類,獲取其中所有以test開頭的測試方法,並返回乙個測試集合

testsuite()類:組裝測試用例的例項。支援新增和刪除用例,最後將傳遞給testrunner進行測試執行

testtestrunner()類:測試用例執行類,其中test表示以文字形式輸出測試結果

設定verbosity <= 0數字,輸出結果不顯示執行成功的用例數

設定verbosity = 1 ,輸出結果僅以(.)表示成功的使用者數

設定verbosity >= 2的數字,輸出每個測試用例的詳細資訊

testtestrunner.run()方法會返回乙個testresult例項物件,儲存用例執行的詳細資訊。

載入測試集合步驟:

1.testloader(測試用例載入器)根據傳入的引數獲取相應的測試用例的測試方法

2.make suite(由單元測試框架呼叫,用於生產test suite物件的例項)把所有的測試用例組裝成test suite集合

3.將test suite集合傳遞給test runner執行

測試用例按照順序執行

if __name__ == '__main__':

suite = unittest.testsuite()

#將測試用例新增到測試容器當中

suite.addtest(mytest("test_name1"))

suite.addtest(mytest("test_name2"))

suite.addtest(mytest("test_name3"))

suite.addtest(mytest("test_name4"))

suite.addtest(mytest("test_name5"))

#建立testtestrunner物件

runner = unittest.testtestrunner()

runner.run(suite)

忽略某個測試方法

無條件忽略

有條件忽略

@unittest.skip('skipping') 無條件忽略

@unittest.skipif(a > 5,'condition is not satisfied') 如果a > 5則忽略該條測試用例

@unittest.skipunless(sys.platform.startswith("linux"),'requires windows') 除非平台為windows,否則忽略該用例

批量執行測試模組

import unittest

if __name__ == '__main__':

testsuite = unittest.testloader().discover(".")

unittest.testtestrunner(verbosity=2).run(testsuite)

檔案必須放在測試指令碼目錄

斷言方法:

assertequal(a,b,msg='sss') 測試a == b,否則丟擲資訊msg

asserttrue(expr,msg='sss') 測試表示式expr為true

assertis(a,b,msg=none) 測試a和b為同乙個物件

assertisnone(expr,msg) 測試expr為none

assertin(a,b,msg) 測試a包含在b中

assertisinstance(obj,cls,msg) 測試obj為cls型別,可用isinstance(obj,cls)或assertis(type(obj),cls)代替

assertraises(exc [,fun,*args,**kwds]) 測試函式fun(*args,**lwds)丟擲exc異常,否則丟擲斷言異常

assertraiseregexp(exc,r [,fun,*args,**kwds]) 測試函式fun丟擲exc異常,同時可用正則r匹配異常資訊,否則丟擲斷言異常

filename = '路徑+檔名+字尾'

with open(filename,'wb') as f:

runner = htmltestrunner.htmltestrunner(stream = f,title = 'testname',description = '描述')

rnner.run()

'''

關於unittest測試框架的使用

一直用的是pytest,公司介面自動化用的是unittest,孰勝孰劣不好分析,但是都要學習,適應環境才能得到提高。testcase是測試用例類,所有執行用例的類都要繼承unittest.testcase類 class test unittest.testcase 每乙個繼承unittest.tes...

UnitTest測試框架

unittest是目前應用都相對較高的測試框架之一,主要用於管理測試用例,最初是應用於單元測試,現在可以進行ui 介面自動化測試。它是python內建的乙個測試框架。unittest包含四大元件 1.匯入環境 import unittest2.unittest有基本語法規則 a.繼承自unittes...

使用unittest框架編寫測試用例

編寫乙個簡單的計算器 module.py class calculstor def init self,a,b self.a int a self.b int b def add self return self.a self.b def sub self return self.a self.b ...