С первых строк хотелось бы уточнить, что речь идет не о тестировании самой базы данных. Selenium — это инструмент для выполнения функциональных тестов с помощью браузеров и точно не лучшее решение для тестирования баз данных. Для проверки состояния данных в базе существуют специальные библиотеки. В этой же статье рассматриваются случаи когда для выполнения функциональных тестов необходимо сравнивать данные пользовательского интерфейса с данными, которые хранятся в БД тестируемого приложения, либо поместить перед выполнением теста необходимые данные в базу.
Для организации вышеперечисленного в ваших тестах можно выбрать различные подходы: подключаться к БД напрямую, воспользоваться библиотекой DBUnit или использовать ORM. Выбор средства зависит от того насколько широко и часто необходимо использовать БД в тестах.
Если БД будет использоваться в единичных случаях (например, для выборки конкретных отдельных значений), то использование ORM и подключение дополнительных библиотек вряд ли будет оправданным. В таких случаях можно создать класс, в котором организовано подключение с помощью JDBC Connector, и реализовать в нем методы для выборки данных. Пример соединения с базой MySql и выборки данных:
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/db_name", "user", "password"); if (conn == null) { System.out.println("Нет соединения с БД!"); System.exit(0); } Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM users"); while (rs.next()) { System.out.println(rs.getRow() + ". " + rs.getString("firstname") + "\t" + rs.getString("lastname")); } stmt.close();
Для приведенного примера понадобиться MySQL Connector/JDBC, последнюю версию которого можно найти здесь.
Если вам необходимо перед вызовом каждого теста загружать данные в базу данных, а после выполнения очищать их, то DBUnit будет хорошим выбором для решения подобной задачи.
DBUnit — расширение JUnit, которое приводит базу данных в определенное состояние между вызовами тестов. Если для написания своих тестов вы используете JUnit, то это решение будет особенно удачно. DBUnit позволяет описывать состояние базы данных без привязки к физическим типам данных — в виде набора данных XML.
Пример Flat XML:
<!DOCTYPE dataset SYSTEM "my-dataset.dtd"> <dataset> <TEST_TABLE COL0="row 0 col 0" COL1="row 0 col 1" COL2="row 0 col 2"/> <TEST_TABLE COL1="row 1 col 1"/> <SECOND_TABLE COL0="row 0 col 0" COL1="row 0 col 1" /> <EMPTY_TABLE/> </dataset>
Однако это же является своеобразным недостатком. Созданные xml файлы тяжело подготавливать, поддерживать и анализировать в дальнейшем, особенно когда наборов тестовых данных становится много.
Если же речь идет не просто о наполнении БД и есть необходимость оперировать полученными или помещенными в БД данными в ходе выполнения тестов, то стоит задуматься об использовании ORM в проекте тестирования. ORM (Object-relational mapping) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Суть проблемы, которая решается с помощью ORM, заключается в необходимости преобразования объектных структур в приложении в форму, удобную для сохранения в базах данных, а также для решения обратной задачи — развертывания реляционной модели в объектную, с сохранением свойств объектов и отношений между ними. На сегодняшний день для большинства языков программирования разработаны как коммерческие решения, так решения с открытым исходным кодом. Одним из бесплатных решений является Hibernate — библиотека для языка программирования Java. Hibernate освобождает разработчика от значительного объёма программирования по обеспечению хранения объектов в реляционной базе данных и обеспечивает прозрачное сохранение POJO. Mapping Java классов с таблицами базы данных осуществляется с помощью Java-аннотаций, также обеспечена возможность по организации отношения между классами(«один-ко-многим»,«многие-ко-многим»). Более подробно использование Hibernate описано в рубрике «Hibernate ORM».
Very nice site!