一、概述:
由於最近在做自動化測試,所以對unittest進行了學習。unittest模組有自己的斷言,執行用例,組織用例等的屬性,所以,掌握了unittest,自動化也就不會太難了。
二、unittest的屬性:
該文以思維導圖的形式描述unittest的重要屬性。
其中前四個是unittest最核心的三個屬性。
testcase:測試用例;
testsuite:測試套件,多個測試用例組成乙個測試套件;
test runner:執行測試用例,該類中的run()方法會執行testsuite/testcase中的run()方法。測試的結果會儲存在testresult中。
還有乙個很重要的就是fixture,看著是挺陌生的,其實就是乙個測試用例執行之前環境的準備和執行之後環境的銷毀。
三、例項:
首先準備一些待測方法,functions.py:
def fun_div(x):
return x/2
def fun_add(x):
return x+2
def fun_minus(x):
return x-2
def fun_multi(x):
return x*2
接下來寫一些測試用例來測這些方法,test.py
import unittest
from functions import fun_add,fun_minus,fun_multi,fun_div
class testfun(unittest.testcase):
times = 0
@classmethod
def setupclass(cls):
print('setupclass')
def setup(self):
# 每個測試用例執行之前都會執行該方法
testfun.times += 1
print('setup', testfun.times)
def teardown(self):
# 每個測試用例執行之後都會執行該方法
testfun.times += 1
print('teardown', testfun.times)
def test1(self):
# 測試用例1:fun_div
# 使用unittest提供的斷言驗證functions中的函式的正誤
# 如果不相等就會失敗
self.assertequal(2, fun_div(4))
self.failunlessequal(2, 2)
# 如果表示式為false,測試失敗
self.asserttrue(1 < 2)
self.failunless(2 == 2)
# 如果兩個值相等,就會測試失敗
self.assertnotequal(2, 1)
def test2(self):
# 測試用例2:fun_add
self.assertnotequal(2, 1)
def test2(self):
# 測試用例2:fun_add
self.asserttrue(fun_add(6) == 8)
def test3(self):
# 測試用例3:fun_minus
self.assertnotequal(6, fun_minus(6))
self.assertequal(4, fun_minus(6))
def test4(self):
# 測試用例4:fun_multi
self.assertisinstance(4, int)
self.assertequal(8, fun_multi(4))
@unittest.skipif(true, 'no')
def test5(self):
print('跳過!')
@classmethod
def teardownclass(cls):
print('teardownclass')
if __name__ == '__main__':
# unittest.main()
suit = unittest.testsuite()
suit.addtest(testfun('test1'))
suit.addtest(testfun('test2'))
suit.addtest(testfun('test3'))
suit.addtest(testfun('test4'))
runner = unittest.texttestrunner()
runner.run(suit)
執行結果:
解釋:1、setup和teardown是每個用例的環境準備和環境銷毀函式,也就是在每個用例執行之前要執行一次setup函式,每個用例執行之後會執行一次teardown函式;
2、setupclass和teardownclass是所有用例的環境準備和環境銷毀函式,也就是說,在這麼多用例執行之前只會執行一次setupclass函式,執行之後會執行一次teardownclass函式,舉例來說,比如此次測試用例需要使用資料庫,那麼在setupclass函式中就會進行資料庫連線,在teardownclass函式中進行資料庫斷開;
3、一般執行測試用例,都會使用testsuit的addtest()方法將要執行的用例放在乙個測試套件中,建立乙個testrunner物件,然後呼叫該物件的run()方法;
4、skip是乙個裝飾器,可以遮蔽一些測試用例,此功能可以用於除錯測試用例。(大型專案中,執行所有的用例需要用很久的時間,但是我們剛好需要除錯某個用例,就可以把其他的用例遮蔽掉);
5、乙個測試用例類都會繼承於testcase類;
6、測試用例報告可以使用texttestrunner輸出(txt報告),也可以用htmltestrunner輸出(html報告)。
python單元測試模組
web 程式開發過程一般包括以下幾個階段 需求分析,設計階段,實現階段,測試階段 其中測試階段通過人工或自動來執行測試某個系統的功能。目的是檢驗其是否滿足需求,並得出特定的結果,以達到弄清楚預期結果和實際結果之間的差別的最終目的。測試從軟體開發過程可以分為 整合測試 系統測試 在眾多的測試中,與程式...
Python中的單元測試
今晚試了一下python自帶的單元測試,主要是參考了python單元測試框架 的有關資料,折騰了乙個小時左右,總算在eric 4通過的幾個簡單的單元測試。在這裡將所得的相關知識記錄下來,方便將來查詢。python自帶的單元測試模組是unittest,從2.1以後為標準庫的一部分 1 測試模組impo...
關於Python單元測試模組Unitest
單元測試 白盒測試和黑盒測試 測試用例 測試執行後的輸出 使用test suite if name main suite unittest.testsuite 定義測試的內容列表 tests testmathfunc test add testmathfunc test minus 新增到測試中,a...