Maven运行测试,然后编译然后进行其他测试

时间:2016-04-29 14:53:59

标签: java xml maven testng

我的目标是让Maven在一个版本中执行:

  1. 运行测试,其中随机用户名将写入资源
  2. 中的文件
  3. 然后编译并运行测试(使用已编译的资源)
  4. 什么有用
    test -Dtestgroups="purchase,checkorders"运行其他测试(2)。

    我想念的是什么
    运行用户名创建,然后编译和测试。

    我的配置:

    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19</version>
                <configuration>
                    <configfailurepolicy>continue</configfailurepolicy>
                    <systemPropertyVariables>
                        <url>${url}</url>
                        <browser>${browser}</browser>
                        <language>${language}</language>
                    </systemPropertyVariables>
                    <includes>
                        <include>**/*.java</include>
                    </includes>
                    <groups>${testGroups}</groups>
                    <excludedGroups>${excludedGroups}</excludedGroups>
                    <parallel>classes</parallel>
                    <threadCount>${threadCount}</threadCount>
                    <forkMode>once</forkMode>
                    <workingDirectory>target/</workingDirectory>
                </configuration>
            </plugin>
    

    我已经阅读了一些关于执行的帖子但到目前为止没有成功。

    更新
    我设法制作了一个插件。请参阅下面的答案。

1 个答案:

答案 0 :(得分:1)

我设法制作插件并发布了on my github account。我的Mojo的pom:

<groupId>credentials.plugin</groupId>
<artifactId>credentials-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>Credentials Maven Plugin</name>

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
    </dependency>
    <!-- dependencies to annotations -->
    <dependency>
        <groupId>org.apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>3.4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

The Mojo。

@Mojo(name = "credentials")
public class CredentialsMojo extends AbstractMojo {

  @Parameter(property = "credentials.propertiesDirectory", defaultValue = "empty")
  private String propertiesDirectory;

  @Parameter(property = "credentials.propertiesFileName", defaultValue = "credentials")
  private String propertiesFileName;

  @Parameter(property = "credentials.nameLength", defaultValue = "6")
  private int nameLength;

  @Parameter(property = "credentials.password", defaultValue = "Welkom01@")
  private String password;

  public void execute() throws MojoExecutionException {
    getLog().info("Creating "+ propertiesFileName +".properties");
    parseDirectoryName();

    try (OutputStream output = new FileOutputStream(new File(propertiesDirectory + propertiesFileName +".properties"))) {
      tryCreateCredentialProperties(output);
    } catch (IOException io) {
      getLog().error(io);
    }
  }

  private void parseDirectoryName() {
    if (propertiesDirectory.equals("empty")) propertiesDirectory = "";
    addSlashToDirectory();
  }

  private void addSlashToDirectory() {
    if (propertiesDirectory.equals("") || propertiesDirectory.endsWith("/")) return;
    propertiesDirectory = propertiesDirectory + File.separator;
  }

  private OutputStream tryCreateCredentialProperties(OutputStream output) throws FileNotFoundException, IOException {
    final String username = RandomStringUtils.randomAlphanumeric(nameLength);
    Properties prop = new Properties();
    prop.setProperty("username", username);
    prop.setProperty("password", password);
    prop.store(output, null);
    getLog().info("Username = " + username);
    getLog().info("Password = " + password);
    return output;
  }
}

在使用插件的项目中:

<properties>
  <nameLength>16</nameLength>
  <password>qwerty@01</password>
  <propertiesDirectory>src/test/resources</propertiesDirectory>
  <propertiesFileName>foobar</propertiesFileName>
</properties>
...
<plugin>
  <groupId>credentials.plugin</groupId>
  <artifactId>credentials-maven-plugin</artifactId>
  <version>1.0-SNAPSHOT</version>
  <configuration>
    <nameLength>${nameLength}</nameLength>
    <password>${password}</password>
    <propertiesDirectory>${propertiesDirectory}</propertiesDirectory>
    <propertiesFileName>${propertiesFileName}</propertiesFileName>
  </configuration>
</plugin>