2017-03-07 1 views
1

J'essaie de proposer une exécution de test maven parallèle pour les tests d'intégration. L'utilisation de sql-maven-plugin pour créer une base de données de test avant le début de l'exécution du test, en conjonction avec les paramètres du plugin maven surefire et l'exécution parallèle, semble être une bonne approche pour commencer. Ce que je n'arrive pas à comprendre, c'est comment utiliser les propriétés du système que le plugin surefire définit, avec sql-maven-plugin (ou tout autre plugin d'ailleurs). J'ai une configuration qui échoue à ce sujet.Plugin Maven surefire, définition et obtention des propriétés du système au cours du cycle de vie de la construction

configuration du plugin infaillible:

<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> 

configuration SQL-maven-plugin:

<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> 

exécution du shell:

mvn test 

sortie résultat:

[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] 

Alors, ressemble à $ {} DatabaseSchema n'est pas renseigné, ou un problème de syntaxe. J'ai joué du violon, mais je n'arrive pas à le faire fonctionner, même si cela semble facile.

+0

Pour les tests d'intégration, vous devriez jeter un oeil à le plugin Maven failsafe. –

+1

'systemPropertyVariables' de Surefire définira une propriété système lors de la création de la JVM exécutant les tests. Évidemment, lorsque Maven essaie d'exécuter sql-maven-plugin, cette propriété n'est pas un ensemble de propriétés pour le projet Maven. – Tome

+0

@Tome Donc, pour l'essentiel, sql-maven-plugin et le plugin surefire ne sont pas compatibles comme je le souhaite? – Wrench

Répondre

1

Vous pouvez confondre les propriétés de Maven, les propriétés du système Java et les variables d'environnement. Les variables que vous souhaitez utiliser ressemblent à des propriétés Maven.

Vous pouvez définir des propriétés dans votre POM dans un élément de propriétés. En outre, vous pouvez référencer des variables d'environnement à l'aide du formulaire $ {env.PropertyName} et des propriétés système Java à l'aide du formulaire $ {java.PropertyName}.

Vous pouvez vous référer à cela pour plus d'informations: https://maven.apache.org/pom.html#Properties

+0

Vous avez raison, j'étais. Comme mentionné dans un commentaire à ma question, j'ai commencé une autre approche qui donne plus de travail de mise en œuvre, mais devrait au moins travailler en théorie, par rapport à celle de ma question. Merci pour votre réponse. – Wrench