2015-12-17 2 views
2

Пример кода от pytest.org, можно ли загрузить параметры из json-файла?pytest параметризованный светильник - параметры от 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 

Я хотел бы сделать что-то вроде

# 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) 
    ... 

ответ

3

Данный файл JSon:

["smtp.gmail.com", "mail.python.org"] 

Вы можете просто загрузить его в объект 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 
+0

Спасибо, я в конечном итоге с помощью [pytest сгенерируйте-тесты] (https://pytest.org/latest/parametrize.html#basic-pytest-generate-tests-example) для этого. –

0

Спасибо, я в конечном итоге использовала pytest-generate-tests для этого, мой путь будет JSON быть изменен в зависимости от теста.

# test_foo.py 
def test_foo(param) 

# conftest.py 
def pytest_generate_tests(metafunc): 
    ... my <same_name_as_test>.json 
    ... get info from metafunc.module 
    with open(param_full_path,'r') as f: 
     obj = json.load(f) 
     metafunc.parametrize("param", obj)