単体テストのみを分離して実行する理由は次のとおりです。
- Selenium テストの前に単体テストを実行する必要がある - 失敗の推論を単純化するため。
- これらの種類のテストには、maven プラグイン構成で異なる設定が必要です (並列テストの実行、順序付け、システム プロパティ、JVM オプションなど)。
- Selenium テストはエンド ツー エンドであり、アプリケーションの状態をリセットする (データベースのクリア、アプリ サーバーの開始と停止)、多くの構成と展開作業が必要です。これらの作業は、すべての開発環境とステージング環境で簡単に実行できるわけではありません。
Mavenには、統合テストのステップを分離するための一連のフェーズがあり、セレンテスト構成を1か所に集めることができるプロファイルもあります。
Selenium を使用したエンド ツー エンド テストの例を次に示します (スクリプトを解凍して実行し、DB を最初からセットアップし、アプリ サーバーを起動し、テストを実行し、アプリ サーバーを停止し、テスト結果を検証して報告します)。
<profile>
<id>selenium</id>
<dependencies>
<dependency>
<groupId>com.thenewmotion</groupId>
<artifactId>msp-solveconnector</artifactId>
<version>${project.version}</version>
<classifier>sql-install</classifier>
<type>zip</type>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>com.thenewmotion</includeGroupIds>
<includeArtifactIds>msp-solveconnector</includeArtifactIds>
<includeClassifiers>sql-install</includeClassifiers>
<includeTypes>zip</includeTypes>
<includes>**/*.*</includes>
<outputDirectory>${project.build.directory}</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.16</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>create-db</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://localhost</url>
<username>${msp.db.user}</username>
<password>${msp.db.password}</password>
<orderFile>ascending</orderFile>
<fileset>
<basedir>${project.build.directory}/db</basedir>
<includes>
<include>1_drop_database.sql</include>
<include>2_create_database.sql</include>
<include>3_create_tables.sql</include>
<include>4_create_views.sql</include>
<include>5_create_foreign_keys.sql</include>
<include>6_data.sql</include>
</includes>
</fileset>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<stopKey>foo</stopKey>
<stopPort>8088</stopPort>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>${msp.port}</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<configuration>
<systemPropertyVariables>
<msp.user>${msp.user}</msp.user>
<msp.password>${msp.password}</msp.password>
<msp.baseUrl>${msp.baseUrl}</msp.baseUrl>
<webdriver.type>${webdriver.type}</webdriver.type>
<webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
</systemPropertyVariables>
<includes>
<include>**/*FT.class</include>
</includes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>