読者です 読者をやめる 読者になる 読者になる

量産型エンジニアの憂鬱

きっと僕は何物にもなれない。

Spring BootプロジェクトをIntelliJでJUnitするときプロファイルを指定したい

Java IntelliJ IDEA Spring Boot テスト

Spring Bootを使って開発してますが、Selenideによる画面テストを実施する際、ローカルではFirefox、CIサーバ上ではphantomjsドライバを使ってテストしています。
また、ローカルとCIサーバで利用するドライバの切り替えは application.properties と pom.xml のプロファイルで行ってます。

application.properties

# PhantomJSのexeファイルのパス
phantomjs.binary.path=@phantomjs.binary.path@
# Selenideで使用するブラウザ
selenide.browser=@selenide.browser@


pom.xml

<properties>
    <!-- デフォルトのプロパティ -->
    <selenide.browser>firefox</selenide.browser>
</properties>
...
<profiles>
    <profile>
        <!-- CIサーバ -->
        <id>ci</id>
        <properties>
            <phantomjs.binary.path>/usr/local/phantomjs/bin/phantomjs</phantomjs.binary.path>
            <selenide.browser>phantomjs</selenide.browser>
        </properties>
    </profile>
<profiles>

application.propertiesで値を @ で囲むことによって、 pom.xml に記述されたプロパティに置き換えてくれます。
また、 <profiles> を利用することによってそのプロパティを上書きすることができます。

上記の場合、

mvn test

を実行するとfirefoxドライバが指定され、

mvn test -Pci

とすると、phantomjsドライバが指定されます。

これでテストしてたのですが、ローカルではテスト通ったのにCIサーバ上ではテストこけることがしばしば。試しにローカルで phantomjs でテストするとやっぱりこける。

Maven から test を実行すればプロファイルの指定も出来ますが、失敗したテストだけ再実行などができない。テスト毎にログを見ることができない。
など、やっぱり IntelliJJUnit でドライバを指定できるようにしたい。
このボタンからドライバ指定してテストしたい。
f:id:duck8823:20160813144405p:plain

ていうことでちょっと調べたんですが、Spring Bootではプロファイルを切り替える仕組みがもともとある様子。

切り替えるには、application.yml か application.properties かで変わるのですが、 application.properties を使っている場合は、
application-[プロファイル名].properties という名前でファイルを作成し、上書きしたいプロパティを記述すれば良いようです。
以下のファイルを作成しました。

application-phantomjs.properties

# PhantomJSのexeファイルのパス
phantomjs.binary.path=/path/to/pahtnomjs.exe
# Selenideで使用するブラウザ
selenide.browser=phantomjs

IntelliJJUnit 実行時にこのプロパティファイルで上書きするには、 Run/Debug Configuration の VM options に -Dspring.profiles.active=プロファイル名 とすればよいです。
f:id:duck8823:20160813145830p:plain

-Dspring.profiles.active オプションの有と無で設定を作っておけば、選択するだけでドライバを切り替えられます。
リポジトリにプッシュする前にローカルの phantomjs でもテストしておけば、安心安心。