10、fixture参数化

放肆的年华 提交于 2019-11-30 14:29:40

fixture的参数可以解决大量重复代码工作,比如数据库的连接、查询、关闭等.同样可以使用参数化来测试多条数据用例

例一、

import pytest


@pytest.fixture(params=[("redis", "6379"), ("elasticsearch", "9200")])
def params(request):
    return request.param


@pytest.fixture()
def db(params):
    print(f"\nuse to connection: {params}")
    yield
    print(f"\nclose to connection:{params}")


@pytest.mark.usefixtures("db")
def test_demo():
    assert 1 == 1

运行结果:

╰ pytest -v -s test_data.py
======================================================= test session starts ========================================================
platform darwin -- Python 3.7.4, pytest-4.4.0, py-1.8.0, pluggy-0.13.0 -- /Users/zhouwanghua/Code/Leyan/python/robocop/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.7.4', 'Platform': 'Darwin-18.6.0-x86_64-i386-64bit', 'Packages': {'pytest': '4.4.0', 'py': '1.8.0', 'pluggy': '0.13.0'}, 'Plugins': {'bdd': '3.1.0', 'html': '1.20.0', 'metadata': '1.8.0'}}
rootdir: /Users/zhouwanghua/Code/Leyan/robocop, inifile: pytest.ini
plugins: bdd-3.1.0, html-1.20.0, metadata-1.8.0
collected 2 items                                                                                                                  

test_data.py::test_demo[params0] 
use to connection: ('redis', '6379')
PASSED
close to connection:('redis', '6379')

test_data.py::test_demo[params1] 
use to connection: ('elasticsearch', '9200')
PASSED
close to connection:('elasticsearch', '9200')


===================================================== 2 passed in 0.03 seconds =====================================================

例二、

import pytest


@pytest.fixture(params=[1, 2])
def data(request):
    """
    :param request:<class '_pytest.fixtures.SubRequest'>
    """
    return request.param


def test_data(data):
    print(f"data:{data}")

运行结果:

╰ pytest -v -s test_data.py
======================================================= test session starts ========================================================
platform darwin -- Python 3.7.4, pytest-4.4.0, py-1.8.0, pluggy-0.13.0 -- /Users/zhouwanghua/Code/Leyan/python/robocop/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.7.4', 'Platform': 'Darwin-18.6.0-x86_64-i386-64bit', 'Packages': {'pytest': '4.4.0', 'py': '1.8.0', 'pluggy': '0.13.0'}, 'Plugins': {'bdd': '3.1.0', 'html': '1.20.0', 'metadata': '1.8.0'}}
rootdir: /Users/zhouwanghua/Code/Leyan/robocop, inifile: pytest.ini
plugins: bdd-3.1.0, html-1.20.0, metadata-1.8.0
collected 2 items                                                                                                                  

test_data.py::test_data[1] data:1
PASSED
test_data.py::test_data[2] data:2
PASSED

===================================================== 2 passed in 0.02 seconds =====================================================
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!