fixture params

@pytest.fixture 定義在fixture 內 透過params去定義

params 可以傳入object or string value

@pytest.fixture(scope="function", params=["opt1", "opt2"])
def optmod(request):
    return request.param
def test_params(optmod):
    print(optmod)

得到的結果是這樣

簡單來說 他可以透過先定義參數 透過fixture的方法傳入

也可以用mark fixture 去取其他fixture的值回傳回來

import pytest

@pytest.fixture(params=[
    pytest.mark.fixture('one'),
    pytest.mark.fixture('two')
])
def some(request):
    return request.param

@pytest.fixture
def one():
    return 1

@pytest.fixture
def two():
    return 2

def test_func(some):
    assert some in [1, 2]

@pytest.mark.parametrize 直接定義在test method上面


import pytest
@pytest.mark.parametrize("test_input,expected", [
    ("3+5", 8),
    ("2+4", 6),
    ("6*9", 42),
])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

這樣的好處是可以針對這個method 去跑特定的參數

透過定義@pytest.mark.parametrize 傳入ARRAY

問題又來了 那我們想要做在最上面conftest要怎麼辦呢?

定義在 conftest

透過conftest.py

此function可以定義產生的參數集合

metafunc 是一個class 裡面可以產生參數的序列

def pytest_generate_tests(metafunc):

下面的範例是 透過讀取fixturename = parametrizeMobileASIACommon 跟他的option決定要產生哪一些測試資料給 parametrizeMobileASIACommon fixture


def pytest_generate_tests(metafunc):
    if 'parametrizeMobileASIACommon' in metafunc.fixturenames:
        if metafunc.config.option.brand=="ASIA":
            envirementParameters = Commonfunction.InitCommonConfig(metafunc.config.option.envirementopt,"Mobile",metafunc.config.option.brand)
        else:
            envirementParameters = pytest.skip("ASIA ONly....")
        metafunc.parametrize("parametrizeMobileASIACommon",envirementParameters)


def test_transferToEMUK(mobileSelenium,parametrizeMobileUKCommon):
    do something.....

可以看到 他可以針對不同的fixture產生不同的東西

https://docs.pytest.org/en/latest/parametrize.html

skip test

透過pytest.skip 裡面帶參數可以將不符合的fixture name skip 掉 避免跑錯test method


def pytest_generate_tests(metafunc):
    if 'parametrizeMobileASIACommon' in metafunc.fixturenames:
        if metafunc.config.option.brand=="ASIA":
            envirementParameters = Commonfunction.InitCommonConfig(metafunc.config.option.envirementopt,"Mobile",metafunc.config.option.brand)
        else:
            envirementParameters = pytest.skip("ASIA ONly....")
        metafunc.parametrize("parametrizeMobileASIACommon",envirementParameters)


def test_transferToEMUK(mobileSelenium,parametrizeMobileUKCommon):
    do something.....

results matching ""

    No results matching ""