在testng中大部分的注解已经可以满足我们测试的需求,但是在测试的时候想要通过注解的方式加入自己测试一些内容,比如 测试项目 测试描述  验证点等信息,可通过自定义注解的方式实现。

具体操作步骤如下:

1.创建maven工程

自行查询创建maven工程的方法

2.pom文件中引入testng依赖

    <!-- 配置testng依赖 -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.8</version>
</dependency>

  

3.创建自定义注解类

package com.test.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestDescription {
//测试项
public String item() default "";
//测试描述
public String description() default "";
//验证点
public String verification() default "";
}

  

4.创建监听

package com.test.annotation;

import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGMethod;
import org.testng.ITestResult; public class MyAnnotationListener implements IInvokedMethodListener, ITestListener { public String item;
public String description;
public String verification; public void onTestStart(ITestResult result) {
System.out.println("onTestStart");
item = result.getMethod().getConstructorOrMethod().getMethod().getAnnotation(TestDescription.class).item();
description = result.getMethod().getConstructorOrMethod().getMethod().getAnnotation(TestDescription.class).description();
verification = result.getMethod().getConstructorOrMethod().getMethod().getAnnotation(TestDescription.class).verification();
System.out.println("item: " + item + " description: " + description);
System.out.println("verification: " + verification);
} public void onTestSuccess(ITestResult result) {
System.out.println("onTestSuccess"); } public void onTestFailure(ITestResult result) {
System.out.println("onTestFailure"); } public void onTestSkipped(ITestResult result) {
System.out.println("onTestSkipped"); } public void onStart(ITestContext context) {
System.out.println("onStart");
for(ITestNGMethod m1 : context.getAllTestMethods()) {
if(m1.getConstructorOrMethod().getMethod().isAnnotationPresent(TestDescription.class)) {
item = m1.getConstructorOrMethod().getMethod().getAnnotation(TestDescription.class).item();
description = m1.getConstructorOrMethod().getMethod().getAnnotation(TestDescription.class).description();
verification = m1.getConstructorOrMethod().getMethod().getAnnotation(TestDescription.class).verification();
System.out.println("onStart_item:"+item);
System.out.println("onStart_description:"+description);
System.out.println("onStart_verification:"+verification);
}
} } public void onFinish(ITestContext context) {
System.out.println("onFinish"); } @Override
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
// TODO Auto-generated method stub } @Override
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
// TODO Auto-generated method stub } @Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub } }

  

5.创建测试类,并引用Listener

package com.test.annotation;

import org.testng.annotations.Listeners;
import org.testng.annotations.Test; @Listeners(com.test.annotation.MyAnnotationListener.class)
public class TestMyAnnotationListener { @TestDescription(item = "测试项1", description="描述1;",verification="验证1")
@Test
public void test001(){
System.out.println("运行test001");
} @TestDescription(item = "测试项2", description="描述2;",verification="验证2")
@Test
public void test002(){
System.out.println("运行test002");
}
}
@Listeners(com.test.annotation.MyAnnotationListener.class)  此行代码为引用监听

6.运行测试类结果如下:
onStart
onStart_item:测试项1
onStart_description:描述1;
onStart_verification:验证1
onStart_item:测试项2
onStart_description:描述2;
onStart_verification:验证2
onTestStart
item: 测试项1 description: 描述1;
verification: 验证1
运行test001
onTestSuccess
onTestStart
item: 测试项2 description: 描述2;
verification: 验证2
运行test002
onTestSuccess
onFinish
PASSED: test001
PASSED: test002 ===============================================
Default test
Tests run: 2, Failures: 0, Skips: 0
=============================================== ===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
=============================================== [TestNG] Time taken by org.testng.reporters.JUnitReportReporter@3551a94: 6 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@614c5515: 25 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@6be46e8f: 29 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@7225790e: 3 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@6537cf78: 5 ms

testng中引用监听的方式有很多种,采用一种即可

 

最新文章

  1. 一步步学习javascript基础篇(0):开篇索引
  2. 【安装Redis】CentOS7 下安装NodeJs+Express+MongoDB+Redis
  3. apache配置反向代理
  4. 浅入浅出EmguCv(三)EmguCv打开指定视频
  5. 【转载】NuGet镜像上线试运行
  6. WebHeaderCollection 类
  7. Ubuntu 一键安装pptp
  8. 如何给你的VS2010添加创建文件后的头注释
  9. git初探
  10. JavaScript自定义方法实现trim()、Ltrim()、Rtrim()
  11. 关于学习Scala语言的一些感悟
  12. springMvc解决json中文乱码
  13. keil 51启动代码
  14. kafka Disks and Filesystem(磁盘和文件系统)
  15. 一、Snapman多人协作电子表格之——Snapman自我介绍
  16. Hadoop基础-MapReduce的工作原理第一弹
  17. PHP封装成应用程序的三个方案
  18. MySQL event调度
  19. python-memcached模块
  20. Gson把对象转成json格式的字符串

热门文章

  1. ubuntu修改IP地址和网关的方法
  2. winrar压缩工具
  3. Allowed memory size of 134217728 bytes exhausted (tried to allocate 2 bytes)
  4. php-5.6.26源代码 - 扩展模块的加载、注册
  5. php扩展开发-资源类型
  6. Python全栈day 01
  7. iOS-修改modal出来的控制器的大小
  8. 浅谈UWB(超宽带)室内定位技术(转载)
  9. C++基础 new和delete
  10. 笔记-python异常信息输出