LoginSignup
0
2

More than 3 years have passed since last update.

sql-maven-pluginプラグインによるテストデータの設定方法メモ

Posted at

やりたいこと

実際の開発では複数のテスト環境に対してテスト内容ごとのテストデータを入れ替えてテストするのが一般的である。
テスト環境やテスト内容ごとに用意されたテストデータの入れ替えを簡単に実現するためMavenのsql-maven-pluginを利用したデータ設定方法をまとめる。

1. Mavenプロジェクトの作成

テストデータSQLファイルを管理するMavenプロジェクトを作成する。
プロジェクトの構成は下記の通りであり、src/main/resources/<DBタイプ>/<環境ID>/<テストデータID>/の構成でSQLファイルを格納する。

プロジェクト構成
project-root/
  ├ src/main/resources/
  │            ├ oracle/ ※Oracle向けテストデータ格納フォルダ
  │            │    └ environment01/ ※テスト環境01向けのデータ格納フォルダ
  │            │         └testdata01/ ※テストデータセット01の格納フォルダ
  │            │             └ 01_O_TESTDATASET01.sql
  │            │
  │            └ postgresql/ ※PostgreSQL向けテストデータ格納フォルダ
  │                 └ environment01/      
  │                      └ testdata01/
  │                          └ 01_P_TESTDATASET01.sql
  └ pom.xml

※今回の設定ではSQLファイル名の昇順にファイルを読み込み実行するため、実行するテストデータ順に数字2桁のプレフィックスを付与する。

1.1. pom.xmlの設定追加

pom.xmlに下記の設定を追加する。

pom.xml

    <!-- 依存ライブラリ定義 -->
    <dependencies>
        <dependency>
            <groupId>com.oracle.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>${ojdbc.version}</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${postgresql.version}</version>
        </dependency>
    </dependencies>

    <!-- DB接続定義 -->
    <profiles>
        <!-- OracleDB定義 -->
        <profile>
            <id>oracle</id>
            <!-- profile指定されない場合のデフォルトに設定 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <db.encoding>UTF8</db.encoding>
                <db.basedir>${project.basedir}/src/main/resources/oracle/${env}/${data}/</db.basedir>
                <db.url>jdbc:oracle:thin:@${host}/TEST</db.url>
                <db.username>DBユーザ名</db.username>
                <db.password>DBパスワード</db.password>
                <db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
                <db.groupId>com.oracle.jdbc</db.groupId>
                <db.artifactId>ojdbc8</db.artifactId>
                <db.version>${ojdbc.version}</db.version>
                <db.delimiter>;</db.delimiter>
                <db.delimiterType>row</db.delimiterType>
            </properties>
        </profile>

        <!-- PostgreSQL定義 -->
        <profile>
            <id>postgresql</id>
            <properties>
                <db.encoding>UTF8</db.encoding>
                <db.basedir>${project.basedir}/src/main/resources/postgresql/${env}/${data}/</db.basedir>
                <db.url>jdbc:postgresql://${host}/test</db.url>
                <db.username>DBユーザ名</db.username>
                <db.password>DBパスワード</db.password>
                <db.driver>org.postgresql.Driver</db.driver>
                <db.groupId>org.postgresql</db.groupId>
                <db.artifactId>postgresql</db.artifactId>
                <db.version>${postgresql.version}</db.version>
                <db.delimiter>;</db.delimiter>
                <db.delimiterType>row</db.delimiterType>
            </properties>
        </profile>
    </profiles>

    <!-- プラグイン定義 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.5</version>
                <dependencies>
                    <dependency>
                        <groupId>${db.groupId}</groupId>
                        <artifactId>${db.artifactId}</artifactId>
                        <version>${db.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <driver>${db.driver}</driver>
                    <url>${db.url}</url>
                    <username>${db.username}</username>
                    <password>${db.password}</password>
                    <encoding>${db.encoding}</encoding>
                    <autocommit>false</autocommit>
                    <delimiter>${db.delimiter}</delimiter>
                    <skip>false</skip>
                    <fileset>
                        <basedir>${db.basedir}</basedir>
                        <includes>
                            <include>0*.sql</include>
                        </includes>
                    </fileset>
                    <!-- SQLファイルの実行順を昇順に指定 -->
                    <orderFile>ascending</orderFile>
                </configuration>
            </plugin>
        </plugins>
    </build>

  <!-- JDBCドライバのバージョン定義 -->
    <properties>
        <ojdbc.version>12.2.0.1</ojdbc.version>
        <postgresql.version>42.2.5</postgresql.version>
    </properties>

注意事項

  • OJDBCドライバはMavenCentralレポジトリで管理さていないため、個別にダウンロードしローカルレポジトリにmaven installする必要がある。
$ mvn install:install-file -Dfile=<ファイルパス>/ojdbc8.jar -DgroupId=com.oracle.jdbc -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar -DgeneratePom=true

1.2. SQL定義の追加

SQL定義ファイルを作成し、src/main/resouces/ 配下の指定されたフォルダに格納する。

01_O_TESTDATASET01.sql
INSERT INTO TEST_TABLE (ID, TYPE, UPD_TIMESTAMP, UPD_USER_ID, RGS_TIMESTAMP, RGS_USER_ID) VALUES ('A0000001', '1', to_timestamp('2019/06/19 00:00:00', 'YYYY/MM/DD HH24:mi:ss'), 'system', to_timestamp('2019/06/19 00:00:00', 'YYYY/MM/DD HH24:mi:ss'), 'system');
INSERT INTO TEST_TABLE (ID, TYPE, UPD_TIMESTAMP, UPD_USER_ID, RGS_TIMESTAMP, RGS_USER_ID) VALUES ('A0000002', '1', to_timestamp('2019/06/19 00:00:00', 'YYYY/MM/DD HH24:mi:ss'), 'system', to_timestamp('2019/06/19 00:00:00', 'YYYY/MM/DD HH24:mi:ss'), 'system');
01_P_TESTDATASET01.sql
INSERT INTO TEST_TABLE (ID, TYPE, UPD_TIMESTAMP, UPD_USER_ID, RGS_TIMESTAMP, RGS_USER_ID) VALUES ('A0000001', '1', '2019/06/19 00:00:00', 'system', '2019/06/19 00:00:00', 'system');
INSERT INTO TEST_TABLE (ID, TYPE, UPD_TIMESTAMP, UPD_USER_ID, RGS_TIMESTAMP, RGS_USER_ID) VALUES ('A0000002', '1', '2019/06/19 00:00:00', 'system', '2019/06/19 00:00:00', 'system');

1.3. 動作確認

プロジェクトから正しくSQLを実行できることを確認する。

  • DBMSプロファイル:profile設定のIDを指定する。今回の設定ではoracleまたはpostgresqlを指定する。
  • 環境ID:テスト環境を指定する。プロジェクト構成のフォルダ名environment01を指定する。
  • テストデータセットID:テスト環境に設定するデータセットを指定する。プロジェクト構成のフォルダ名testdata01を指定する。
$ mvn -e -P <DBMSプロファイル> -Denv=<環境ID> -Ddata=<テストデータセットID> -Dhost=<DBサーバIP:ポート番号> -Djava.security.egd=file:/dev/./urandom sql:execute

実行時にエラーが出なければ成功。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2