關於python之ddt模塊使用的信息

本文目錄一覽:

自動化測試-unittest框架,理論和實操雙管齊下

unittest

1、什麼是Unittest框架?

python自帶一種單元測試框架

2、為什麼使用UnitTest框架?

批量執行用例

提供豐富的斷言知識

可以生成報告

3、核心要素:

1). TestCase(測試用例)

2). TestSuite(測試套件)

3). TestRunner(測試執行,執行TestUite測試套件的)

4). TestLoader(批量執行測試用例-搜索指定文件夾內指定字母開頭的模塊) 【推薦】

5). Fixture(固定裝置(兩個固定的函數,一個初始化時使用,一個結束時使用))

接下來會展開 核心要素來認識unittest框架:

首先介紹下unittest的用例規則:

1、測試文件必須導包:import unittest

2、測試類必須繼承 unittest.TestCase

3、測試方法必須以 test_開頭

一、TestCase(測試用例)

1、是一個代碼文件,在代碼文件中來書寫真正的用例代碼 (裡面的print均是模擬測試用例)

說明:def 定義的test_ 是測試用例,只有執行 if __name__ == ‘___mian___’ 的時候會執行測試用例,其他普通函數則不執行,通過 self 來調用執行。

二、TestSuite(測試套件)和TestRunner(測試執行)

1、TestSuite(測試套件):用來組裝,打包 ,管理多個TestCase(測試用例)文件的

2、TestRunner(測試執行):用來執行 TestSuite(測試套件的)

代碼:首先要準備多個測試用例的文件才可以實現TestSuite和TestRunner,以下代碼是已經準備了unittest_Demo2和unittest_Demo1兩個測試用例文件

三、TestLoader(測試加載)

說明:

2. 搜索指定目錄文件下指定字母開頭的模塊文件下test開始的方法,並將這些方法添加到測試套件中,最後返回測試套件

3. 與Testsuite功能一樣,對他功能的補充,用來組裝測試用例

一般測試用例是寫在Case這個文件夾裡面,當測試用例超多的時候就可以考慮 TestLoader

四、Fixture(測試夾具)

是一種代碼結構,在某些特定情況下,會自動執行。

4.1 方法級別

在每個測試方法(用例代碼)執行前後都會自動調用的結構

def setUp(),每個測試方法執行之前都會執行 (初始化)

def tearDown(),每個測試方法執行之後都會執行 (釋放)

特性:幾個測試函數,執行幾次。每個測試函數執行之前都會執行 setUp,執行之後都會執行tearDwon

4.2 類級別

在每個測試類中所有方法執行前後 都會自動調用的結構(在整個類中 執行之前執行之後各一次)

def setUpClass() ,類中所有方法之前

def tearDownClass(),類中所有方法之後

特性:測試類運行之前運行一次setUpClass ,類運行之後運行一次tearDownClass

注意:類方法必須使用 @classmethod修飾

案列模板:結合了類級別和方法級別實現的

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GBxQV2uP-1647245316010)(C:/Users/15277/AppData/Roaming/Typora/typora-user-images/image-20220303153824329.png)]

五、斷言

1、什麼是斷言:

讓程序代替人工自動的判斷預期結果和實際結果是否相符

斷言的結果:

1)、True,用例通過

2)、False,代碼拋出異常,用例不通過

3)、在unittest中使用斷言,需要通過 self.斷言方法

2、為什麼要斷言:

自動化腳本執行時都是無人值守,需要通過斷言來判斷自動化腳本的執行是否通過

註:自動化腳本不寫斷言,相當於沒有執行測試一個效果。

3、常用的斷言:

對於一些未完成的或者不滿足測試條件的測試函數和測試類, 不想執行,可以使用跳過

結果

七、數據驅動(unittest ddt)

ddt:data-driver tests

數據驅動:是以數據來驅動整個測試用例的執行, 也就是測試數據決定測試結果

數據驅動解決的問題是:

1)、代碼和數據分離,避免代碼冗餘

2)、不寫重複的代碼邏輯;

在python解釋器中需要安裝 ddt 這個包才能用:

要檢查是否安裝上,在cmd當中 輸入 pip list命名,有ddt說明安裝成功

語法:

1、使用數據驅動,要在class前加上修飾器 @ddt

說明:方法裡面使用 print ,為了方便,模擬測試用例,主要是為了學習數據驅動,實際中方法裡面寫的是測試用例的代碼

1)、結合 selenium 使用 ddt

self:相當於java中的this,當前對象的引用,self.driver定義了driver這個變量。

2、在實際中不可能是單一參數進行傳參,將會使用多個參數進行傳參:

但是以上步驟都是數據在代碼當中的,假如要測試n個手機號這樣的數據,全部寫在 @data 裝飾器裡面就很麻煩,這就引出了數據驅動裡面的代碼和數據的分離。

3、將數據放入一個文本文件中,從文件讀取數據, 如JSON、 excel、 xml、 txt等格式文件 ,這裡演示的是json文件類型.

json文件處理, 這個鏈接介紹了json文件和Python文件基本操作

(1)、在json文件驅動

(2)、在測試代碼中讀取json文件

執行結果:

一行表示一組:

寫法一:

寫法二:推薦

對應的json文件

寫法:

注意:file_date 裝飾器,可以直接讀取yaml和json文件

建立excel表的時候需要退出pychram在根目錄下創建excel表保存,否則會報錯

用excel登錄csdn操作

用例不可能每一次運行都成功,肯定運行時候有不成功的時候。如果可以捕捉到錯誤,並且把錯誤截圖保存,這將

是一個非常棒的功能,也會給我們錯誤定位帶來方便

截圖方法: driver.get_screenshot_as_file

有兩種測試報告:

只有單獨運行 TestCase 的代碼,才會生成測試報告

這裡需要第三方的測試運行類模塊,然後放在代碼的目錄中

就像這兩個模塊一樣放進代碼目錄中

寫法一:

寫法二:

這裡面的當前路徑也可以用 ./ 來表示!!!

注意:

實例化 第三方的運行對象,HTMLTestRunner()的初始化有多種可以自定義設置

最後生成結果

unittest框架就本上就是這些知識了,裡面記得東西很多,多敲代碼,形成記憶…

請教:python裝飾器如何不改變原函數名

裝飾器是用在函數不修改添加新功能的情況下誕生的,一般在需要裝飾的函數上寫

@funcname

def funb(){

…..

}

然後再裝飾的函數裡面去調用原函數,以達到不修改添加功能的作用

python ddt 支持讀取json格式數據么

#讀file = ‘test.json’fp = open(file, ‘r’)dict = json.dump(fp.read())fp.close()#寫testDict = {‘a’:1,’b’:2}file = ‘my.json’fp = open(file,’w+’)fp.write(json.loads(testDict))fp.close()

為什麼python 自動化測試 使用@ddt、@unpack後會都執行一次setUp函數?

setUp和tearDown的執行跟ddt沒有關係,是測試框架如unittest裡邊的內容。

如果只想執行一次,可以改為:

@classmethod

def setUpClass(cls):

pass

xlrd實現從excel文件讀取數據

自動化測試時,經常會提到數據驅動的概念。數據驅動是以數據來驅動整個測試用例的執行,即測試數據決定測試結果。Python中ddt模塊可以實現。 python 操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。

如果測試數據寫入到excel文件中,該如何從中獲取數據呢?

● 假設測試登錄功能的用例:

● 正常賬號密碼登錄成功;

● 錯誤賬號登錄失敗;

● 錯誤密碼登錄失敗;

● ……

根據當前系統數據,準備好三組測試用例的數據,寫入到excel表格中:

讀取數據使用xlrd(支持xls格式)示例:

附Xlrd常用操作如下:

打開excel:

那麼這樣就可以讀取到數據了。

DDT與pytest.mark.parametrize參數化區別

一、DDT解析參數

ddt 是第三方模塊,需安裝, pip install ddt

DDT包含類的裝飾器ddt和兩個方法裝飾器data(直接輸入測試數據)

通常情況下,data中的數據按照一個參數傳遞給測試用例,如果data中含有多個數據,以元組,列表,字典等數據,需要自行在腳本中對數據進行分解或者使用unpack分解數據。

@data(a,b)

那麼a和b各運行一次用例

@data([a,d],[c,d])

如果沒有@unpack,那麼[a,b]當成一個參數傳入用例運行

如果有 @unpack ,那麼[a,b]被分解開,按照用例中的兩個參數傳遞

1、測試參數如下:

login_data=[{“para”:{“mobilephone”:”18777770000″,”pwd”:”123456″},”method”:”get”,”msg”:”登錄成功”},

{“para”: {“mobilephone”:”18777770000″,”pwd”:”000000″},”method”:”get”,”msg”:”用戶名或密碼錯誤”},

{“para”: {“mobilephone”:”  “,”pwd”:”123456″},”method”:”get”,”msg”:”手機號不能為空”}]

2、測試用例使用DDT解析參數:

from ddt import ddt,data

#裝飾測試類

@ddt

class TestHttpRequest(unittest.TestCase):

#裝飾測試用例

@data(*login_data)

def test_login_1(self,data):

   res=HttpRequest(data[‘url’],data[‘param’]).http_request(data[‘method’])

   print(“測試結果:{0}”.format(res.json()))

執行3條用例

標記函數參數化(測試用例方法前加測試數據):@pytest.mark.parametrize(“a,b,expected”, testdata)

語法:

ep1 傳入單個參數

@pytest.mark.parametrize(‘參數名’,lists)

ep2 傳入兩個參數

(‘參數1′,’參數2’,[(參數1_data[0],參數2_data[0]),(參數1_data[1],參數2_data[1])]

傳三個或者更多也是這樣傳。list的每個元素都是一個元祖,元祖里的每個元素和按參數順序一一對應。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/151696.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-11 13:43
下一篇 2024-11-11 13:43

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論