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 ===============================
posted @ 2022-12-02 10:11  Tarzen  阅读(45)  评论(0编辑  收藏  举报