Python
pytest

pytestのデコレータに引数を渡す

pytest URL
xdistの-nオプションについて https://qiita.com/cielavenir/items/3f3319f3fa153c16c703
デコレータの作り方 https://qiita.com/cielavenir/items/542f7eaa612c6bb9ed90
デコレータに引数を渡す https://qiita.com/cielavenir/items/2c971ca4bc138c375d17

デコレータの中身に引数を渡すには、ダミーのフィクスチャを用意し、シグネチャからそのフィクスチャのインデックスを取得、argsを書き換えれば良い。

To pass arguments to pytest decorator, prepare dummy fixture and let the wrapper get the argument index using signature, and overwrite args.

overwrite_fixture.py
import pytest
import decorator

try:
    from inspect import signature
except ImportError:
    from funcsigs import signature

@pytest.fixture(scope='module')
def var1():
    return 1

@pytest.fixture(scope='module')
def var2():
    return 2

def wrap(func):
    def wrapper(func,*args):
        sig = signature(func)
        idx = list(sig.parameters).index('var1')
        arglst = list(args)
        result = []
        for e in [10,20]:
            arglst[idx] = e
            result.append(func(*arglst))
        assert result[1]-result[0]==10
    return decorator.decorator(wrapper,func)

@wrap
def test_0(var1,var2):
    return var1