testng自定义注解
在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中引用监听的方式有很多种,采用一种即可
testng自定义注解的更多相关文章
- SpringAOP03 项目脚手架、自定义注解、织入切面、引介增强
1 项目脚手架 利用 Maven 进行创建 1.1 利用IDEA创建一个Maven原型项目 技巧01:原型Maven项目是没有webapp文件夹和resources项目文件夹的,需要自己手动创建:创建 ...
- 【转】TestNG常用注解
http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...
- java自定义注解类
一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...
- Jackson 通过自定义注解来控制json key的格式
Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换.而这个替换过程是需要依赖一个第三方的dubbo服务的.为了使得这个转换 ...
- 自定义注解之运行时注解(RetentionPolicy.RUNTIME)
对注解概念不了解的可以先看这个:Java注解基础概念总结 前面有提到注解按生命周期来划分可分为3类: 1.RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成clas ...
- JAVA自定义注解
在学习使用Spring和MyBatis框架的时候,使用了很多的注解来标注Bean或者数据访问层参数,那么JAVA的注解到底是个东西,作用是什么,又怎样自定义注解呢?这篇文章,即将作出简单易懂的解释. ...
- 用大白话聊聊JavaSE -- 自定义注解入门
注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因: 1. 可以更深层次地学习Java,理解Java的思想. 2. 有了注解的基础,能够方便阅读各种框架的源码,比如 ...
- [javaSE] 注解-自定义注解
注解的分类: 源码注解 编译时注解 JDK的@Override 运行时注解 Spring的@Autowired 自定义注解的语法要求 ① 使用@interface关键字定义注解 ② 成员以无参无异常方 ...
- 使用spring aspect控制自定义注解
自定义注解:这里是一个处理异常的注解,当调用方法发生异常时,返回异常信息 /** * ErrorCode: * * @author yangzhenlong * @since 2016/7/21 */ ...
随机推荐
- spring框架中@PostConstruct的实现原理
在spring项目经常遇到@PostConstruct注解,首先介绍一下它的用途: 被注解的方法,在对象加载完依赖注入后执行. 此注解是在Java EE5规范中加入的,在Servlet生命周期中有一定 ...
- php 多维数组相同键值处理合并
一.前言 在实际情况中,有时需要针对多维数组相同键值作相应的处理(四则运算.比较大小等)后才能够使用到实际情况中,现给出三维数组(多维数组可相应拓展)任意多个相同键值处理的函数,以备查阅. 二.代码 ...
- Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/config/springdemo-config.xml]
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML doc ...
- Charles Dickens【查尔斯·狄更斯】
Charles Dickens In 1812, the year Charles Dickens was born, there were 66 novels published in Britai ...
- NOIP PJ游记
Day -1 感觉自信满满,一等奖应该稳了,毕竟初一时我这么菜都拿了二等奖,然后就睡觉了... Day 1 在大巴上玩元气骑士可开心了,车上欢欢喜喜,到了考场,一眼看题,以为很简单. T1硬模拟... ...
- 11-Json文件配置
1-新建json文件, 设置json文件生成的方式 { "ClassNo": "1", "ClassDesc": "Asp.net ...
- Mysql 表转换成 Sqlite表
目前的转换仅仅支持对没有外键的Mysql数据表 准备: 下载安装 Sqlite Expert 软件 一 获取Mysql中的.sql文件,获取过程省略可以直接导出sql文件 二 在Sqlite Expe ...
- Maven项目Update Project自动恢复为JRE1.5的问题
问题: 使用Eclipse建立Maven项目的时候,JDK默认为1.5在用户使用Config Build Path更新为最新JRE库比如1.8或者1.7的后,Maven项目显示JRE1.8 or 1. ...
- java 值传递 和 引用传递
参考:(http://www.cnblogs.com/woshimrf/p/5263018.html) 参考:(http://www.cnblogs.com/binyue/p/3862276.html ...
- MyEclipse - 问题集 - maven update project 后,项目jdk的版本变化
解决方法: 进入maven安装根目录,conf/settings.xml <profiles> <profile> <id>jdk-1.7</id> & ...