我一直在尝试从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套件中检索参数?
答案 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() {
}
}