pytest 中fixture参数化到底什么时候使用?
pytest 中fixture参数化到底什么时候使用?
背景
都知道我们可以把前置准备和后置处理放到fixture
中,那么fixture
参数化是用来干什么的?
官方教程
# content of conftest.py
import pytest
import smtplib
@pytest.fixture(scope="module", params=["smtp.gmail.com", "mail.python.org"])
def smtp_connection(request):
smtp_connection = smtplib.SMTP(request.param, 587, timeout=5)
yield smtp_connection
print("finalizing {}".format(smtp_connection))
smtp_connection.close()
这里参数化用来处理不同的邮箱地址,那么一个用例就会执行两次,我们日常自动化测试的时候怎么用?
目前我能想到的就是一套用例在不同的测试环境执行,比如params=["test.com", "dev.com"]
,或者是在不同浏览器中执行同一个用例params=["ie", "chrome"]
。
代码实现
# content of conftest.py
import pytest
@pytest.fixture(params=['test', 'dev'])
def myfixture(request):
print('\n')
print('前置条件正在执行')
env = request.param
print(env)
yield env
print('后置条件正在执行')
自动化用例:
# content of test_1.py
def test_1(myfixture):
print('正在执行自动化用例')
env = myfixture
print('执行中的env:%s' % env)
执行结果:一个用例执行两遍,分别在不同的测试环境
============================= test session starts ==============================
collecting ... collected 2 items
test_.py::test_1[test]
前置条件正在执行
test
PASSED [ 50%]正在执行自动化用例
执行中的env:test
后置条件正在执行
test_.py::test_1[dev]
前置条件正在执行
dev
PASSED [100%]正在执行自动化用例
执行中的env:dev
后置条件正在执行
============================== 2 passed in 0.01s ===============================