Pytest Fixture 参数化
简介
pytest 还支持参数化 fixture,即可以为一个 fixture 提供多个不同的值,让多个测试用例使用不同的测试数据。
这样可以有效减少重复代码,尤其适合测试多组输入输出的情况。
基本语法
params
:传入一个列表,包含 Fixture 的不同参数。request.param
:可以在 Fixture 函数中通过request.param
获取当前参数。
import pytest
@pytest.fixture(params=[param1, param2, param3, ...])
def fixture_name(request):
return request.param
单参数
import pytest
@pytest.fixture(params=[1, 2, 3])
def number(request):
return request.param
def test_number(number):
assert number > 0
运行结果:
多参数
import pytest
@pytest.fixture(params=[
["selenium", 123],
["appium", 123456]
])
def login(request):
print(f"用户名:{request.param}")
yield request.param
def test_demo(login):
print(f"demo case: 数据为: {login}")
运行结果:
fixture 与 parametrize 结合实现参数化
- 通过
parametrize
中设置indirect=True
可以将参数传递到指定的 Fixture 中
import pytest
@pytest.fixture
def database(request):
# database fixture 接收 request.param,返回数据库连接字符串。
db_name = request.param
return f"连接数据库: {db_name}"
# @pytest.mark.parametrize 使用 indirect=True 将参数传递给 database fixture
@pytest.mark.parametrize(
"database",
["test_db1", "test_db2"],
indirect=True
)
def test_database_connection(database):
print(f"database = {database}")
assert "连接数据库" in database
运行结果:
总结
- Pytest Fixture 参数化的使用。