pytest-parametrize中使用fixture
测试用例参数化的时候,使用 pytest.mark.parametrize 参数化传测试数据,如果想引用前面不同fixture返回的数据当测试用例的入参。可以使用fixture 参数化 prams 来间接解决这个问题
import pytest
@pytest.fixture()
def a():
return 0
@pytest.fixture()
def b():
return 1
@pytest.fixture(params=['a', 'b'])
def arg(request):
# getfixturevalue 的作用是获取 fixture 的返回值
print('这是入参:', request.getfixturevalue(request.param))
return request.getfixturevalue(request.param)
def test_foo(arg):
assert arg < 2
if __name__ == "__main__":
pytest.main(["-s", "test_17.py"])
使用实例
跑兼容性测试,在Chrome和Firefox上跑同样的功能脚本
import pytest
from selenium import webdriver
# 注:Chrome和Firefox的驱动已添加到环境变量
@pytest.fixture()
def chrome():
driver = webdriver.Chrome()
yield driver
driver.quit()
@pytest.fixture()
def firefox():
driver = webdriver.Firefox()
yield driver
driver.quit()
@pytest.fixture(params=['chrome', 'firefox'])
def driver(request):
return request.getfixturevalue(request.param)
def test_foo(driver):
driver.get("https://blog.csdn.net/IT_heima")
driver.maximize_window()
print(driver.title)
if __name__ == "__main__":
pytest.main(["-s", "test_18.py"])