一、pytest的参数化parametrize单参数
参数化 parametrize
参数化可以组装测试数据,在测试前定义好测试数据,并在测试用例中使用
# 单次循环
@pytest.mark.parametrize('a', ['b', 'c'])
def test_parametrize(a):
print(a)
# 多次循环
@pytest.mark.parametrize('a,b', ['c', 'd'], ['e', 'f'])
def test_parametrize(a, b):
print(a, b)
'''
@Author : 测试工程师Selina
@FileName : test_parametrize01.py
@Description:
'''
import pytest
# @pytest.mark.parametrize(key,values)
@pytest.mark.parametrize('key', ['value'])
def test_parametrize01(key):
print('我是'+key)
====================== test session starts =========================
collecting ... collected 1 item
test_parametrize01.py::test_parametrize01
[value] PASSED [100%]我是value
====================== 1 passed in 0.01s ===========================
'''
@Author : 测试工程师Selina
@FileName : test_parametrize01.py
@Description:
'''
import pytest
# @pytest.mark.parametrize(key,values)
@pytest.mark.parametrize('name', ['Selina'])
def test_parametrize01(name):
assert name == 'Selina'
============================= test session starts ==============================
collecting ... collected 1 item
test_parametrize01.py::test_parametrize01[Selina] PASSED [100%]
============================== 1 passed in 0.01s ===============================
⚠️ 一个参数,多个值,测试用例会把每个值赋给参数进行测试用例的执行;
⚠️ 有几个值,测试用例执行几次
'''
@Author : 测试工程师Selina
@FileName : test_parametrize01.py
@Description:
'''
import pytest
# 反例
# @pytest.mark.parametrize(key,values)
@pytest.mark.parametrize('hero_name', ['安琪拉', '黄忠', '小乔'])
def test_parametrize01(hero_name):
assert hero_name == '安琪拉'
二、pytest的参数化parametrize多参数
'''
@Author : 测试工程师Selina
@FileName : test_parametrize02.py
@Description:
'''
import pytest
# @pytest.mark.parametrize(key,values)
@pytest.mark.parametrize('hero_name,word',
[['安琪拉', '火烧屁屁喽'], ['黄忠', '周日被我射熄火了'], ['鲁班', '上上下下左左右右']])
def test_parametrize02(hero_name, word):
print(f'{hero_name}的台词是{word}')
============================= test session starts ==============================
collecting ... collected 3 items
test_parametrize02.py::test_parametrize02[\u5b89\u742a\u62c9-\u706b\u70e7\u5c41\u5c41\u55bd]
PASSED [ 33%]安琪拉的台词是火烧屁屁喽
test_parametrize02.py::test_parametrize02[\u9ec4\u5fe0-\u5468\u65e5\u88ab\u6211\u5c04\u7184\u706b\u4e86]
PASSED [ 66%]黄忠的台词是周日被我射熄火了
test_parametrize02.py::test_parametrize02[\u9c81\u73ed-\u4e0a\u4e0a\u4e0b\u4e0b\u5de6\u5de6\u53f3\u53f3]
PASSED [100%]鲁班的台词是上上下下左左右右
============================== 3 passed in 0.02s ===============================
⚠️ 只有一个数组的时候,[]的使用
import pytest
# @pytest.mark.parametrize(key,values)
@pytest.mark.parametrize('hero_name,word',
[['安琪拉', '火烧屁屁喽']])
def test_parametrize02(hero_name, word):
print(f'{hero_name}的台词是{word}')
三、pytest的参数化parametrize参数为字典用法
import pytest
# 参数值为字典形式
@pytest.mark.parametrize('hero', [{'name': '安琪拉'}, {'name': '黄忠'}, {'name': '小乔'}])
def test_parametrize(hero):
print(hero['name'])
============================= test session starts ==============================
collecting ... collected 3 items
test_parametrize02.py::test_parametrize[hero0] PASSED
[ 33%]安琪拉
test_parametrize02.py::test_parametrize[hero1] PASSED
[ 66%]黄忠
test_parametrize02.py::test_parametrize[hero2] PASSED
[100%]小乔
============================== 3 passed in 0.01s ===============================
import pytest
# 参数值为字典形式
@pytest.mark.parametrize('hero',
[{'name': '安琪拉', 'word': '火烧屁屁喽'}, {'name': '黄忠', 'word': '周日被我射熄火了'}])
def test_parametrize(hero):
print(hero['name'])
print(hero['word'])
============================= test session starts ==============================
collecting ... collected 2 items
test_parametrize02.py::test_parametrize[hero0] PASSED
[ 50%]安琪拉 火烧屁屁喽
test_parametrize02.py::test_parametrize[hero1] PASSED
[100%]黄忠 周日被我射熄火了
============================== 2 passed in 0.01s ===============================