TestNg自定义注解


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


转载于:https://my.oschina.net/u/1425843/blog/603774

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值