TestNg之监听器@Listener
@Listener位置
和其他的注解放在方法上不同,@Listener是放在类上的
@Listener注解内容
首先我们来看一下@Listener这个注解里面是什么
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package org.testng.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.testng.ITestNGListener; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface Listeners { Class<? extends ITestNGListener>[] value() default {}; }
发现这里需要一个extends过ITestNGListener的接口
那我们就来看一下ITestNGListener这个接口是什么
ITestNGListener和ITestListener
emmmm,空的
复制代码
1
2
3
4
5
6
7
8
9
10// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package org.testng; public interface ITestNGListener { }
但是仔细看一下它下面的接口,发现很多接口都extends过ITestNGListener,其中就有ITestListener,就是我们要实习的
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package org.testng; public interface ITestListener extends ITestNGListener { void onTestStart(ITestResult var1); void onTestSuccess(ITestResult var1); void onTestFailure(ITestResult var1); void onTestSkipped(ITestResult var1); void onTestFailedButWithinSuccessPercentage(ITestResult var1); void onStart(ITestContext var1); void onFinish(ITestContext var1); }
我们要做的是就是来implements这个接口
我们要做的是就是来implements这个接口
实现ITestListener接口
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45package com.newcrud.learn; import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; public class MyTestNgListener implements ITestListener { @Override public void onTestStart(ITestResult iTestResult) { System.out.println("onTestStart仅在启动任何测试方法时才调用onTestStart()"+iTestResult.getName()); } @Override public void onTestSuccess(ITestResult iTestResult) { System.out.println("onTestSuccess用例执行成功"+iTestResult.getName()); } @Override public void onTestFailure(ITestResult iTestResult) { System.out.println("onTestFailure用例执行失败"+iTestResult.getName()); } @Override public void onTestSkipped(ITestResult iTestResult) { //就比如你的一个方法依赖的方法执行失败了,导致你这个方法被跳过了,这个时候你就可以对跳过执行的用例进行一种补偿措施 System.out.println("onTestSkipped跳过测试"+iTestResult.getName()); } @Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println("emmm,这个我也不知道干什么的,但是平时也不用"); } @Override public void onStart(ITestContext iTestContext) { System.out.println("onStart在任何测试方法开始时执行"+iTestContext.getName()); } @Override public void onFinish(ITestContext iTestContext) { System.out.println("onFinish任何测试用例完成执行时, 都会调用onFinish()"+iTestContext.getName()); } }
如何使用Listener
在测试类上加@Linstener
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24package com.newcrud.testngTest; import org.testng.Assert; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners({com.newcrud.learn.MyTestNgListener.class}) public class TestFour { @Test public void testZ(){ System.out.println("Z"); } @Test() public void testY(){ System.out.println("Y"); Assert.assertEquals(1,2); } @Test(dependsOnMethods = {"testY"}) public void testM(){ System.out.println("我要被skip了"); } }
执行结果
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51onStart在任何测试方法开始时执行NewCRUD onTestStart仅在启动任何测试方法时才调用onTestStart()testY Y onTestFailure用例执行失败testY java.lang.AssertionError: Expected :2 Actual :1 <Click to see difference> at org.testng.Assert.fail(Assert.java:94) at org.testng.Assert.failNotEquals(Assert.java:513) at org.testng.Assert.assertEqualsImpl(Assert.java:135) at org.testng.Assert.assertEquals(Assert.java:116) at org.testng.Assert.assertEquals(Assert.java:389) at org.testng.Assert.assertEquals(Assert.java:399) at com.newcrud.testngTest.TestFour.testY(TestFour.java:16) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104) at org.testng.internal.Invoker.invokeMethod(Invoker.java:645) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112) at org.testng.TestRunner.privateRun(TestRunner.java:756) at org.testng.TestRunner.run(TestRunner.java:610) at org.testng.SuiteRunner.runTest(SuiteRunner.java:387) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340) at org.testng.SuiteRunner.run(SuiteRunner.java:289) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293) at org.testng.TestNG.runSuitesLocally(TestNG.java:1218) at org.testng.TestNG.runSuites(TestNG.java:1133) at org.testng.TestNG.run(TestNG.java:1104) at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66) at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109) onTestStart仅在启动任何测试方法时才调用onTestStart()testZ Z onTestSuccess用例执行成功testZ onTestSkipped跳过测试testM Test ignored. onFinish任何测试用例完成执行时, 都会调用onFinish()NewCRUD
在xml文件上添加Listener
将测试类上的@Listener注解去掉,放到xml文件中
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="All Test Suite"> <listeners> <listener class-name="com.newcrud.learn.MyTestNgListener"></listener> </listeners> <test name="testonly"> <classes> <class name="com.newcrud.testngTest.TestFour"></class> </classes> </test> </suite>
结果
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51onStart在任何测试方法开始时执行testonly onTestStart仅在启动任何测试方法时才调用onTestStart()testY Y java.lang.AssertionError: Expected :2 Actual :1 <Click to see difference> at org.testng.Assert.fail(Assert.java:94) at org.testng.Assert.failNotEquals(Assert.java:513) at org.testng.Assert.assertEqualsImpl(Assert.java:135) at org.testng.Assert.assertEquals(Assert.java:116) at org.testng.Assert.assertEquals(Assert.java:389) at org.testng.Assert.assertEquals(Assert.java:399) at com.newcrud.testngTest.TestFour.testY(TestFour.java:14) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104) at org.testng.internal.Invoker.invokeMethod(Invoker.java:645) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112) at org.testng.TestRunner.privateRun(TestRunner.java:756) at org.testng.TestRunner.run(TestRunner.java:610) at org.testng.SuiteRunner.runTest(SuiteRunner.java:387) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340) at org.testng.SuiteRunner.run(SuiteRunner.java:289) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293) at org.testng.TestNG.runSuitesLocally(TestNG.java:1218) at org.testng.TestNG.runSuites(TestNG.java:1133) at org.testng.TestNG.run(TestNG.java:1104) at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66) at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109) onTestFailure用例执行失败testY onTestStart仅在启动任何测试方法时才调用onTestStart()testZ Z onTestSuccess用例执行成功testZ Test ignored. onTestSkipped跳过测试testM onFinish任何测试用例完成执行时, 都会调用onFinish()testonly
最后
以上就是健壮皮带最近收集整理的关于TestNg之监听器@ListenerTestNg之监听器@Listener的全部内容,更多相关TestNg之监听器@ListenerTestNg之监听器@Listener内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复