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

Фотография

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


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

#1 devepshko

devepshko

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

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

Отправлено 15 мая 2019 - 15:26

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

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

 

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

 

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

 

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

 

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

 

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

 

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

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

 

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


  • 0

#2 Vasiliy

Vasiliy

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 15 мая 2019 - 15:42

А в чем вопрос сделать так как вам удобно самим?
Есть боевой дамп - разворачивайте (с учетом политики обезличивания). Можете создать данные перед тестом - создавайте. Только напрпямую в БД и гарантировано. Только неНе надо делать зависимые тесты вида "создать профиль через интерфейс", "найти созданный профиль".
Мы, в свое время, вообще виртуалки необходимые поднимали для тестов и убивали потом.
  • 1

#3 devepshko

devepshko

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

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

Отправлено 15 мая 2019 - 16:24

А в чем вопрос сделать так как вам удобно самим?
Есть боевой дамп - разворачивайте (с учетом политики обезличивания). Можете создать данные перед тестом - создавайте. Только напрпямую в БД и гарантировано. Только неНе надо делать зависимые тесты вида "создать профиль через интерфейс", "найти созданный профиль".
Мы, в свое время, вообще виртуалки необходимые поднимали для тестов и убивали потом.

Просто велосипедить не хочется (= Вот и подумал, может есть какие-то практики готовые, как это принято делать, чтобы потом не переделывать


  • 0

#4 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 15 мая 2019 - 17:21

"Практики готовые" хорошо работают на типовом проекте, разработанные в этой-же конторе для таких-же типовых проектов. Все остальное - натягивание совы на глобус.

 

Подготовкой тестовых данных должна заниматься отдельная подсистема. Тесты в своих проверках должны оперировать объектами выданными этой подсистемой.


  • 1

#5 devepshko

devepshko

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

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

Отправлено 15 мая 2019 - 17:25

Подготовкой тестовых данных должна заниматься отдельная подсистема. Тесты в своих проверках должны оперировать объектами выданными этой подсистемой.

 

Не могли бы привести пример, если не затруднит?


  • 0

#6 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 15 мая 2019 - 20:43

создаете отдельный класс TestDataManager который несет в себе методы работы с тестовыми данными, которые вам необходимы, типа: генерации/ чтения из файла/ заливки в тестируемую систему/ валидации тестовых данных.


  • 0

#7 devepshko

devepshko

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

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

Отправлено 15 мая 2019 - 21:37

Важное замечание: я немного напутал. Под тестовыми данными я предполагал начальные данные. Пардон.


  • 0

#8 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 16 мая 2019 - 06:44

Важное замечание: я немного напутал. Под тестовыми данными я предполагал начальные данные. Пардон.

 

а чем ваши начальные данные отличаются от тестовых? ммм? =)

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


  • 0

#9 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 16 мая 2019 - 08:18

 

 

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

проблема может быть ещё и в том, что вы тестируете всё на самом верхнем уровне, а не по пирамиде тестов

 

например функция поиска по базе - покройте его низкоуровневыми тестами с базой данных, сама интерфейсная форма поиска - добавьте компонентных тестов

 

тогда на Селениуме Вам уже намного легче будет


  • 0

#10 devepshko

devepshko

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

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

Отправлено 16 мая 2019 - 11:28

 

Важное замечание: я немного напутал. Под тестовыми данными я предполагал начальные данные. Пардон.

 

а чем ваши начальные данные отличаются от тестовых? ммм? =)

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

 

 

Тестовые данные используются разные. Я имею ввиду, данные, необходимые для выполнения теста. Например, если тестируем удаление профиля, то тут начальные данные - это наличие самого профиля.

 

 

 

 

 

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

проблема может быть ещё и в том, что вы тестируете всё на самом верхнем уровне, а не по пирамиде тестов

 

например функция поиска по базе - покройте его низкоуровневыми тестами с базой данных, сама интерфейсная форма поиска - добавьте компонентных тестов

 

тогда на Селениуме Вам уже намного легче будет

 

 

Менеджер сказал, что на текущем проекте тестируем только UI (= Более низкоуровневые тесты делают программисты (юнит-тесты) и разработчики БД.


  • 0

#11 Сергей

Сергей

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 245 сообщений
  • Город:Москва

Отправлено 16 мая 2019 - 12:13

По-правильному не найдете, docker, подготовка ТО без UI, api, sql, эталонная БД, тестовые данные в другой БД, в ексель, csv.... С удовольствием бы тоже посмотрел, как по-правильному.


  • 0

"Если ты хороший плотник и делаешь красивую тумбочку, ты не будешь прибивать сзади фанеру, даже несмотря на то, что задняя часть повернута к стене, и никто ее не видит. Ты будешь хорошо спать ночью, только если тебе удалось воплотить в своем произведении эстетическую красоту и качество." © Стив Джобс


#12 Сергей

Сергей

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 245 сообщений
  • Город:Москва

Отправлено 16 мая 2019 - 12:17

Более того, потом не удивляйтесь, подготовка нужных тестовых данных принесет больше пользы, например для ручников, ежели сами автотесты.


  • 1

"Если ты хороший плотник и делаешь красивую тумбочку, ты не будешь прибивать сзади фанеру, даже несмотря на то, что задняя часть повернута к стене, и никто ее не видит. Ты будешь хорошо спать ночью, только если тебе удалось воплотить в своем произведении эстетическую красоту и качество." © Стив Джобс


#13 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 16 мая 2019 - 12:47

 

 

Менеджер сказал, что на текущем проекте тестируем только UI (= Более низкоуровневые тесты делают программисты (юнит-тесты) и разработчики БД.

ну а зачем Вам тогда проверять Селениумом все эти результаты запроса, если всё уже проверено тестами базы данных разработчиками? зачем проверять всё это заполнение формы если оно уже должно быть покрыто компонентными тестами?

 

Вам надо расслабиться и просто создать Е2Е тест который тыкнет форму и проверит что она работает, только и всего. Зачем тестировать то, что уже протестировано на более низком уровне?

 

а профиль создавайте через базу прямо либо через РЕСТ, Вам выше уже предложили


  • 0

#14 devepshko

devepshko

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

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

Отправлено 16 мая 2019 - 14:25

ну а зачем Вам тогда проверять Селениумом все эти результаты запроса, если всё уже проверено тестами базы данных разработчиками? зачем проверять всё это заполнение формы если оно уже должно быть покрыто компонентными тестами?

Вам надо расслабиться и просто создать Е2Е тест который тыкнет форму и проверит что она работает, только и всего. Зачем тестировать то, что уже протестировано на более низком уровне?

 

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

 

К тому же низкоуровневые тесты покрывают только базовую часть. Т.е. получается наоборот все: UI тесты должны покрывать все, а низкоуровневые - только основное самое (если говорить про тесты БД - то, что от нее вообще приходит ответ какой-то, а что в этом ответе - уже проблема UI тестов =)


  • 0

#15 Vasiliy

Vasiliy

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 16 мая 2019 - 14:57

При попытке покрыть автоматищацией через UI всё вы убьетесь...
Вы спрашивали как правильно. Так вот это не правильно)
  • 1

#16 Vasiliy

Vasiliy

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 16 мая 2019 - 15:09

Вот это почему так?
"Т.е. получается наоборот все: UI тесты должны покрывать все, а низкоуровневые - только основное самое (если говорить про тесты БД - то, что от нее вообще приходит ответ какой-то, а что в этом ответе - уже проблема UI тестов =)"

Вы переворачиваете пирамиду тестов с ног на голову и говорите нам, что не хотите изобретать велосипед.. Вы его уже построили, при этом на квадратных колесах и пытаетесь ехать на нем по вертикальной плоскости)
  • 1

#17 Vasiliy

Vasiliy

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 16 мая 2019 - 15:12

"Когда делаем тот же запрос из интерфейса, то скрипт подгружает список полей формы, и в зависимости, какое количество полей он подгрузил, отправляется запрос, содержащий только загруженные поля. Например, мы сохранили поиск по полям имя-фамилия, а когда его запускаем из сохраненных, то в списке полей подгрузилось только поле "имя" и запрос к бд содержит только поле "имя". Результат другой."
Вот тут вам нужен тест сохранения и повтора поиска. А вы пытаетесь из него тест поиска по БД.
  • 0

#18 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 16 мая 2019 - 16:34

 

 

"Когда делаем тот же запрос из интерфейса, то скрипт подгружает список полей формы, и в зависимости, какое количество полей он подгрузил, отправляется запрос, содержащий только загруженные поля. Например, мы сохранили поиск по полям имя-фамилия, а когда его запускаем из сохраненных, то в списке полей подгрузилось только поле "имя" и запрос к бд содержит только поле "имя". Результат другой."

запрос в БД содержащий разные поля должен как раз тестироваться низкоуровневыми тестами, один тест будет слать только имя и фамилию, другой адрес и т.п.

 

когда в форме неправильно данные восстановились из сохраненного запроса - тут вообще компонентные тесты нужны, которые быстренько Вам проверят разные варианты

 

про перевернутую пирамиду тестов это в точку!


  • 0

#19 Vasiliy

Vasiliy

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 27 мая 2019 - 07:42

Что решили делать?
  • 0

#20 devepshko

devepshko

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

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

Отправлено 27 мая 2019 - 11:49

Что решили делать?

 

Все новые тесты получают тестовые данные из отдельных классов. 1 класс на группу (например, Поиск, Профиль...).

 

С объектами тестов (профили, записи и пр, что тест будет открывать, редактировать, удалять) - пока что в процессе обдумывания, но скорее всего будут задачи в Jenkins по инжекту в БД, т.к. вручную это все нереально делать каждый раз (=


  • 0


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

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