5.pytest 引數化使用

Maple發表於2020-12-27

在軟體測試中,經常遇到同一個用例需要輸入多組不同的引數組合,進行功能覆蓋測試,在自動化測試中,我們把這種叫做引數化,在pytest中使用裝飾器就能完成引數化.

@pytest.mark.parametrize(argnames, argvalues)
# 引數:
# argnames:以逗號分隔的字串
# argvaluse: 引數值列表,若有多個引數,一組引數以元組形式存在,包含多組引數的所有引數
# 以元組列表形式存在

一個引數

新建test_05.py檔案

import pytest

@pytest.mark.parametrize("arg_1",[1,2])
def test_01(arg_1):
assert 1 == arg_1


if __name__ == '__main__':
pytest.main(['-s', 'test_05.py'])

執行結果:
============================= test session starts =============================
platform win32 -- Python 3.7.1, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: D:\study\auto-pytest
collected 2 items

test_05.py ..

============================== 2 passed in 0.07s ==============================

多個引數

修改test_05.py

import pytest

values = [
(1, 1, 2),
(1, 2, 4),
(1, 3, 4)
]

@pytest.mark.parametrize("a,b,c",values)
def test_add(a,b,c):
assert (a+b)==c

if __name__ == '__main__':
pytest.main(['-s', 'test_05.py'])

執行結果:
============================= test session starts =============================
platform win32 -- Python 3.7.1, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: D:\study\auto-pytest
collected 3 items

test_05.py .F.

================================== FAILURES ===================================
_______________________________ test_add[1-2-4] _______________________________

a = 1, b = 2, c = 4

@pytest.mark.parametrize("a,b,c",values)
def test_add(a,b,c):
> assert (a+b)==c
E assert (1 + 2) == 4

test_05.py:11: AssertionError
=========================== short test summary info ===========================
FAILED test_05.py::test_add[1-2-4] - assert (1 + 2) == 4
========================= 1 failed, 2 passed in 0.10s =========================

結果三組引數執行用例,斷言a+b=c的時候,發現1+2不等於4,報錯了

相關文章