Генерация тестовых параметров из файла json - PullRequest
0 голосов
/ 22 января 2020

Я бы хотел получить параметры теста настройки и проверки из файла json, который выглядит примерно так:

setup_verify_foo.json
[
{
    "test1" : {
        "setup" : {},
        "verify" : {}
    }
},
{
    "test2" : {
        "setup" : {},
        "verify" : {}
    }
}
]

Я думал о том, чтобы это было в том же каталоге, что и модуль теста, который выглядит что-то вроде:

/tests/foo
  test_foo.py
  setup_verify_foo.json

В test_foo.py я хотел бы иметь тестовый параметр json объектов для test1 и test1. Я думаю что-то вроде:

# in test_foo.py
def test_foo(setup_verify):
  # setup for this test
  setup_verify["setup"]

  # run test
  run_data = run_my_test()

  # get verify data
  setup_verify["verify"]

Я думаю, что мне нужно было бы использовать pytest_generate_tests(metafunc), но не уверен, как это сделать. Это где мне нужна помощь? Я думаю что-то вроде:

# in conftest.py
def pytest_generate_tests(metafunc):
  if "setup_verify" in metefunc.fixturenames:
    # get module path.  How do I do this?
    # get module name.  How do I do this?
    # strip _test and create json file name.
    with open(json_full_path, 'r') as f:
        obj = json.load(f)
        metafunc.parametrize("setup_verify", obj)

1 Ответ

0 голосов
/ 25 января 2020

К вашему сведению, вот как я это решил.

Небольшое изменение в setup_verify. json:

[
{
  "test_description": "This test1 ...",
  "setup" : {},
  "verify" : {}
},
{
  "test_description": "This test2 ...",
  "setup" : {},
  "verify" : {}
}
]

Изменения в ловушке conftest.py pytest_generate_tests(metafunc):

# in conftest.py
def pytest_generate_tests(metafunc):
  if "setup_verify" in metefunc.fixturenames:
    module_path = os.path.dirname(metafunc.module.__file__)
    module_name = os.path.basename(metafunc.module.__file__)
    json_name = module_name.replace('test', 'setup_verify').replace('.py', '.json')
    json_path = os.path.join(module_path, json_name)
    # open json file and parameterize it into test list
    if os.path.isfile(json_path):
      with open(json_path, 'r') as f:
        obj = json.load(f)
        metafunc.parametrize("setup_verify", obj)
      else:
        metafunc.parametrize("setup_verify", [None])    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...