pytest+yaml實現參數化


一、使用背景

當我們在設計用例的時候,經常會出現需要不同參數的情況,例如一個登錄的用例,我們需要測試它登錄名正常、為空、長度過長、過短、特殊字符等情況,因此就需要有不同情況下的參數,而當這些參數過多時,我們如果要一步一步的輸入,便會顯得有點繁瑣,因此就需要有參數化的概念。這里用到pytest里的parametrize+yaml來實現參數化。

 

二、parametrize

首先我們需要知道parametrize的用法。下面是官方文檔中的說明

 

這里我總結了一下:

@pytest.mark.parametrize("參數名",列表數據)
參數名:用來接收每一項數據,並作為測試用例的參數。
列表數據:一組測試數據。

接下來直接用代碼說明:

@pytest.mark.parametrize("a, b, c", [(1, 2, 3), (4, 5, 9), (1, 3, 6)])
def test_add01(a, b, c):
    res = a + b
    assert res == c

  

這里是比較a+b是否等於c,顯然只有2個滿足該條件,故斷言只有2個通過  

運行結果:

 

 

三、yaml

能用來做參數化的形式其實有很多種,可以用xlrd讀取excel表做參數化也可以。這里我選擇用yaml來做參數化。因為yaml是一個可讀性高,用來表達數據序列化的格式,它不是一門語言,跟json有點類似,是一種儲存數據的載體,且支持多種語言,也比較容易理解。需要注意的是yaml比較注重格式,下面是yaml格式的一些基本語法:

 

 示例:

-
  - 1
  - 2
  - 3

-
  - 3
  - 4
  - 7

  

- case1:
  - search_key: "python"
- case2:
  - search_key: "ddt"
- case3:
  - search_key: "selenium"

  

四、將yaml數據轉換成parametrize可讀的列表形式

從上面我們知道了parametrize需要傳一個數據參數 ,所以現在的關鍵點是怎么把yaml格式的數據轉換成parametrize可接受的數據格式。

import yaml


def get_yaml(yaml_file):
    with open(yaml_file, "r", encoding="utf-8") as fp:
        f = fp.read() # 讀出來是字符串
        print(type(f))
    d = yaml.load(f) # 轉列表
    print("讀取到yaml文件數據")
    print(d)
    print(type(d))
    return d

 封裝一個方法,該方法用來將yaml中的數據轉換成列表。上面的兩個yaml示例轉換成列表后如下:

 

 知道了yaml格式和如何轉換yaml數據之后,接下來要實現用例的參數化就好辦多了。

test_parametrize.py

import pytest
from testyaml import get_yaml


file = get_yaml("D:\\python project\\test\\test.yaml")
@pytest.mark.parametrize("a, b, c", file)
def test_add02(a, b, c):
    res = a + b
    assert res == c

test_yaml

-
  - 1
  - 2
  - 3

-
  - 3
  - 4
  - 7

  運行測試用例后,可以看到有兩組用例測試通過

 

 如果后續想繼續加數據,可直接將數據寫再yaml文件里即可。即實現了參數化功能,做到數據與代碼分離。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM