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

database
test-data
java
junit
webdriver
Теги: #<Tag:0x00007fedbba97c10> #<Tag:0x00007fedbba979b8> #<Tag:0x00007fedbba97800> #<Tag:0x00007fedbba97670> #<Tag:0x00007fedbba974b8>

(Ruslan Khivrych) #1

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


(Dzmitry Ihnatsyeu) #2

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


(Ruslan Khivrych) #3

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


(Dzmitry Ihnatsyeu) #4

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


(Михаил Братухин) #5

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


(rmerkushin) #6

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

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


(Ruslan Khivrych) #7

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

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

(Yurij Litvin) #8

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


(Ruslan Khivrych) #9

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


(rmerkushin) #10

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


(Михаил Братухин) #11

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

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

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

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


(Ruslan Khivrych) #12

спасибо