我正在嘗試爲集成測試提供並行maven測試執行。Maven surefire插件,在構建生命週期期間設置和獲取系統屬性
使用sql-maven-plugin在測試執行開始之前創建一個測試數據庫,並配合maven surefire插件參數和並行執行,似乎是一個很好的開始。
我不明白的是如何使用sql-maven-plugin(或其他任何插件)設置surefire插件設置的系統屬性。我有一個失敗的設置。
萬無一失插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>2</forkCount>
<reuseForks>true</reuseForks>
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
<systemPropertyVariables>
<databaseSchema>test_schema_${surefire.forkNumber}</databaseSchema>
</systemPropertyVariables>
</configuration>
</plugin>
SQL-行家-插件配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
</dependencies>
<configuration>
<driver>com.mysql.jdbc.Driver</driver>
<username>user_with_create_privs</username>
<password>password</password>
<url>jdbc:mysql://localhost/dummy_schema</url>
</configuration>
<executions>
<execution>
<id>create-db</id>
<phase>process-test-classes</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<url>jdbc:mysql://localhost/dummy_schema</url>
<autocommit>true</autocommit>
<sqlCommand>create database ${databaseSchema}</sqlCommand>
</configuration>
</execution>
</executions>
</plugin>
殼執行:
mvn test
結果輸出:
[DEBUG] SQL: drop database ${databaseSchema}
[ERROR] Failed to execute: drop database ${databaseSchema}
[ERROR] Failed to execute goal org.codehaus.mojo:sql-maven-plugin:1.5:execute
(create-db) on project billing-core: You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near '{databaseSchema}' at line 1 -> [Help 1]
所以,看起來像$ {} DatabaseSchema提供未填充或語法問題。雖然它看起來很容易,但我不能搞定它,但我已經搞清楚了。
對於集成測試,你應該看看Maven的故障安全插件。 –
Surefire的'systemPropertyVariables'將在創建執行測試的JVM時設置系統屬性。顯然,當Maven試圖執行sql-maven-plugin時,該屬性不是爲Maven項目設置的屬性。 – Tome
@Tome所以基本上,sql-maven-plugin和surefire插件在我想要的方式中不兼容? – Wrench