我有一个TestNG文件demo.java
和一个侦听器DemoListener.java
Demo.java
import org.testng.*;
@Listeners(DemoListener.class)
public class Demo{
public static String testName = "DemoName"
@Test(priority = 1)
public void demoTest() {
Assert.assertEquals(some_value,value, "message");
}
}
DemoListener.java
import org.testng.ITestListener;
Public class DemoListener implements ITestListener {
@Override
public void onTestSuccess(ITestResult arg0) {
System.out.println("On test Success:- ");
// Here I want to access **variable(testName)** declared in Demo class.
// Or is there anyway that I can pass that variable.
}
}
现在,我想在每次测试执行后访问在DemoListener类的Demo类中声明的testName变量。我会在DemoListener中声明它,但是我有很多类似Demo的类,并且每个文件都有不同的testName。
感谢你的帮助!
最佳答案
我不确定您为什么要这么做,也许有一点背景会有所帮助。
但是,要回答这个问题,您有几种选择:
在TestNG的XML中定义变量。如果将其放在属性构造中,则System.getProperty()
将可以使用它。
由于testName
是公共静态变量,因此您可以简单地在Demo.testName
中引用DemoListener
。
我有点困惑为什么您不能简单地使用ITestResult.getName()
...
编辑:为清楚起见,在您的Demo.java中,每种方法都可以执行以下操作:
ITestResult tr = Reporter.getCurrentTestResult();
tr.setName( "whatever name you want to give your test step" );
然后,您可以进行其余的测试(断言等)。稍后,在DemoListener.java中,您已经传递了一个ITestResult实例,您可以通过调用
arg0.getName()
来简单地询问它的名称(在上面的代码中设置的名称)。