最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytest實戰(zhàn)技巧之參數(shù)化基本用法和多種方式

 更新時間:2023年12月08日 09:18:09   作者:自動化測試老司 機  
本文介紹了pytest參數(shù)化的基本用法和多種方式,幫助讀者更好地使用這個功能,同時,還介紹了一些高級技巧,如動態(tài)生成參數(shù)名稱、參數(shù)化的組合和動態(tài)生成參數(shù)化裝飾器,幫助讀者更靈活地使用參數(shù)化,感興趣的朋友參考下吧

pytest是Python中最流行的測試框架之一。它提供了豐富的功能,可以幫助我們編寫高效、可靠的測試用例。其中一個重要的功能就是參數(shù)化,它可以讓我們用不同的數(shù)據(jù)組合來運行同一個測試用例,從而 提高測試覆蓋率和效率。本文將介紹pytest參數(shù)化的基本用法和一些高級技巧,幫助讀者更好地使用這個功能。 

01、基本用法

pytest參數(shù)化的基本用法非常簡單,只需要在測試函數(shù)上添加一個裝飾器@pytest.mark.parametrize, 然后指定參數(shù)名稱和參數(shù)值列表即可。例如,我們有一個測試函數(shù)test_add,用來測試兩個數(shù)相加的結(jié)果是否正確:

def test_add():
   assert add(2, 3) == 5
   assert add(-1, 1) == 0

現(xiàn)在我們想用多組數(shù)據(jù)來運行這個測試函數(shù),可以這樣做:

import pytest
@pytest.mark.parametrize("a, b, expected", [
  (2, 3, 5),
  (-1, 1, 0),
  (0, 0, 0),
  (100, -100, 0),
])
def test_add(a, b, expected):
   assert add(a, b) == expected

這里我們定義了一個參數(shù)化裝飾器,指定了三個參數(shù)名稱a、b和expected,以及一個參數(shù)值列表,其中每個元素都是一個包含三個值的元組,分別代表兩個數(shù)和它們的和。這樣,pytest就會根據(jù)這個參數(shù)值列表,自動運行測試函數(shù)四次,每次用一個元組中的數(shù)據(jù)來替換a、b和expected參數(shù),然后執(zhí)行斷言操作,最后輸出測試結(jié)果。 

02、參數(shù)化的多種方式 

除了上面的方式,pytest還支持多種參數(shù)化的方式,可以根據(jù)實際情況選擇最合適的一種。 

參數(shù)值列表 

我們已經(jīng)看到了最簡單的參數(shù)化方式,就是將多組參數(shù)值放在一個列表中,然后傳給裝飾器。這種方式適用于參數(shù)比較少、每個參數(shù)值都比較獨立的情況。如果參數(shù)值之間有一定的關(guān)聯(lián)性,或者參數(shù)比較 多,就不太適合使用這種方式了。 

參數(shù)名稱列表 

有時我們希望將參數(shù)值列表和參數(shù)名稱列表分開定義,這樣可以更清晰地表達參數(shù)之間的關(guān)系。例如, 我們有一個函數(shù)用來測試字符串是否包含某個子串,可以這樣寫:

@pytest.mark.parametrize("s, sub, expected", [
  ("hello world", "hello", True),
  ("hello world", "world", True),
  ("hello world", "python", False),
])
def test_contains(s, sub, expected):
   assert (sub in s) == expected

這里我們將參數(shù)名稱s、sub和expected分別和參數(shù)值列表中的元組對應(yīng)起來,這樣就可以更直觀地理解 每個參數(shù)的含義。

注意,參數(shù)名稱列表也可以是一個字符串,多個參數(shù)名稱之間用逗號隔開,例如:"a, b, expected"。 

參數(shù)化裝飾器嵌套 

有時我們需要對多個參數(shù)進行組合,這時可以使用參數(shù)化裝飾器的嵌套。例如,我們有一個函數(shù)用來測試兩個字符串連接后的結(jié)果是否正確,可以這樣寫:

@pytest.mark.parametrize("s1", ["hello", "world"])
@pytest.mark.parametrize("s2", ["python", "pytest"])
def test_concat(s1, s2):
   assert concat(s1, s2) == s1 + s2

這里我們先用一個參數(shù)化裝飾器指定s1參數(shù)的取值范圍,然后在這個裝飾器內(nèi)部再嵌套一個參數(shù)化裝飾器,指定s2參數(shù)的取值范圍。這樣,pytest就會自動運行測試函數(shù)四次,每次用一個s1和一個s2的組合 來測試函數(shù)的正確性。 

參數(shù)化函數(shù) 

有時我們需要動態(tài)生成參數(shù)值列表,這時可以使用參數(shù)化函數(shù)。例如,我們有一個函數(shù)用來測試一個整數(shù)是否為質(zhì)數(shù),可以這樣寫:

def is_prime(n):
   if n < 2:
      return False
   for i in range(2, int(n ** 0.5) + 1):
      if n % i == 0:
         return False
   return True
@pytest.mark.parametrize("n", range(10))
def test_is_prime(n):
   assert is_prime(n) == (n in [2, 3, 5, 7])

這里我們使用了Python內(nèi)置的range函數(shù)來生成一個整數(shù)序列,然后將這個序列作為參數(shù)值列表傳給了參數(shù)化裝飾器。這樣,pytest就會自動運行測試函數(shù)十次,每次用一個整數(shù)來測試函數(shù)的正確性。

從文件讀取參數(shù) 

有時我們需要從外部文件中讀取參數(shù)值列表,這時可以使用pytest的fixture機制。例如,我們有一個CSV文件,包含了多組數(shù)據(jù),每組數(shù)據(jù)都是一個整數(shù)和一個字符串,用逗號隔開。我們希望用這些數(shù)據(jù) 來測試一個函數(shù),可以這樣寫:

import csv
import pytest
@pytest.fixture(scope="module")
def data():
   with open("test_data.csv") as f:
      reader = csv.reader(f)
      return list(reader)
@pytest.mark.parametrize("n, s", data())
def test_func(n, s):
   assert func(n, s) == ...

這里我們定義了一個fixture函數(shù)data,用來讀取CSV文件中的數(shù)據(jù),并返回一個列表,每個元素都是一 個包含兩個值的元組。然后在測試函數(shù)的參數(shù)化裝飾器中,使用data()來獲取這個列表,并將其中的元 組分別賦值給n和s兩個參數(shù)。這樣,pytest就會自動運行測試函數(shù)多次,每次用一個元組中的數(shù)據(jù)來測 試函數(shù)的正確性。 

03、參數(shù)化的高級技巧 

除了上面介紹的基本用法和多種方式,pytest參數(shù)化還有一些高級技巧,可以幫助我們更靈活地使用這個功能。 

動態(tài)生成參數(shù)名稱 

有時我們需要動態(tài)生成參數(shù)名稱,例如根據(jù)參數(shù)值來生成一個唯一的標(biāo)識符。這時可以使用pytest的ids 參數(shù),它可以指定每個參數(shù)值對應(yīng)的參數(shù)名稱。例如,我們有一個函數(shù)用來測試兩個字符串連接后的長度是否正確,可以這樣寫:

@pytest.mark.parametrize("s1, s2, expected", [
   ("hello", "world", 10),
   ("pytest", "is awesome", 15),
], ids=["case1", "case2"])
def test_len(s1, s2, expected):
   assert len(concat(s1, s2)) == expected

這里我們使用了ids參數(shù),將每個參數(shù)值對應(yīng)的參數(shù)名稱指定為了一個字符串,分別 是"case1"和"case2"。這樣,pytest就會在測試結(jié)果中顯示這些參數(shù)名稱,方便我們查看和分析測試結(jié)果。 

參數(shù)化的組合 

有時我們需要對多個參數(shù)進行組合,例如測試一個函數(shù)在不同參數(shù)組合下的正確性。這時可以使用pytest的product參數(shù)化,它可以將多個參數(shù)值列表進行組合,生成所有可能的參數(shù)組合。

例如,我們有一個函數(shù)用來測試兩個整數(shù)相乘的結(jié)果是否正確,可以這樣寫:

@pytest.mark.parametrize("a", [1, 2, 3]) @pytest.mark.parametrize("b", [4, 5, 6])
def test_mul(a, b):
   assert mul(a, b) == a * b
@pytest.mark.parametrize("a, b", product([1, 2, 3], [4, 5, 6]))
def test_mul2(a, b):
   assert mul(a, b) == a * b

這里我們先用兩個參數(shù)化裝飾器分別指定a和b的取值范圍,然后在測試函數(shù)中用a和b的乘積來進行斷 言。這樣,pytest就會自動運行測試函數(shù)九次,每次用一個a和一個b的組合來測試函數(shù)的正確性。另 外,我們還可以使用product函數(shù)來完成同樣的功能,它可以將多個參數(shù)值列表進行組合,并返回所有可能的參數(shù)組合。

動態(tài)生成參數(shù)化裝飾器 

有時我們需要根據(jù)某些條件動態(tài)生成參數(shù)化裝飾器,例如根據(jù)某個配置文件中的參數(shù)來決定測試函數(shù)的參數(shù)取值范圍。這時可以使用pytest的fixture機制,動態(tài)生成參數(shù)化裝飾器。

例如,我們有一個配置文件,包含了兩個參數(shù)s和n,分別表示一個字符串和一個整數(shù),我們希望用這些參數(shù)來測試一個函數(shù),可 以這樣寫:

import yaml
import pytest
@pytest.fixture(scope="module")
def config():
   with open("test_config.yaml") as f:
        return yaml.safe_load(f)
@pytest.fixture(scope="module")
   def params(config):
       return [(s, n) for s in config["strings"] for n in config["numbers"]]
def test_func(params):
   for s, n in params:
       assert func(s, n) == ...

這里我們定義了兩個fixture函數(shù),config和params。

  • config用來讀取配置文件中的參數(shù)
  • params用來根據(jù)這些參數(shù)動態(tài)生成參數(shù)值列表

然后在測試函數(shù)中,使用params來獲取參數(shù)值列表,并將其中的元 組分別賦值給s和n兩個參數(shù)。這樣,pytest就會自動運行測試函數(shù)多次,每次用一個元組中的數(shù)據(jù)來測試函數(shù)的正確性。 

04、總結(jié)

本文介紹了pytest參數(shù)化的基本用法和多種方式,幫助讀者更好地使用這個功能。同時,還介紹了一些高級技巧,如動態(tài)生成參數(shù)名稱、參數(shù)化的組合和動態(tài)生成參數(shù)化裝飾器,幫助讀者更靈活地使用參數(shù) 化。通過學(xué)習(xí)本文,讀者可以更好地理解pytest參數(shù)化的原理和用法,從而編寫更高效、可靠的測試用例。

到此這篇關(guān)于pytest實戰(zhàn)技巧之參數(shù)化應(yīng)用的文章就介紹到這了,更多相關(guān)pytest參數(shù)化應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python Property屬性的2種用法

    Python Property屬性的2種用法

    這篇文章主要介紹了Python Property屬性的2種用法,本文分別給出了兩種用法的代碼實例,需要的朋友可以參考下
    2015-06-06
  • JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    這篇文章主要介紹了JupyterNotebook 輸出窗口的顯示效果調(diào)整方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • django重新生成數(shù)據(jù)庫中的某張表方法

    django重新生成數(shù)據(jù)庫中的某張表方法

    今天小編就為大家分享一篇django重新生成數(shù)據(jù)庫中的某張表方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python 中不同包 類 方法 之間的調(diào)用詳解

    python 中不同包 類 方法 之間的調(diào)用詳解

    這篇文章主要介紹了python 中不同包 類 方法 之間的調(diào)用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 深入理解python協(xié)程

    深入理解python協(xié)程

    協(xié)程又稱為微線程,協(xié)程是一種用戶態(tài)的輕量級線程,它是實現(xiàn)多任務(wù)的另一種方式,只不過是比線程更小的執(zhí)行單元。因為它自帶CPU的上下文,這樣只要在合適的時機,我們可以把一個協(xié)程切換到另一個協(xié)程
    2021-06-06
  • 深入理解Python虛擬機中常見魔術(shù)方法的使用

    深入理解Python虛擬機中常見魔術(shù)方法的使用

    本文主要給大家介紹在 python 當(dāng)中與數(shù)學(xué)計算相關(guān)的一些常見的魔術(shù)方法,是在很多科學(xué)計算的包當(dāng)中都使用到的魔術(shù)方法,感興趣的小伙伴可以了解一下
    2023-05-05
  • Python異常處理例題整理

    Python異常處理例題整理

    在本篇文章里
    2019-07-07
  • 基于Python搭建局域網(wǎng)大文件分享傳輸工具

    基于Python搭建局域網(wǎng)大文件分享傳輸工具

    這篇文章主要為大家詳細介紹了如何基于Python搭建局域網(wǎng)大文件分享傳輸工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • python使用selenium模擬瀏覽器進入好友QQ空間留言功能

    python使用selenium模擬瀏覽器進入好友QQ空間留言功能

    這篇文章主要介紹了python使用selenium模擬瀏覽器進入好友QQ空間留言,在本文實現(xiàn)過程中需要注意的是留言框和發(fā)表按鈕在不同的frame,發(fā)表在外面的一層,具體實現(xiàn)過程跟隨小編一起看看吧
    2022-04-04
  • Python進行JSON數(shù)據(jù)處理的全攻略

    Python進行JSON數(shù)據(jù)處理的全攻略

    JSON是“JavaScript Object Notation”的縮寫,它本來是JavaScript語言中創(chuàng)建對象的一種字面量語法,現(xiàn)在已經(jīng)被廣泛的應(yīng)用于跨語言跨平臺的數(shù)據(jù)交換,下面我們就來看看Python進行JSON數(shù)據(jù)處理的相關(guān)策略吧
    2025-07-07

最新評論

台山市| 方山县| 县级市| 墨脱县| 宁城县| 手机| 东宁县| 莱州市| 观塘区| 黄骅市| 黄骅市| 子长县| 平果县| 原平市| 永顺县| 普洱| 阿合奇县| 玉门市| 海城市| 尤溪县| 潍坊市| 凤山县| 南华县| 托克托县| 广安市| 都匀市| 西城区| 页游| 扎兰屯市| 勃利县| 龙江县| 光泽县| 万盛区| 友谊县| 康乐县| 科技| 宽城| 德令哈市| 闵行区| 台南县| 岚皋县|