t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как сделать проверку о существовании данных в базе данных перед их созданием?

Теги: #<Tag:0x00007f9af9b43b60> #<Tag:0x00007f9af9b439f8> #<Tag:0x00007f9af9b43818> #<Tag:0x00007f9af9b43660> #<Tag:0x00007f9af9b43548>

я в атоматизации не очень давно.
но появилась идея: перед созданием какой-либо сущности делать запрос в базу и проверять существует ли такая сущность в базе. Если не существует - продолжать создание. Пишу тесты на Java+JUnit, использую Page Object

а где вопрос? если вы хотите узнать, как реализовать создание объектов, то вам подойдет паттерн Factory: внутри уже будете определять существует ли такая сущность: если да, то отдаете ее, если нет - вызываете соотвествующий контроллер для создания новой сущности.
Ваш высокоуровневый код не должен заботиться о деталях создания сущности судя по идее, которую вы предложили

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

Как вы создаете сущности если их нет?

Не очень понятно про проверку сущностей по БД и для чего это делаете.
Какой тип БД, какие сущности, насколько они разнообразны, а что будет происходить, если сущность присутствует в БД, каким образом делаете создание новых сущностей?

Опишите более точно для чего вы это делаете, что за сущности и как их создаёте.

P.S.: если это у вас просто предусловие и вы хотите проверить не возникнут ли коллизии при записи в БД, то советую просто очищать перед тестами таблицы которые нужны и создавать все тестовые данные самому

1 Симпатия

пример: создание пользователя в системе.
алгоритм действий:

  1. открыть страницу
  2. перейти на страницу регистрации
  3. перед введением логина, проверить есть ли такой в базе данных.
  4. если нет - ввести логин. если есть - вывести сообщение, что пользователь уже существует и ввести другой логин.
    Инструменты:
    Java, MsSql, Webdriver

JDBC не подходит?

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

А подскажите пожалуйста, а в чем собсно смысл? Вы тестируете на прод данных которые меняются периодически?
Если дело все таки в прод данных, то лучше написать какой нибудь скрипт, который предварительно сделает выборку username\password из БД и сложит их в конфиг файл для тестов, чем захламлять сами тесты подобной логикой.

Так. Вроде бы стало чуть понятнее. Но теперь другой вопрос к самому тестовому сценарию.

Зачем вам проверять в БД наличие пользователя перед вводом? Чего вы этим добьетесь? Если вводить уже существующего пользователя, то само приложение должно по идее будет сделать проверку, что такой логин занят и вернуть ошибку. Вы же должны будете в тесте считать ошибку и убедиться, что приложение не позволило создать пользователя с имеющимся в БД пользователем. Это так называемый “негативный” сценарий.

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

Если же вы хотите именно создать клиента, и у вас уже не “негативный”, а “позитивный” сценарий, то вам просто нужно проверить данный логин по базе и убедиться, что в ней такой логин еще не занят. Либо вообще чистить БД перед запуском (но такое не везде прокатит! тут лучше действовать без фанатизма). А лучше создать какой-то генератор “случайных” логинов или словарь и например, вычищать из БД перед тестом эти логины или переберать до тех пор, пока не попадется свободный.

спасибо