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 */ ...
随机推荐
- Ubuntu 下安装GIMP
1.Add GIMP PPA Open terminal from Unity Dash, App launcher, or via Ctrl+Alt+T shortcut key. When it ...
- C细节错误
2018.11.20 (1)有关优先级的细节 while (c = getchar() && c == '\n') { printf("c = %d\n", c); ...
- POJ:3104-Drying(神奇的二分)
Drying Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20586 Accepted: 5186 Description I ...
- POJ:3190-Stall Reservations
传送门:http://poj.org/problem?id=3190 Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total ...
- 笔记-DB-mongodb-常用操作-1
笔记-DB-mongodb-常用操作-1 1. 启动及连接 1.1. 启动 启动mongod windows下: 1. 如已添加服务 net start <service name> ...
- PHP.17-文本式留言板
文本式留言板 思路: 1.首页:index.php 添加/查看信息界面 单纯的表单页面,注意留言内容为文本域<textarea> 2.添加信息页面:doAdd.php 1.获取要添加的留 ...
- border与透明边框
1.背景:怎样增加复选框响应域的大小?就是,复选框点击区域增大一些 需求复选框的视觉区域大小(不含边框)是16px*16px 现在要把可点击区域增加到20px*20px 解决方案: box-shado ...
- 简洁好看的form样式收藏
本文转载自 http://www.laozuo.org/3495.html 为了方便自己查阅所以搬运过来,如有侵权希望原作者联系我删除不要突然去法院告我呀! 颜色样式啥的都可以根据需求自己调整的,这些 ...
- samba server on Mac OS X Lion Server
一般Mac共享通过配置wins,smb即可实现.注意在同一个工作组! 参考:http://computers.tutsplus.com/tutorials/how-to-set-up-an-smb-s ...
- 《Cracking the Coding Interview》——第6章:智力题——题目3
2014-03-20 00:48 题目:有3升的瓶子和5升的瓶子,只允许倒满.倒到满为止.或是泼光三种操作,怎么搞出4升水呢? 解法:如果A和B是互质的两个正整数,且A<B,令X=B-A,则(X ...