我正在尝试向我的TestNG测试类添加一个Listener。
听众MyListener
是:
package somepackage.util;
import org.testng.ITestContext;
import org.testng.TestListenerAdapter;
public class MyListener extends TestListenerAdapter {
@Override
public void onFinish(ITestContext testContent) {
System.out.println("onFinish");
}
}
对于测试类SimpleTest
,我有:
package somepackage;
import somepackage.util.MyListener;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners({ MyListener.class })
public class SimpleTest {
@Test
public void test() {
System.out.println("Running test...");
Assert.assertTrue(true);
}
}
XML是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SomeTests">
<listeners>
<!--listener class-name="somepackage.util.MyListener" /-->
</listeners>
<test name="SimpleTest">
<classes>
<class name="somepackage.SimpleTest" />
</classes>
</test>
</suite>
输出是(很多路径切割):
<snip>
[Parser] Running:
<snip>/test.xml
Running test...
===============================================
SomeTests
Total tests run: 1, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0
当我将XML中的注释更改为实际元素时:
<listener class-name="somepackage.util.MyListener" />
有效:
<snip>
[Parser] Running:
<snip>/test.xml
Running test...
onFinish
===============================================
SomeTests
Total tests run: 1, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0
在XML工作正常的情况下,为什么会忽略Annotation的任何想法?我可以使用XML,但我也希望能够使用注释。
如果重要,我正在使用IntelliJ IDEA 14和Java 7运行测试。
答案 0 :(得分:2)
问题是依赖性问题。在我的pom.xml
中,我依赖于一些本身依赖于TestNG 5.11的类。这个工作非常好,直到我发现我无法使用@Listeners
注释。
使用命令
mvn dependency:tree
我能够弄清楚我有错误的依赖关系。为了摆脱它们,我必须根据TestNG 5.11更改工件周围的pom.xml
:
<dependency>
<groupId>some.group.id</groupId>
<artifactId>the.artifact.id</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
</dependency>
之后,正确的TestNG依赖工作正常,我可以使用我的Listener。
旁注:例如,对于从5.11到6.9.6的版本,retryAnalyzers和Listeners的调用发生了显着变化,我猜它已经这么做了很多次。例如,关于STO处理&#34;如何修复最终通过&#34;的重试测试的报告,有很多问题。 - 我发现这些方法都不适合我,所以我自己想出了一个。这与问题并不完全相关,但我只是希望您确保仔细检查是否按预期调用了侦听器和分析器,并在修复依赖项后按预期工作。
答案 1 :(得分:0)
使用网络驱动程序测试失败时拍摄屏幕截图的示例
public class DriverEventListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult testResult) {
if(testResult.getInstance() instanceof AutomationSupport){
AutomationSupport instance = (AutomationSupport) testResult.getInstance();
Driver driver = instance.getDriver();
File scrFile = ((TakesScreenshot) driver.getDriver()).getScreenshotAs(OutputType.FILE);
String name = testResult.getMethod().getMethodName()+"__"+System.currentTimeMillis();
try {
FileUtils.copyFile(scrFile, new File("\\\\127.0.0.1\\MetadorScreenShot\\\\"+name+".jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onTestSuccess(ITestResult testResult) {
super.onTestSuccess(testResult);
}
}