Перейти к содержимому

Фотография

Кастомизация параметризации в pytest


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 devepshko

devepshko

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Sergei

Отправлено 25 марта 2019 - 19:08

Доброго дня!

В одной из лекций Алексея Баранцева говорится о том, как можно организовать передачу тестовых данных из файла. Но у меня возник вопрос: если у меня есть большое количество наборов для одного и того же теста. Например, есть множество вкладок поиска, для каждой из которых свой набор данных, но тестируют они все 1 функциональность - поиск.

На текущий момент получается, что для каждого набора данных нужно создавать свой файл с данными. Я же хочу сделать следующее: поместить все наборы данных в 1 файл, а в тестовых функциях указывать, какой набор использовать. Отсюда вопрос: как это реализовать?

 

conftest:

def pytest_generate_tests(metafunc):
    for fixture in metafunc.fixturenames:
        if fixture.startswith("data_"):
            module = load_from_module(fixture[5:])
            metafunc.parametrize(fixture, module, ids=[repr(id) for id in module])


def load_from_module(module):
    return importlib.import_module("data.%s" % module).testdata # get the rest of data_ from test method param and look for in data dir

файл с данными:

from model.search_export import *

dn_dn = [
    SearchExportDB(id="0001", result_type="1", result_number=3, format_type="pdf", expected_result=True),
    SearchExportDB(id="0002", result_type="1", result_number=3, format_type="doc", expected_result=True),
    SearchExportDB(id="0003", result_type="1", result_number=3, format_type="csv", expected_result=True),
    SearchExportDB(id="0004", result_type="1", result_number=0, format_type="csv", expected_result=False),
    SearchExportDB(id="0005", result_type=None, result_number=3, format_type="csv", expected_result=False),
    SearchExportDB(id="0006", result_type="2", result_number=3, format_type=None, expected_result=False),
    SearchExportDB(id="0007", result_type="2", result_number=3, format_type="csv", expected_result=True),
    SearchExportDB(id="0008", result_type="2", result_number=3, format_type="pdf", expected_result=True),
    SearchExportDB(id="0009", result_type="2", result_number=3, format_type="doc", expected_result=True),
    SearchExportDB(id="0010", result_type="2", result_number=0, format_type=None, expected_result=False)
]

dn_rec = [
    SearchExportDB(id="0001", result_type="1", result_number=3, format_type="pdf", expected_result=True)
]

тесты:

def test_pro_search_export_data_dn_dn(app, data_search_export, data_search_export_donations):
    searchexport = data_search_export
    searchdata = data_search_export_donations
    app.reload_page()
    app.dbset.open_search_page_donations()
    app.dbset.open_tab_us()
    app.dbset.open_dn_tab_us_donor()
    app.donations.perform_search_tab_us_donor(searchdata)
    run_export_search_list = app.searchexport.run_export_search(searchexport)
    result = app.searchexport.check_saved_file(run_export_search_list, searchexport, removeall=True)
    assert result == True

def test_pro_search_export_data_dn_co(app, data_search_export, data_search_export_donations):
    searchexport = data_search_export
    searchdata = data_search_export_donations
    app.reload_page()
    app.dbset.open_search_page_donations()
    app.dbset.open_tab_us()
    app.dbset.open_dn_tab_us_recipient()
    app.donations.perform_search_tab_us_donor(searchdata)
    run_export_search_list = app.searchexport.run_export_search(searchexport)
    result = app.searchexport.check_saved_file(run_export_search_list, searchexport, removeall=True)
    assert result == True

Т.е., можно ли как-то, указывая, например, data_search_export__dn_dn, конкретизировать, из какого объекта брать данные для конкретного теста?

 

Заранее благодарен


  • 0

#2 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 26 марта 2019 - 11:07

https://docs.pytest....rizing-fixtures


  • 0

#3 devepshko

devepshko

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Sergei

Отправлено 26 марта 2019 - 14:24

 

я это читал, но не совсем то, что нужно было.

 

В итоге наименее уродливый вариант, но зато самый простой оказался:

@pytest.mark.parametrize("WHERE", WHAT, ids=[repr(id) for id in WHAT])

+ импорт файла с тестовыми наборами


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных