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

devepshko

Регистрация: 05 мая 2018
Offline Активность: 21 ноя 2019 12:02
-----

Мои темы

Невозможность взаимодействия с элементом DOM

23 мая 2019 - 12:14

Доброго дня!

 

Так получилось, что я занимаюсь автоматизацией тестирования в нашей компании. Тесты прогоняются на 4 основных браузерах: Chrome, Firefox, Edge, Safari, в качестве инструмента. Я использую связку Selenium+Pytest.

 

И вот при подготовке одного из тестов я обнаружил, что он всегда падает в Safari, когда во всех остальных браузерах проходит успешно. Начал разбираться, оказалось, что причина - то, что не может быть совершен клик по кнопке, которая скрывает/раскрывает спойлер. Сначала подумал, что дело в загрузке, и добавил WebDriverWait. Ожидание отрабатывает, т.е. драйвер видит, что элемент появился, но действие с ней выполнить не может - выбрасывает эксцепшон:

selenium.common.exceptions.ElementNotInteractableException: Message:
C:\python\lib\site-packages\selenium\webdriver\remote\errorhandler.py:242: ElementNotInteractableException

Похожая ерунда была с другим тестом в Эдж: там есть список подкатегорий, нужно навести на любую, чтобы появилось дополнительное меню. При прогоне теста, первый элемент работает как надо, а последующие становятся неактивными. И это только в тестах, в реальности все работает.

 

И отсюда у меня возникает вопрос: с чем связано такое поведение? Есть ли воркараунд, если кто сталкивался?


Как подготовить тестовые данные для автотестов?

15 мая 2019 - 15:26

Коллеги, доброго дня!

Немного предыстории: есть старый проект, который пока что поддерживается, для который тестировался ранее исключительно вручную без какого-то ни было тест-плата - просто все подряд.

 

Для тестирования на тестовой площадке выкладывается новый релиз, который заменит в последствии текущую версию на бою. Т.е., тестовых данных там нет по определению. На этой же тестовой версии пишутся автотесты и, как вы уже догадались, чтобы что-то протестировать, приходится изощряться с подбором данных.

 

Например, есть поиск по базам данных. Есть автотест, который заполняет все поля формы и проверят, что поиск выполнен удачно. Критерием удачности здесь является: 1) появляется таблица с результатом; 2) таблица содержит данные в колонках. Но есть сложности: 1) БД обновляется и то, что выдавало результат раньше, с новым релизом может не выдавать ничего - тест фейлится; 2) Нет возможности проверить, что в таблице с результатом находятся все подходящие под критерии фильтра данные.

 

Или вот тесты с профилем. Подразумевается, чтобы тестировать чтото в профиле, нужно, чтобы этот профиль был. И сейчас мне приходится уповать на то, что тест по созданию профиля не упадет, тогда и тесты внутри профиля будут выполняться. А если упадет...

 

Параллельно сейчас делается версия проекта 2.0. Для нее хочется сделать все более-менее грамотно с организационной точки зрения. Я понимаю, что текущий подход неверен и крайне хрупок, тесты получаются зависимые друг от друга. 

 

Я понимаю, что нужно тестировать, что с чем сравнивать, но у меня нет ожидаемого результата в виде заранее определенных данных в БД (профили, результаты поиска и т.п.). И вот здесь я подхожу к вопросу: вот у нас случился релиз, нужно перформить автотесты, есть площадка для тестирования. Она уже должна включать все необходимые тестовые данные? Или же она может быть развернута как и сейчас (копия боевой с улучшениями), но перед каждым тестом (где требуется наличие тестовых данных) мы делаем какой-то инжект в БД с нужными нам данными? Или как это вообще происходит по-правильному?

 

Для мержа используем гитлаб, там же делается сборка.

Для тестов используется связка Python (Pytest) + Selenium WD

 

Очень прошу не рекомендовать найти толкового спеца - вопрос не в этом, а в том, как наладить процесс самостоятельно в конкретном случае (=


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

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?

20 февраля 2019 - 14:21

Доброго дня!
Нужен совет, а еще лучше - много советов, от людей, занимающихся автоматизацией тестирования веб-приложений.

Суть проблемы: есть компания, предоставляющая своим клиентам удобный доступ к данным, агрегированным из различных источников и БД. Есть команда разработчиков, поддержка, системные администраторы, администраторы БД.... НО нет тестировщиков. Тестированием занимаются все, как бы странно это не звучало.
И вот тут, мой дорогой Фродо, возникает идея автоматизации тестирования. Вопрос: как грамотно организовать эту автоматизацию, если:
1) нет тест кейсов, как таковых. Тестирование всегда выполнялось по принципу: есть функционал, который абстрактно отсортирован по значимости, и его проверяем.
2) нет никакой документации. Максимум: краткие заметки программистов по новым фичам и исправлениям в каждом новом билде.
3) есть Jira, служащая баг-трекером
4) нет полноценной тестовой версии продукта: есть бой и тестовые сборки (код), но БД на всех 1

В моем представлении, автоматизируются тест-кейсы, НО, если их нет, то нужно сначала из добавить, чтобы было понятно, что вообще нужно автоматизировать. Для этого приспособил TestLink. И начал добавлять туда позитивные тесты (т.к. есть 4й пункт), после готовности ~50% тест-кейсов, начал параллельно заниматься автоматизацией. Также сейчас с программистами обсуждается вопрос развертывания полноценного тестового окружения с тестовой БД для получения ожидаемых результатов, а не гадания по кофейной гуще.

И вот тут (хотя этим надо было задаться раньше) возник вопрос, правильный ли подход я выбрал? И как бы стоило/стоит строить процесс вообще? 

Интересует в первую очередь реальные примеры, либо материалы, которые можно использовать за основу.

Заранее премного благодарен.