你好,我有一个简单的 testNG 项目,它有一个SampleTest.java
类文件,里面有2个测试用例,我已经添加了一个名为MyListener的监听器。为此,我有一个MyListener.java
类文件,它扩展了TestNG的 TestListener ,我在打印时传递或失败或跳过,具体取决于测试用例的执行情况。因此,每次运行SampleTest时,我都可以在控制台中看到Pass / fail ..但我希望它与classname
我的问题陈述是,如何在MyListener类中获取测试用例文件名(即Sampletest)??? 我尝试使用stacktrace但没有帮助..因为我猜它不是被调用,但它只是在文件中对测试用例进行操作。请让我知道如何在听众中获得该类的名称????
SampleTest.java:
package com.abc;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners({ com.mindtree.MyListener.class})
public class SampleTest {
@Test
public void SampleTest() throws Exception{
System.out.println("Hello world");
}
@Test
public void SampleTest1() throws Exception{
System.out.println("Hello Swarna");
}
}
MyListener.java:
package com.abc;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class MyListener extends TestListenerAdapter {
private int m_count = 0;
@Override
public void onTestFailure(ITestResult tr) {
log("Fail");
}
@Override
public void onTestSkipped(ITestResult tr) {
log("Skipped");
}
@Override
public void onTestSuccess(ITestResult tr) {
log("\nSuccess\n");
## WANT TO PRINT HERE THE TESTCASE CLASS NAME
}
private void log(String string) {
System.out.print(string);
if (++m_count % 40 == 0) {
System.out.println("");
}
}
}
但不适用于多个测试用例文件..只需在MyListener中创建SampleTest对象,通过getter和setter访问类名
答案 0 :(得分:1)
发布的解决方案都没有为我工作,但是我发现通过以下方式访问“ITestResult”对象可以获得所需的信息:
public void onTestSuccess(ITestResult result) {
log("\nSuccess\n");
String className = result.getInstanceName();
log(className);
}
注意:上面的代码已在我的环境中成功测试
答案 1 :(得分:0)
您可以通过检查堆栈跟踪来找到:
StackTraceElement trace [] = Thread.currentThread()。getStackTrace(); 你可以通过trace [i] .getClassName()获得调用类。
请注意,这非常昂贵,所以不要在记录器等中使用。
答案 2 :(得分:0)
使用beforeMethod方法,您可以在其中获取方法的名称
@BeforeMethod
public void beforeMethod(final Method method) throws Exception {
String testName = method.getName();
}
答案 3 :(得分:0)
您可以访问ITestResult对象,因此您应该能够:
public void onTestSuccess(ITestResult tr) {
String className = tr.getMethod().getTestClass().getName();
System.out.println(className);
}
答案 4 :(得分:0)
根据您的描述,我了解您希望获得@Test带注释的测试方法所在的类的名称,以及只有没有包名称的类名
在您的情况下,将是输出:" SampleTest"。
您可以通过以下方式实现此目的:
public void onTestSuccess(ITestResult tr) {
log("\nSuccess\n");
String className = tr.getTestClass().getRealClass().getSimpleName()
log(className);
}
@JacekM的解决方案也可以正常工作,但在你的情况下会返回" com.abc.SampleTest"