как протестировать одну и ту же функцию из разных модулей с помощью pytest

Я хотел бы запустить свой тест для функции из разных модулей (в одном модуле я определяю функцию, которая вызывает некоторый код C++, а в другом модуле у меня есть та же функция, которая вызывает другой код). Как это сделать с помощью py.test?


person d_j    schedule 26.06.2014    source источник
comment
Ознакомьтесь с документацией и пользовательскими приборами. разделы параметризующие-тесты и метафунк-объект   -  person User    schedule 26.06.2014
comment
Спасибо за предложение, я решил использовать pytest_generate_tests(metafunc), и это работает.   -  person d_j    schedule 27.06.2014
comment
Сделайте это ответом и опубликуйте свой код для сообщества и ссылку на материал. Спасибо!   -  person User    schedule 27.06.2014
comment
хорошо, я сделал это, но изменил исходный вопрос, чтобы он лучше соответствовал решению, которое я наконец использую.   -  person d_j    schedule 29.06.2014


Ответы (1)


Вы можете использовать metafunc и создать файл conftest.py с функциями pytest_addoption и pytest_generate_tests:

def pytest_addoption(parser):
    parser.addoption("--libname", action="append", default=[],
                     help="name of the tested library")

def pytest_generate_tests(metafunc):
    if 'libname' in metafunc.fixturenames:
        metafunc.parametrize("libname", metafunc.config.option.libname)

И в функции в вашем файле tests.py вы можете использовать importlib и запросить имя библиотеки:

def test_import(libname):
    import importlib
    tested_library = importlib.import_module(libname)
    .......

Теперь, запуская тест, вы должны указать имя модуля, который хотите протестировать: py.test tests.py --libname=your_name1 (вы также можете добавить --libname=your_name2)

person d_j    schedule 29.06.2014