多測師之unittest詳解

2022-08-31 18:57:30 字數 3663 閱讀 9189

一、unittst框架的作用

當我們寫的用例越來越多時,我們就需要考慮用例編寫的規範與組織,以便於後期的維護,而unittest正是這樣一款工具

二、unittest是python自帶的標準庫中的模組,其中包括:

1、testcase類

2、testsuite類

3、testloader類

4、texttestrunner類

5、texttestresult類

6、testfixture類

解釋下:

testcase:

乙個testcase的例項就是乙個測試用例,測試用例就是乙個完整的測試流程,包括初始化setup、執行run、測試後的還原teardown

testsuite:

對乙個功能的測試往往需要多測試用例的,可以把多的測試用例集合在一起執行,這就是testsuite的概念。常用addtest()方法將乙個測試用例新增到測試套件中

texttestrunner:

是用來執行測試用例的,其中的run(test)用來執行testsuite/testcase。測試的結果會儲存在texttestresult例項中

testfixture:

測試準備前要做的工作和測試執行完後要做的工作.包括setup()和teardown()。通過覆蓋testcase的setup和teardown來實現。

testloader:

是用來搜尋所有以test開頭的測試用例,然後將其加入到testsuite中

圖形化解釋:

三、框架的組成

在寫測試類以及測試用例時要規定乙個命名習慣,一般測試類可以以test開頭,也可以以test結尾。測試用例一般是以test開頭。

eg:結構如下:

import unittest #匯入unittest包

#建立測試類:從unittest.testcase繼承

classromannumeralconvertertest(unittest.testcase):

def setup(self): #初始化測試環境

def teardown(self): #還原測試環境

def test_case(self):測試用例

class x(unittest.testcase):

#setup:用於設定初始化環境的,該類中的方法執行時都會先執行setup中

#**如:開啟瀏覽器、變數賦值、連線資料庫等工作

def setup(self):

self.dr=webdriver.chrome()

self.dr.maximize_window()

self.dr.implicitly_wait(20)#智慧型等待,sleep機械等待

self.dr.get('')

#編寫實際用例的地方

#搜尋多測師

def test_casea(self):

self.dr.find_element_by_id('kw').send_keys(u'多測師')

sleep(3)

#搜尋達內

def test_case3(self):

self.dr.find_element_by_id('kw').send_keys(u'達內')

sleep(3)

#搜尋北大青鳥

def test_case2(self):

self.dr.find_element_by_id('kw').send_keys(u'北大青鳥')

sleep(3)

#用例執行完,還有測試環境如:退出登入、斷開資料庫、關閉瀏覽器

def teardown(self):

self.dr.quit()#關閉所有視窗

if __name__ == '__main__':

unittest.main()#

#unittest.main():使用它可以將乙個單元測試模組變為可直接執行的測試指令碼,main()方法使用testloader類來搜尋所有包含在該模組中以「test」命名開頭的測試方法,並自動執行

注意:pycharm工具預設執行方式為unittests方式

五、組織用例集

這裡我們假設,指令碼當中有多個testcase如test_case1,test_case2…,那我們應該怎樣去控制它們的執行順序

#執行方案一:

if __name__ == '__main__':

unittest.main()#

注:這裡它搜尋所有以test開頭的測試用例方法,根據ascii碼的順序載入測試用例, 數字與字母的順序為:0-9,a-z,a-z

#執行方案二:

if __name__ == '__main__':

suite=unittest.testsuite()#構造測試容器(先例項化測試套件)

suite.addtest(baidu('test'))#新增用例

run=unittest.texttestrunner()#獲取執行方法

run.run(suite)

注:執行的順序是用例的載入順序,比如這裡是先執行2後執行1。

#執行方案三:執行順序和方案一相同(路徑不要太深,複雜)

在方案2中,如果我們有成百上千個用例的話,乙個乙個add進去,是不太現實的,那麼我們可以用defaulttestloader來載入,該新增方法不過當前py檔案下有多少個用例有多少個類,都可以執行

if __name__ == '__main__':

test_dir = './'

discover=unittest.defaulttestloader.discover(test_dir,pattern='*d3.py')

runner = unittest.texttestrunner()

runner.run(discover)

自動化用例編寫注意點:

1、乙個自動化指令碼就是乙個完整的場景:從開始---執行過程---結束(退出)

2、乙個自動化指令碼只驗證乙個功能點,不要試圖把所有功能都寫在乙個用例中

3、編寫自動化用例盡量是正常場景,避免異常場景(用名不填驗證登入)

4、自動動化用例直接盡量保證獨立性,不要造成乙個用例與多個用例產出資料上或

業務上的關聯,這會給後期帶來用例維護上的不便

5、自動化用例的斷言,只針對需要斷言的地方進行斷言(重要環節),沒必要在每個

個環境進行斷言驗證

解釋:1、'./':表示當前路徑

2、'd3.py':就是你新建的工程檔案名字

3.discover方法裡面有三個引數:

-case_dir:這個是待執行用例的目錄。

-pattern:這個是匹配指令碼名稱的規則,test*.py意思是匹配test開 頭的所有指令碼。

-top_level_dir:這個是頂層目錄的名稱,一般預設等於none就行了。

4.discover載入到的用例是乙個list集合,需要重新寫入到乙個list物件testcase裡,這樣就可以用unittest裡面的texttestrunner這裡類的run方法去執行。

多測師 MySQL 儲存過程

1 儲存過程 使用儲存過程的優點 建立儲存過程 建立儲存過程 delimiter create procedure 儲存過程名稱 in out inout 引數名,資料型別 begin 儲存過程體 end delimiter call 儲存過程名稱 引數 呼叫儲存過程 begin.end 代表儲存過...

多測師 介面結構內容

1 介面結構 包含了哪些內容 1 request url 請求位址 2 request method 請求方式 常見的 get 常用於向伺服器獲取資料 put 常用於審核操作介面 delete 常用於刪除類介面 3 http 狀態碼 分類 分類描述 1 資訊,伺服器收到請求,需要請求者繼續執行操作 ...

多測師 Python(內建函式)

一.python內建函式 1.id 返回物件的記憶體位址 a 1 print id a print id 1 2.int 用於將資料型別轉換為整型 a 1 b 2 print int a b 3.str 用於將資料型別轉換為字串 age 18 name zhengying print name ag...