Spring Boot製アプリをSelenium WebDriverでIntegrationテストする

2016/07/26

Spring BootにはJUnitとSelenium WebDriverを組み合わせてEnd to Endテストできる機能が組み込まれている。
Selenium部分は通常のJavaを使ったPageObjectパターンで作成するとして、JUnit部分をどのように設定していけばいいかを記載する。

検証version
  • Spring Boot 1.3.5
  • Selenium WebDriver 2.53.0

Annotation設定

Port

試験を実行するときのPortをランダムで決定するように設定する。
決め打ちでもいいが同一端末上で別のアプリが動いていたりすることがあるので、空Portを使用してくれるランダムPort設定のほうがBetter。

設定方法は、クラスに @WebIntegrationTest(randomPort = true) を、フィールドに @Value("${local.server.port}") を付与する。

@Valueはプロパティファイルの値をフィールドに設定してくれる。

実装具体例

Contextパス

プロパティファイルでアプリのルートURLとなるContextパスを設定している場合、@ValueでContextパスを変数に設定する。

JUnit設定

@RunWith(SpringJUnit4ClassRunner.class) をクラスに付与する。

Spring BootのConfig設定

@SpringApplicationConfiguration(classes = Application.class) をクラスに付与することで、通常実行時と同じように起動する。
src/test/resources にapplication.propertiesを置くことで、テスト用プロパティファイルでオーバーライド可能。
application.propertiesでDBへのデータセット用SQLを設定できるので、テスト用データの管理にSQLを使うことができる。

setupとdestroy

JUnitのsetupとdestroyでは、Selenium WebDriverの起動と終了を管理する。
今回後掲するソースではsetupではFirefoxProfileの設定を行っているが、Seleniumでファイルダウンロードして、その後検証する方法で解説した機能の設定と同じ。ファイルダウンロード機能がないアプリケーションであれば不要となる。

ソース

-Java
-, ,