Maven TestNG项目,使用Maven命令行参数替换属性文件中的值

时间:2017-01-20 16:00:23

标签: java maven properties-file

我有一个Maven TestNG项目,它有一个位于src / test / resources中的属性文件。我想参数化属性文件中的某些值,使它们来自Maven命令行参数(i,e mvn clean test -U -DpropertyName = propertyVal,其中" $ {propertyName}"存在于属性文件)。

我需要在pom.xml文件中进行哪些更改才能完成此操作?

更新:

添加pom.xml,以便人们可以看到我正在使用的内容。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Test_Automation</groupId>
<artifactId>TA_ID</artifactId>
<version>1.0-SNAPSHOT</version>
<name>T_QE</name>
<properties>
    <jdk.version>1.8</jdk.version>
    <maven-surefire-version>2.19.1</maven-surefire-version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <src.dir>src/main/java</src.dir>
    <test.dir>src/test/java</test.dir>
    <test.resources>src/test/resources</test.resources>
</properties>
<build>
    <testResources>
        <testResource>
            <directory>${test.resources}</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>
    <sourceDirectory>${src.dir}</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${maven-surefire-version}</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>target/test-classes/testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>
<profiles>
    <profile>
        <id>default</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <propertyName>${propertyName}</propertyName>
        </properties>
    </profile>
</profiles>

更新#2: 属性文件(位于src / test / resources / configuration.properties)的内容如下:

api.username=${propertyName}

1 个答案:

答案 0 :(得分:0)

有一种叫做过滤的东西 - docs

基本上你将它添加到你的构建中:

  <build>
    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>
  </build>

然后在你的个人资料中你会做:

  <profile>
      <id>myprofile</id>
      ...
      <properties>
        <propertyName>${propertyName}</propertyName>
      </properties>
    </profile>

假设您的.properties文件中包含:

myProperty = ${propertyName}

尝试一下。

<强>更新

这个插件必须在你的pom中:

<plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.2</version>
      </plugin>
      ...
    </plugins>

您应该将此添加到您的maven执行命令:

mvn resources:testResources