ITestResult不从XML套件返回参数

时间:2019-06-03 19:09:51

标签: java selenium testng

我一直在尝试从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();始终返回零参数(不为null)。

如何使用testrail_case_id从xml套件中检索参数?

2 个答案:

答案 0 :(得分:1)

如果您只想获取一个参数而不是Map,请尝试

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

对我来说很好

答案 1 :(得分:0)

我试图重现您的问题。我用TestNG用合适的xml创建了一个新的空项目。我创建了两种配置,一种直接运行类,另一种通过套件运行测试。 结果是,当您直接运行该类时,getAllParameters()返回零,而在通过suit xml运行时,返回参数。

我的猜测是,您的配置以某种方式直接运行类,或者如果选择了西装,则绕过或无法访问西装文件(不太可能)。

当我尝试获取西装文件名时,得到了以下结果:

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

遍历西装: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文件,配置及其相应输出的复合屏幕截图: composite screenshot