如何在不必手动编辑文件的情况下更改maven-surefire-plugin加载的属性文件中的键值?

时间:2014-12-26 22:34:37

标签: maven maven-surefire-plugin

我正在使用maven sure fire插件从属性文件(testdata.properties)加载键值对,以便我可以在我的TestNG测试方法中使用它,如

@Test
public void testDBConnection()
{ 
    String dbEnvUsed = System.getProperty("db.env");
    String keyForDatabaseDriver = System.getProperty("db.driver");
    String keyForDatabaseUrl = System.getProperty("db."+dbEnvUsed+".url");// value of the key "db.tst.url"
    String keyForDatabaseUser = System.getProperty("db."+dbEnvUsed+".user";//value of the key "db.tst.user"
    String keyForDatabasePassword = System.getProperty("db."+dbEnvUsed+".passwd");//value of the key "db.tst.passwd"
    Connection conn = null;
    try
    {
       Class.forName(dbDriver); // load the database driver
       Connection conn = DriverManager.getConnection(keyForDatabaseUrl, keyForDatabaseUser, keyForDatabasePassword);
            System.out.println("----> Connected to " + dbEnvUsed +" instance");
    } 
    catch(java.sql.SQLRecoverableException sqlre)
    {
            System.out.println("----> Could not establish the connection. DB Server may be down.");
    }
    catch(Exception se)
    {
            System.out.println(se.getMessage());
    }
    Assert.assertNotNull(conn);//test the conection
}

testdata.properties文件的内容

db.driver = oracle.jdbc.driver.OracleDriver
db.env= tst

db.tst.url = jdbc:oracle:thin:@hostname:1521:sid
db.tst.user = tstUser
db.tst.passwd = *****

db.dev.url = jdbc:oracle:thin:@hostname:1521:sid
db.dev.user = devUser
db.dev.passwd = ######

摘自我的pom.xml

<plugins>
    <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <systemPropertiesFile>src/main/resources/testdata.properties</systemPropertiesFile>
        </configuration>
    </plugin>
</plugins>

我想更改键的值&#34; db.env&#34;在执行测试之前,无需编辑testdata.properties文件。有没有办法实现同样的目标?

1 个答案:

答案 0 :(得分:1)

发现maven提供了一种覆盖属性文件中key的值的方法。以下是一种方法:

mvn -D<key.to.override>=<yourvalue>

就我而言,我这样做了:

mvn -Dtest= testDBConnection test -Ddb.env=tst

请注意,我在 testdata.properties 文件中定义了一个键“ db.env ”,该文件由maven-surefire-plugin加载。因此,可以使用System.getProperty("db.env");在我的代码中访问键“db.env”的值。

要进行此操作(以某种方式加载属性文件,以便使用System.getProperty("key.in.your.property")可以访问您的键值对),请在pom.xml中添加以下内容

<plugins>
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <systemPropertiesFile>src/main/resources/testdata.properties</systemPropertiesFile>
    </configuration>
</plugin>