在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");  }@Overridepublic void beforeInvocation(IInvokedMethod method, ITestResult testResult) {// TODO Auto-generated method stub}@Overridepublic void afterInvocation(IInvokedMethod method, ITestResult testResult) {// TODO Auto-generated method stub}@Overridepublic 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 testTests 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中引用监听的方式有很多种,采用一种即可

 

转载于:https://www.cnblogs.com/lincj/p/7016210.html

testng自定义注解相关推荐

  1. 【转】TestNG常用注解

    http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...

  2. java 自定义注解 解析_java自定义注解

    1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的c ...

  3. java获取注解的属性值_反射+自定义注解,实现获取注解标记的属性

    目标:通过自定义注解 @Ignore 注解,觉得是否读取指定类的属性. 运行结果: [main] INFO util.FruitInfoUtil -水果的名字为:entity.Apple [main] ...

  4. Spring AOP与IOC以及自定义注解

    Spring AOP实现日志服务 pom.xml需要的jar <dependency><groupId>org.apache.commons</groupId>&l ...

  5. spring -- 自定义注解

    我们直接通过代码解释自定义注解的使用及各个含义 package com.sysware.cloud.dts.annotation;import java.lang.annotation.*; @Ret ...

  6. 谈谈 Java 中自定义注解及使用场景

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:快给我饭吃 www.jianshu.com/p/a7bedc ...

  7. 自定义注解妙用,一行代码搞定用户操作日志记录,你学会了吗?

    来源:https://blog.csdn.net/yjt520557/article/details/85099115 | 简介 我在使用spring完成项目的时候需要完成记录日志,我开始以为Spri ...

  8. 自定义注解!绝对是程序员装大佬的利器!!

    作者 l Hollis 来源 l Hollis(ID:hollischuang) 相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override.@Autowired.@Servi ...

  9. 自定义注解实现日志脱敏

    2019独角兽企业重金招聘Python工程师标准>>> 第一步:定义注解 /**  * 说明:自定义注解  * @author T-xul3  * @date  2016年9月9日 ...

  10. spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例...

    本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...

最新文章

  1. R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数
  2. OceanBase技术直播间开播啦!蚂蚁金服技术专家手把手教你搭建OB数据库~
  3. mysql光标不见了_mysql创建光标失败
  4. Linux资料分享,强势来袭!
  5. [蓝桥杯][算法提高VIP]质数的后代-质数筛
  6. P5904-[POI2014]HOT-Hotels加强版【长链剖分,dp】
  7. SPFILE 、PFILE 的全面解读
  8. python后端数据发送到前端_Python Django 前后端数据交互 之 后端向前端发送数据...
  9. 保留12位小数的浮点数(信息学奥赛一本通-T1025)
  10. Binary Tree Paths
  11. robocode 创建机器人
  12. 【数据结构-链表】malloc函数头文件
  13. WordPress小程序搭建之免费开源小程序
  14. 地理空间数据云 如何预约下载数据 Landsat8
  15. cat环境搭建及springboot项目接入
  16. P1069 微博转发抽奖
  17. Flash制作卷轴水墨画展开动画效果
  18. Codewars-Java编程刷题学习4-Jaden Casing Strings
  19. 前端_http协议_html语言headbody基本介绍和用法
  20. 修改加入SGE集群某队列里各个执行机的cpu数(slots)

热门文章

  1. 三列自适应布局(圣杯布局)
  2. CMMI5访谈学习笔记(项目经理角色)(转)
  3. Javascript常见设计模式解析
  4. Linux 内核与模块调试
  5. 解析大型.NET ERP系统 自动更新
  6. 安装phpDocumentor
  7. 实施ERP过程中必须注意的“后天条件”
  8. 微波烹调,营养损失多or少?
  9. Android应用程序层的作用,Android应用程序框架-004.bean层
  10. nodejs后台系列--第五篇-购买云服务器,安装宝塔面板