文档章节

TestNg自定义注解

测试dog
 测试dog
发布于 2016/01/17 14:36
字数 608
阅读 108
收藏 0


1.源码地址

https://github.com/cbeust/testng/

2.在org.testng.annotations.Test中添加需要增加的注解


/**
   * case author
   * @return
   */
  public String author() default "";
  
  /**
   * case level
   * @return
   */
  public String level() default "";
  添加完之后,引用@Test注解,即可使用author、level了。但是在运行过程中,我们还需要在报告中体现author和level的值


3.在org.testng.annotations.Configuration中增加新添加的注解


public String author() default "";
  
  public String level() default "";
4.在org.testng.internal.annotations.TestOrConfiguration中增加author和level的getter和setter方法
@Override
	public String getAuthor() {
		return m_author;
	}

	@Override
	public void setAuthor(String author) {
		m_author = author;
	}

	@Override
	public String getLevel() {
		return m_level;
	}

	@Override
	public void setLevel(String level) {
		m_level = level;
	}

5.在org.testng.internal.ITestNGMethod增加author和level的get、set方法,并且在org.testng.internal.BaseTestMethod类中实现方法,由于继承关系很多,有部分类中需要定义author和level的方法,但是不用去实现,报错的地方一一添加即可



6.修改org.testng.internal.annotations.JDK15TagFactory的重定义一个createConfigurationTag方法,增加author和level字段


private IAnnotation createConfigurationTag(Class<?> cls, Annotation a,
      boolean beforeSuite, boolean afterSuite,
      boolean beforeTest, boolean afterTest,
      String[] beforeGroups, String[] afterGroups,
      boolean beforeClass, boolean afterClass,
      boolean beforeMethod, boolean afterMethod,
      boolean alwaysRun,
      String[] dependsOnGroups, String[] dependsOnMethods,
      String description, String author, String level, boolean enabled, String[] groups,
      boolean inheritGroups, String[] parameters,
      boolean firstTimeOnly, boolean lastTimeOnly,
      long timeOut)
  {
    ConfigurationAnnotation result = new ConfigurationAnnotation();
    result.setFakeConfiguration(true);
    result.setBeforeSuite(beforeSuite);
    result.setAfterSuite(afterSuite);
    result.setBeforeTest(beforeTest);
    result.setAfterTest(afterTest);
    result.setBeforeTestClass(beforeClass);
    result.setAfterTestClass(afterClass);
    result.setBeforeGroups(beforeGroups);
    result.setAfterGroups(afterGroups);
    result.setBeforeTestMethod(beforeMethod);
    result.setAfterTestMethod(afterMethod);
    result.setAlwaysRun(alwaysRun);
    result.setDependsOnGroups(dependsOnGroups);
    result.setDependsOnMethods(dependsOnMethods);
    result.setDescription(description);
    result.setAuthor(author);
    result.setLevel(level);
    result.setEnabled(enabled);
    result.setGroups(groups);
    result.setInheritGroups(inheritGroups);
    result.setParameters(parameters);
    result.setFirstTimeOnly(firstTimeOnly);
    result.setLastTimeOnly(lastTimeOnly);
    result.setTimeOut(timeOut);

    return result;
  }
修改本类中的createTestTag方法,将author和level的值放入result中



result.setAuthor(findInherited(test.author(), cls, Test.class, "author", DEFAULT_STRING));
    result.setLevel(findInherited(test.level(), cls, Test.class, "level", DEFAULT_STRING));

7.在xml报告中使用我们新增加的字段

org.testng.reporters.XMLReporterConfig中增加字段


public static final String ATTR_AUTHOR = "author";
  public static final String ATTR_LEVEL = "level";



org.testng.reporters.XMLSuiteResultWriter的getTestResultAttributes方法中增加author和level



String author = testResult.getMethod().getAuthor();
    if(!Utils.isStringEmpty(author)) {
    	attributes.setProperty(XMLReporterConfig.ATTR_AUTHOR, author);
    }
    String level = testResult.getMethod().getLevel();
    if(!Utils.isStringEmpty(level)) {
    	attributes.setProperty(XMLReporterConfig.ATTR_LEVEL, level);
    }



8.测试一下



public class Demo1 {
  @Test(testName="ddd", groups={"a"},description="这是用例描述",author="我是作者啊",level="11")
  public void f() {
	  System.out.println("实例:testng注解");
  }
}



右键运行下,查看testng-results.xml



ok!成功看到新增加的字段了,折腾了两个周末也算没有白费。接下来就是自定义报告监听器,将结果存入对应的数据库表中


© 著作权归作者所有

共有 人打赏支持
测试dog
粉丝 7
博文 16
码字总数 1905
作品 0
闵行
QA/测试工程师
私信 提问
19 Web自动化测试 -- 参数化

在做自动化测试中,参数化非常常见。例如你希望你的自动化脚本能在不同的环境中执行。 当然参数化的方式非常多,例如可以把环境变量存放在文本中,excel文件中或者配置文件中等等,然后去写段...

米阳MeYoung
2018/07/03
0
0
Appium测试开源中国登录实例》执行出错

@金龙鱼管家 你好,想跟你请教个问题: 《Appium测试开源中国登录实例》 这个我执行出来的结果不知道为什么会这样,不懂哪里出了问题,能否帮忙看下呢???? [RemoteTestNG] detected Test...

hxl215
2017/09/14
21
0
TestNG 使 Java 单元测试轻而易举

JUnit 框架是 Java 语言单元测试当前的一站式解决方案。这个框架值得称赞,因为它把测试驱动的开发思想介绍给 Java 开发人员并教给他们如何有效地编写单元测试。但是,在过去的几年中,JUnit...

红薯
2009/10/17
1K
1
两种方法安装TestNG Eclipse插件

两种方法可以安装TestNG Eclipse插件: 第一种,离线安装 TestNG Eclipse插件下载地址http://testng.org/doc/download.html。 包下载地址http://download.csdn.net/detail/itkong/9226441 下...

张小贤
2015/10/29
0
0
25 extentreports/allure美化测试报告

最近好多在微信问关于测试报告生成问题。其实TestNG执行结果就已经自带了测试报告,只是比较丑。 这里我就顺便推荐下另外的两种Report,但是文档我就不细写了,只大概写下用法。 extentrepo...

米阳MeYoung
2018/08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

matlab-自控原理 step、impulse 阶跃、脉冲响应 已知传递函数

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   已知传递函数,求其阶跃响应......

志成就
10分钟前
0
0
JDBC事务操作

事务特点:ACID 原子性(Atomicity):事务管理的系列操作必须全部完成,否则就算失败(类似操作系统的PV原语、信号量) 一致性(Consistency):同一个事务只要起始条件一致最终执行的结果一致 隔...

ZeroneLove
12分钟前
0
0
【scala】3.数组相关操作

简介 在本章中,我们将会学到如何在scala中操作数组。 1、定长数组 // 初始化长度为10的定长数组,每一个元素的值为0val nums = new Array[Int](10)// nums: Array[Int] = Array(0, 0, 0, ...

Areya
13分钟前
0
0
教你零基础如何快速入门大数据技巧

现在是大数据时代,很多人都想要学习大数据,因为不管是就业前景还是薪资都非常的不错,不少人纷纷从其他行业转型到大数据行业,那么零基础的人也想要学习大数据怎么办呢?下面一起探讨下零基...

董黎明
22分钟前
0
0
Nginx 配置 root目录、虚拟目录alias

Nginx是通过 alias 设置虚拟目录,在Nginx的配置中,alias目录和root目录是有区别的。 alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的; root指定...

Yue_Chen
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部