从 pom.xml java 获取变量

Ram*_*Ram 4 java xml eclipse maven

我正在使用 Eclipse 和 Maven 在移动网页上进行移动自动化测试。

我在 pom.xml 中定义以下内容

<properties>
    <MY_VARIABLE>www.google.com/</MY_VARIABLE>
</properties>
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个来调用时

String testurl1 = System.getProperty("MY_VARIABLE");
Run Code Online (Sandbox Code Playgroud)

它似乎总是返回 null。

我还尝试了以下定义变量的方法

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <systemPropertyVariables>
        <MY_VARIABLE>www.google.com</MY_VARIABLE>
        </systemPropertyVariables>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但仍然得到空值。

我需要一些帮助谢谢。

Ren*_*ink 6

您的配置将无法在 Eclipse 中工作,因为 Surefire 没有良好的 m2e 支持。Maven Surefire 插件创建了一个新进程并systemPropertyVariables为其提供了 。如果您从命令行运行测试,您的配置将起作用,例如

mvn surefire:test
Run Code Online (Sandbox Code Playgroud)

为了让它在两个世界(命令行和日食)中运行,我这样做......

  1. 创建一个 src/test/resources/maven.properties
  2. 编辑maven.properties文件并将您需要的属性放入其中,例如

    project.build.directory=${project.build.directory}
    MY_VARIABLE=${MY_VARIABLE}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 为测试资源启用资源过滤

    <build>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
            </testResource>
        </testResources>
        ...
    </build>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在测试中加载属性并访问它们

     Properties mavenProps = new Properties();
     InputStream in = TestClass.class.getResourceAsStream("/maven.properties");
     mavenProps.load(in);
    
     String buildDir = mavenProps.getProperty("project.build.directory");
     String myVar = mavenProps.getProperty("MY_VARIABLE");
    
    Run Code Online (Sandbox Code Playgroud)