flywayでテストデータをサクッとローカル環境に準備する!!spring bootで作成したAPIのテストコードを書くための準備編

はじめに

実際のDBと繋いだ内部結合(ITa)テストに近いような粒度でのテストコードを書きたい!!

尚且つ、

各開発者がローカル環境でDB構築できて(DBを1つ立てて開発者全員で共有とかしたくない)、

ある程度のデータバリエーションをサクッと用意できて、

テストデータを必要に応じて追加・更新・削除できて・・・

 

ということを想定した場合、どんな仕組みを作ればこれら満たせるのか??についてまとめてみました。

 

flywayとは

この辺り一度読んでもらうのが早いと思います。

>>Flyway使い方メモ

 

が、一応簡単に解説すると、

データベースの状態(断面)を管理して、どんな環境にもどんな断面にも簡単に再現できる。

というのがflywayの特徴だとざっくり捉えてもらえればいいかなと思います。

こんな感じ

 

 

これを実現するために、

flywayのプロジェクトにテーブル作成用のcreate文とか、初期データ登録用のinsert文とかをバージョンを振りながら登録しておく必要があります。

で、flyway実行時にここのDBへ向けてこのバージョンを再現!!という指示を与えることで指定されたバージョンのクエリだけ実行して上のようなことが実現できるようなイメージです。

 

 

 

flywayでテストデータをサクッとローカル環境に準備するには??

実際に動くサンプルをgithubに公開していますので、興味あれば参照ください。

>>サンプルソースコード

 

ローカル環境にDBを構築してflywayでテストデータをセットアップするまでの流れ

ローカル環境のdocker上にpostgreSQLを構築、

flywayを使って事前に準備しておいたスキーマ・テーブルcreate文とテストデータのinsert文を実行させることで

ローカル環境にDB構築〜テストデータセットアップしました。

 

 

 

MEMO

flywayの実行オプションによっては指定のバージョン以降を実行するなどもできますが、

今回はローカル環境にサクッとセットアップできて、サクッと更新できて、サクッと壊せるようにしたかったのでその辺りは利用していません。

 

ローカル環境にDBを構築してflywayでテストデータをセットアップする際のポイント解説

まずはflywayに実行させるクエリ管理用のプロジェクトをpullしてください。

>>flywayプロジェクト

 

注意

別リポジトリで管理しなくてもいいですが、

ごちゃごちゃするのでプロダクションコード(例で挙げているリポジトリでいうbackendプロジェクト)とは別プロジェクトで管理しましょう。

 

ソースコード解説

flywayの利用とdb接続に必要なライブラリの依存関係をにpomに設定しています。

>>該当ソースコード

また、flywayがどのDBに対してクエリを実行するのかというプロパティの設定をしています。

>>該当ソースコード

 

実際に流すクエリは>>src/main/resources/db/migration配置しており、flywayはこの配下のsqlファイルを全部実行するようにします。

 

flyway実行

まずflyway実行の前にdocker上にpostgreSQLを構築します。

親プロジェクトフォルダ直下(docker-compose.ymlがあるところ)で以下実行するとdocker上にpostgreSQLが構築できます。

docker-compose up -d

 

flywayプロジェクト直下で以下実行するとflywayがdocker上に構築したpostgreSQLに向けてsrc/main/resources/db/migration配下の全sqlを実行します。

./mvnw clean install
./mvnw flyway:clean flyway:migrate

 

IntelliJにプロジェクトインポートして実行する場合はこんな感じでmavenウィンドウからの実行が可能です。

 

 

実際にpostgreSQLにクライアントツールを使って繋いでテーブルができているかの確認手順は省略しますが、

こんな感じでテーブル作成とデータ登録されているはずです。

 

 

ちなみにですが、

テストデータが変更したくなったら、

クエリを直して同じように以下コマンドを実行すれば再作成可能にするために、

V0__drop.sqlでスキーマごと削除するクエリを一番先頭で流すようにしています。(これがなければ既にスキーマやテーブルがあるよっていうエラーになる)

./mvnw clean install
./mvnw flyway:clean flyway:migrate

 

まとめ

今回はflywayを利用してローカル環境でdocker上に構築したpostgreSQLに対して、

テストデータ登録済みの状態までサクッと準備できる方法について解説しました。

 

今回紹介したflywayの使い方以外にも、

baselineを利用してリリース対象のクエリの本番環境に差分更新で反映させる使い方だったり、

結合環境と同じデータベースの状態で新しいステージング環境をセットアップする際にflywayを利用したり、

他にも色々使いどころはあります。

 

本記事が、現状の開発プロセスにおいての何かしらの課題を解決するヒントになれば幸いです。

 

2022/3/22追記

現場での開発を想定した

バックエンドのローカル開発環境構築まとめ記事を作ったので

良ければそちらを参考に環境構築してみてください!!

バックエンド開発環境構築手順まとめ!!IntelliJ IDEAセットアップ〜FlywayでpostgreSQLにテストデータ投入などなど

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください