среда, 24 апреля 2013 г.

Как в Maven быстро создать БД по шаблону?

Бывают такие ситуации, когда надо что-то протестировать на предварительно подготовленной БД, потом это все убить, снова подготовить итд итд...

Получаем такую последовательность действий:
  • Создаем БД.
  • Заполняем ее через внешний интерфейс.
  • Выполняем свои тесты.
  • Дропаем все нафик.
  • Снова создаем.
  • Снова заполняем ровно теми же данными, так как нам нужно проверить именно их, но в разных вариантах развития.
  • Выполняем свои тесты
  • ...
Правда, уныло? А, главное, долго!

Когда передо мной встала такая задача, я сначала попробовала ее обойти, написав автотест. Ну а что? Занесла один раз нужное состояние БД в эксельничек и все, доверилась машине. Все-таки, мне стало гораздо спокойнее писать один тест, чем проверять что-то вручную, надежнее оно...

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

Озвучила мысли разработчику и пошла пилить тест. Но что-то у нас с ним не сложилось... Не создавал БД, хоть ты тресни.

Разработчик посмотрел-посмотрел на мои страдания и сделал утилитку, которая заполняет БД по xls (возможны и другие форматы) без дополнительных танцев с бубнами.

Итак, ребята! Если у Вас установлен Maven, пользуйтесь (как же раздражает это дурацкое форматирование в блоге при вставке текста, но уж извините, как есть...).
  1. Создаем pom.xml
  2. Создаем Start.xls 
Создаем БД!

1. В разделе common configurations заполнить данные по схеме БД, которую будем заполнять


<username>test</username>
<password>test</password>
<schema>test_schema</schema>

2. В разделе specific configurations  в параметре src указать путь к файлу

<src>C:\dbunit_load\Start.xls</src>

3. Запустить утилиту

mvn clean package

Ну вот и все (smile)


Настройка pom.xml

Утилита настроена на работу с oracle-драйвером.
Исходник Pom-а, меняем под свою организацию (себя):
  • groupId - the id of the project's group.
  • description - описание
  • url - строка подключения к БД
  • username - логин
  • password - пароль
  • schema - название схемы
  • src - путь к файлу
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>group</groupId>
    <artifactId>dataset-load</artifactId>
    <version>0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>Loader</name>
    <description>TADA!</description>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>dbunit-maven-plugin</artifactId>
        <version>1.0-beta-3</version>
       
        <!--jar file that has the jdbc driver -->
        <dependencies>
          <dependency>
<groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
          </dependency>
                        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.2-FINAL</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        </dependencies>
       
        <!-- common configurations -->
        <configuration>
          <driver>oracle.jdbc.OracleDriver</driver>
          <url>jdbc:oracle:thin:@server:port:sid</url>
          <username>test</username>
          <password> test </password>
             <schema>test_schema </schema>
              <format>xls</format>
              <datatypeWarning>true</datatypeWarning>
            <dataTypeFactoryName>org.dbunit.ext.oracle.Oracle10DataTypeFactory</dataTypeFactoryName>
            <skipOracleRecycleBinTables>true</skipOracleRecycleBinTables>

        </configuration>
       
        <executions>
          <execution>
            <phase>test-compile</phase>
            <goals>
              <goal>operation</goal>
            </goals>
            <!-- specific configurations -->
            <configuration>
              <type>CLEAN_INSERT</type>
              <src>C:\auto_db\Start.xls</src>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

2 комментария:

  1. Для DDL операций и создания БД мне больше понравилось использовать liquibase, чем dbunit

    ОтветитьУдалить