ITestResult 没有来自 XML 套件的 return 参数

ITestResult doesn't return parameters from XML suite

我一直在尝试从 TestNG XML 套件中检索一些参数。带有 testrail 参考的参数附加到 xml 套件,这些套件应该因已知错误而失败。 我想在生成的报告中包含此参数(为此我们使用范围报告)。我尝试了多种从 xml 套件中检索参数的方法,但返回的参数数量始终为零。

我尝试使用 ITestContext 从 xml 文件中检索数据。

flush() 方法在测试完成后在其中一个侦听器中调用,并接受 ITestContext 参数。我正在尝试从提供的 ITestContext 参数中检索参数。

  public void flush( ITestContext testContext ) {

Map<String, String> parameters = ( ( (ITestContext) testContext ).getCurrentXmlTest() )
      .getAllParameters();

    for ( Map.Entry<String, String> entry : parameters.entrySet() ) {
      warn( "testrail_case_id: " + entry.getKey() + " (id): " + entry.getValue() );
    }
    extent.flush();
}

这是 xml 套件的示例,我们在其中指定一个参数(有时是几个)并引用错误票。更具体地说——我正在尝试检索一个参数名称为 testrail_case_id

的变量
<suite name="MySuite" parallel="false" thread-count="1"
       junit="false" verbose="1">

  <listeners>
    <listener class-name="MyListener"/>
  </listeners>

  <test name="MyTest">
    <parameter name="testrail_case_id" value="684342"/>
    <classes>
      <class name="MyTestClass"/>
    </classes>
  </test>
</suite>

问题是 Map<String, String> parameters = ( ( testContext ).getCurrentXmlTest() ).getAllParameters(); 总是 returns 零参数(不为空)。

如何从 xml 套件中检索带有 testrail_case_id 的参数?

如果你只想获取一个参数而不是 Map 试试

  String browser = context.getCurrentXmlTest().getParameter("Browser");

对我来说效果很好

我试图重现你的问题。我用套装 xml 用 TestNG 创建了一个新的空项目。我创建了两种配置,一种是直接 运行ning class,另一种是 运行ning 通过套件进行测试。 结果是当你直接 运行 class 时 getAllParameters() return 为零,return 当它是 运行 时的参数穿花色 xml.

我的猜测是,您的配置要么直接 运行 class,要么如果选择了 suit,它会绕过或无法访问 suit 文件(不太可能)。

当我尝试获取套装文件名时得到了这些结果:

直接运行ning class:C:\Users****\AppData\Local\Temp\testng-eclipse-300667166\testng-customsuite.xml

运行 through Suit: D:\eclipse-workspace2\TestNGExamples\src\tester 所以看起来如果配置没有设置为使用特定的套装文件,它将使用临时创建的套装 xml.

示例代码:

import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;

import java.util.Map;

import org.testng.ITestContext;
import org.testng.annotations.AfterTest;

public class MyFirstTest {
  @Test
public void f(ITestContext testContext) {
  Map<String, String> parameters = ( ( (ITestContext) testContext     ).getCurrentXmlTest() )
          .getAllParameters();
  System.out.println("file name : " +( ( (ITestContext) testContext ).getCurrentXmlTest() ).getSuite().getFileName() );
  System.out.println("parameters size "+parameters.size() );

  for ( Map.Entry<String, String> entry : parameters.entrySet() ) {
      System.out.println( "testrail_case_id: " + entry.getKey() + " (id): " + entry.getValue() );
    }
}
@BeforeTest
public void beforeTest() {
}
@AfterTest
public void afterTest() {
}
}

这是显示代码、xml 文件、配置及其相应输出的复合屏幕截图: