pytest参数化夹具-来自json的参数?

Eri*_*ang 3 python json fixture pytest

来自pytest.org的示例代码,是否可以从json文件加载参数?

# content of conftest.py 
import pytest
import smtplib

@pytest.fixture(scope="module",
            params=["smtp.gmail.com", "mail.python.org"])
def smtp(request):
    smtp = smtplib.SMTP(request.param)
    def fin():
        print ("finalizing %s" % smtp)
        smtp.close()
    request.addfinalizer(fin)
    return smtp
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情

# conftest.py
@pytest.fixture(scope="module", params=a_list_var)
def fixture_a(request):

    # some.py or anywhere?
    a_list_var = load_json(parameter_file_path)

    # test_foo.py
    ... 
    def test_foo(fixture_a)
    ...
Run Code Online (Sandbox Code Playgroud)

Łuk*_*ski 5

给定json文件:

["smtp.gmail.com", "mail.python.org"]
Run Code Online (Sandbox Code Playgroud)

您可以简单地将其加载到Python对象,然后将该对象传递给装饰器。

import json
import pytest
import smtplib

def load_params_from_json(json_path):
    with open(json_path) as f:
        return json.load(f)

@pytest.fixture(scope="module", params=load_params_from_json('path/to/file.json'))
def smtp(request):
    smtp = smtplib.SMTP(request.param)
    def fin():
        print ("finalizing %s" % smtp)
        smtp.close()
    request.addfinalizer(fin)
    return smtp
Run Code Online (Sandbox Code Playgroud)