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 ...