30

我需要传递以下值……</p>

exeEvironment (测试环境), testGroup(testNG中的组)

从命令行 -> POM -> TestNG -> 测试用例。

根据这两个帖子....

从 maven 传递一个 java 参数

如何从 Surefire Maven 插件将参数传递给 guicified TestNG 测试?

我做了以下配置..

surefire plugin中,我尝试了以下两个选项,但似乎都不起作用。

=====

(1)

  <execution>
<id>default-test</id>
    <goals>
        <goal>test</goal>
    </goals>
    <configuration>
        <properties>
            <exeEnvironment>${exeEnvironment}</exeEnvironment>
            <testGroup>${testGroup}</testGroup>
        </properties>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</execution>

(2)

<execution>
<id>default-test</id>
<goals>
    <goal>test</goal>
</goals>
<configuration>
    <systemPropertyVariables> <exeEnvironment>${exeEnvironment}</exeEnvironment> 
        <testGroup>${testGroup}</testGroup> </systemPropertyVariables> 
    <suiteXmlFiles>
        <suiteXmlFile>testng.xml</suiteXmlFile>
    </suiteXmlFiles>
</configuration>
</execution>

testNG.xml中,我可以使用像...这样的变量testGroup吗?</p>

<test name="Web Build Acceptance">
    <groups>
        <run>
            <include name="${testGroup} />
        </run>
    </groups>
    <classes>
        <class name="com.abc.pqr" />
    </classes>
</test>

这似乎也不起作用,我是否需要定义一个参数。


测试用例中,我尝试通过以下两种方式获取变量……。(1)

testEnv = testContext.getSuite().getParameter("exeEnvironment");
testGroup = testContext.getSuite().getParameter("testGroup");

(2)

testEnv = System.getProperty("exeEnvironment");
testGroup = System.getProperty("testGroup");

4

6 回答 6

50

这正是我正在寻找我的自动化测试并且我让它工作的东西。

命令行参数

mvn clean test -Denv.USER=UAT -Dgroups=Sniff

我的 Pom Xml

<?xml version="1.0" encoding="UTF-8"?>
<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>TestNg</groupId>
    <artifactId>TestNg</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
                    <systemPropertyVariables>
                        <environment>${env.USER}</environment>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

TestNG测试

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;


public class TestAuthentication {

    @Test (groups = { "Sniff", "Regression" })
    public void validAuthenticationTest(){
        System.out.println(" Sniff + Regression" + System.getProperty("environment"));
    }

    @Test (groups = { "Regression" },parameters = {"environment"})
    public void failedAuthenticationTest(String environment){
        System.out.println("Regression-"+environment);
    }

    @Parameters("environment")
    @Test (groups = { "Sniff"})
    public void newUserAuthenticationTest(String environment){
        System.out.println("Sniff-"+environment);
    }
}

以上效果很好。另外,如果需要使用testng.xml,可以指定suiteXmlFile like ...

      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12.4</version>
            <configuration>
                <systemPropertyVariables>
                    <environment>${env.USER}</environment>
                </systemPropertyVariables>
                <suiteXmlFiles> 
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>

另外,我更喜欢使用@Parameters而不是parametersin @Test(),因为后者已被弃用。

于 2012-11-29T18:03:31.420 回答
5

您无需在 testng xml 或 pom 中为组定义任何内容,支持是内置的。您可以简单地在 cmd 行 http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#groups上指定组

希望能帮助到你..

编辑2:

好的..所以这是另一种选择...实现IMethodInterceptor

定义您的自定义属性。在命令行调用中使用 -Dcustomproperty=groupthatneedstoberun。

在拦截调用中,扫描所有方法..大意的东西..

System.getProperty("customproperty");
for(IMethodInstance ins : methods) {
    if(ins.getMethod().getGroups()) contains group)
        Add to returnedVal;
    }
return returnedVal;

将此添加到 xml 中的侦听器列表中。

于 2012-11-06T06:31:38.363 回答
2

完美的。

将变量从 POM.xml 传递到的最简单方法ABC.java

POM.xml

<properties>
   <hostName>myhostname.com</hostName>
</properties>

我们可以像这样从系统属性中ABC.java调用它

System.getProperty("hostName")
于 2014-05-28T09:25:18.287 回答
2

传递浏览器等参数可以如下完成:

<properties>    
    <BrowserName></BrowserName>
    <TestRunID></TestRunID>
</properties>



        <!-- Below plug-in is used to execute tests -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>src/test/resources/${testXml}</suiteXmlFile>
                </suiteXmlFiles>
                <systemPropertyVariables>
                  <browserName>${BrowserName}</browserName>
                    <testRunID>${TestRunID}</testRunID> 
                </systemPropertyVariables>
            </configuration>
            <executions>
                <execution>
                    <id>surefire-it</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>false</skip>
                        <testFailureIgnore>true</testFailureIgnore>
                    </configuration>
                </execution>
            </executions>
        </plugin>

并在java代码中处理这个使用这个:

 public static final String Browser_Jenkin=System.getProperty("BrowserName");
    public static final String TestRunID=System.getProperty("TestRunID");

  public static String browser_Setter()
    {
        String value=null;
        try {
            if(!Browser_Jenkin.isEmpty())
            {
                value = Browser_Jenkin;
            }
        } catch (Exception e) {
            value =propObj.getProperty("BROWSER");
        }
        return value;   
    }

    public static String testRunID_Setter()
    {
        String value=null;
        try {
            if(!TestRunID.isEmpty())
            {
                value = TestRunID;
            }
        } catch (Exception e) {
            value =propObj.getProperty("TEST_RUN_ID");
        }
        return value;   
    }
于 2017-04-24T09:30:55.453 回答
0

您无需使用环境变量或编辑 pom.xml 即可使用它们。

Build 部分下 Invoke Maven 3 的目标和选项采用该参数。试试这个(假设你参数化了构建):

Invoke Maven 3
  Goals and options = test -Denv=$PARAM_ENV -Dgroup=$PARAM_GROUP
于 2016-01-28T17:52:20.930 回答
0

建立在公认的答案之上

如果<systemPropertyVariables>在 Maven 配置文件中声明了 maven surefire 和 ,则它们不可用并且将返回null,除非还调用了配置文件。

命令行参数

mvn clean test -PmyTestProfile -Denv.USER=UAT -Dgroups=Sniff 

pom.xml

<profiles>
    <profile>
        <id>myTestProfile</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${surefire.version}</version>
                    <configuration>
                        <systemPropertyVariables>
                            <environment>${env.USER}</environment>
                        </systemPropertyVariables>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
于 2020-11-26T17:44:42.987 回答