【问题标题】:TestNG - How to print run time testng parameters in testng custom emailable report?TestNG - 如何在 testng 自定义电子邮件报告中打印运行时 testng 参数?
【发布时间】:2019-12-27 10:35:36
【问题描述】:

我发现有一个选项可以通过surefire插件将参数设置为testng xml,然后可以从命令行发送参数。

<plugins>
    [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M3</version>
        <configuration>
          <systemPropertyVariables>
            <browser>firefox</browser>
          </systemPropertyVariables>
        </configuration>
      </plugin>
    [...]
</plugins>

参考: https://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html https://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html

需要在 testng 自定义电子邮件报告中打印参数。能够使用以下代码打印 testng xml 中指定的 testng 参数。但是,无法打印surefire插件中指定的参数。

注意:System.getProperty("browser") 在这里工作。但是,我想打印它们而不必指定参数名称(比如“浏览器”),如下所示。但低于一个不起作用。

Map<String, String> allParameters = context.getCurrentXmlTest().getAllParameters();
for(String parameter: allParameters.keySet()) {
    System.out.println(parameter + " : " + allParameters.get(parameter));
}

例子:

import java.util.Map;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class TestNGTest {
    ITestContext context;

    @BeforeTest
    public void beforeTest(ITestContext context) {
        this.context = context;
    }

    @Parameters({"browser"})
    @Test
    public void method(String browser) {
        System.out.println(browser);
        Map<String, String> allParameters = context.getCurrentXmlTest().getAllParameters();
        for(String parameter: allParameters.keySet()) {
            System.out.println(parameter + " : " + allParameters.get(parameter));
        }
    }
}

实际输出:

[RemoteTestNG] detected TestNG version 7.0.0
chrome
key : value

===============================================
Suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

预期输出:

[RemoteTestNG] detected TestNG version 7.0.0
chrome
key : value
browser : chrome

===============================================
Suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

Testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes" thread-count="4">
    <test name="Front-End" group-by-instances="true">
    <parameter name="key" value="value"></parameter>
        <classes>
            <class name="com.ftd.automation.framework.tests.TestNGTest" />
        </classes>
    </test>
</suite>

请帮助我如何打印在surefire插件中指定或在命令行中传递的testng参数。

【问题讨论】:

    标签: java testng maven-surefire-plugin testng.xml


    【解决方案1】:

    假设您使用命令行参数运行,例如,

    mvn test -Dbrowser=firefox
    

    然后获取参数,

    import org.testng.annotations.Parameters;
    
    @Parameters("browser")
    @Test
    public void myTestMethod(String browser){
        System.out.println(browser); 
    }
    
    //or as Test parameter
    @Test(parameters = {"browser"})
    public void myTestMethod(String browser){
        System.out.println(browser);
    }
    
    //or System.getProperty() way
    @Test
    public void myTestMethod(){
        System.out.println(System.getProperty("browser"));
    }
    

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

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M3</version>
        <configuration>
          <systemPropertyVariables>
              <browser>firefox</browser>
          </systemPropertyVariables>
          <suiteXmlFiles> 
              <suiteXmlFile>testng.xml</suiteXmlFile>
          </suiteXmlFiles>
         </configuration>
    </plugin>
    

    编辑:

    仅供参考,System.grtProperties() 列出了所有属性,从命令行设置的属性将在那里,但无法将它们与系统添加的其他属性区分开来

    【讨论】:

    • 我想打印参数列表(键值对)而不指定参数名称(即键),如下所示。 Map allParameters = context.getCurrentXmlTest().getAllParameters(); for(String parameter: allParameters.keySet()) { System.out.println(parameter + " : " + allParameters.get(parameter)); }
    • @SandeepNalla 我不确定如何在没有密钥的情况下获取参数。我相信您需要指定键来检索值。 @Parameters({ "param-name" }) 正在等待密钥。另一种选择是使用System.getProperties(),但这会获取系统上的 JVM 从操作系统获取的当前属性。当前的系统属性作为属性对象返回,供getProperties() 方法使用。如果不存在这样的一组属性,则首先创建一组系统,然后对其进行初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多