Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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



Software-Testing.Ru - портал тестировщиков  

Новые темы форума тестировщиков


Кастомизация параметризации в pytest
2019-03-25 22: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, конкретизировать, из какого объекта брать данные для конкретного теста?

 

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



© 2010 | Software-Testing.Ru


В избранное