單元測試框架: unittest pytest
uniittest:
unittest是python內建的單元測試框架,具有編寫用例,組織用例,執行用例,輸出測試報告等自動化框架的條件。
unittest中的5個重要概念:test fixture,testcase,testsuite,testloder,texttestrunner
test fixture:搭建測試環境的準備及清理工作,準備執行測試需要的資料,環境等;使用方法setup(),teardown(),setupclass(),teardownclass();什麼時候使用呢?比如說在這個測試用例中需要訪問資料庫,那麼可以在setup() 中建立資料庫連線以及進行一些初始化,在teardown()中清除在資料庫中產生的資料,然後關閉連線。注意teardown的過程很重要,要為以後的 testcase留下乙個乾淨的環境。
testcase:乙個testcase的例項就是乙個測試用例。什麼是測試用例呢?就是乙個完整的測試流程,包括測試前準備環境的搭建(setup),執行測試 ** (run),以及測試後環境的還原(teardown)。unittest中測試用例方法都是以test開頭的,且執行順序會按照方法名的ascii值排序。
testsuite:將多個測試用例集合到一起,可以是多個test case,也可以是testsuite,甚至可以test case和 test suite一起。
testloder:載入test case到test suite中
texttestrunner:用來執行測試用例
texttestresult:儲存測試用例的執行結果
工作原理:
1.寫好測試用例testcase;注意測試類需要繼承unittest.testcase,乙個函式一條測試用例,不能傳參,只支援self引數,函式名必須用test 開頭
2.將測試用例通過testloder載入到testsuit儲存
3.通過texttestrunner()來執行testsuit
4.通過texttestresult()生成測試報告
5.整個過程整合在unittest.main()模組中
注:testcase和testsuit 可以是乙個或多個
常見斷言方法:
例:對mathmethod進行單元測試mathmethod.py
class
mathmethod:
def__init__
(self,a,b):
self.a=a
self.b=b
defadd(self):
return self.a+self.b
defsub(self):
return self.a-self.b
defmulti(self):
return self.a*self.b
testmathmethod.py
import
unittest
import
os,sys
current_dir=os.path.dirname(os.path.abspath(__file__))#
print(current_dir)
#print(sys.path)
from mathmethod import
mathmethod
class
testmathmethod(unittest.testcase):
deftest_add_integer(self):
res=mathmethod(3,5).add()
self.assertequal(8,res)
deftest_add_zero(self):
res=mathmethod(0,0).add()
self.assertequal(0,res)
執行測試用例:
runtest.py
import
unittest,os,sys
dir_path=os.path.dirname(os.path.abspath(__file__
))from testmathmethod import
testmathmethod
import
testmathmethod
#方法一,使用testsuit新增測試用例執行
suit=unittest.testsuite() #
建立乙個suit集 儲存測試用例
suit.addtest(testmathmethod('
test_add_integer
')) #
新增測試用例
suit.addtest(testmathmethod('
test_add_zero'))
run=unittest.texttestrunner() #
例項 texttestrunner()
run.run(suit) #
執行測試
#方法二 ,使用testloder載入測試用例到testsuit執行
loder=unittest.testloader() #
建立乙個載入器
#suit.addtest(loder.loadtestsfromtestcase(testmathmethod)) #通過測試用例名載入測試用例
suit.addtest(loder.loadtestsfrommodule(testmathmethod)) #
通過模組名載入 測試用例,匯入時直接匯入模組
run=unittest.texttestrunner()
run.run(suit)
#生成測試報告
with open('
test_result.txt
','w+
') as file:
loder=unittest.testloader() #
建立乙個載入器
suit.addtest(loder.loadtestsfrommodule(testmathmethod))
runner=unittest.texttestrunner(file,verbosity=2,descriptions='
測試報告')
#verbosity 預設為1,0輸出測試執行結果,1 輸出測試失敗的詳細資訊 2 輸出詳細測試執行結果
runner.run(suit)
#自動根據測試用例路徑匹配查詢測試用例檔案(test*.py),並將查詢到的測試用例新增到測試套件
suit2=unittest.defaulttestloader.discover(filepath,pattern='
test*.py
')
Python單元測試unittest
python中有乙個自帶的單元測試框架是unittest模組,用它來做單元測試,它裡面封裝好了一些校驗返回的結果方法和一些用例執行前的初始化操作。在說unittest之前,先說幾個概念 testcase 也就是測試用例 testsuite 多個測試用例集合在一起,就是testsuite testlo...
Python單元測試unittest
python中有乙個自帶的單元測試框架是unittest模組,用它來做單元測試,它裡面封裝好了一些校驗返回的結果方法和一些用例執行前的初始化操作。在說unittest之前,先說幾個概念 testcase 也就是測試用例 testsuite 多個測試用例集合在一起,就是testsuite testlo...
Python單元測試unittest
python中有乙個自帶的單元測試框架是unittest模組,用它來做單元測試,它裡面封裝好了一些校驗返回的結果方法和一些用例執行前的初始化操作。在說unittest之前,先說幾個概念 testcase 也就是測試用例 testsuite 多個測試用例集合在一起,就是testsuite testlo...