`
longgangbai
  • 浏览: 7330224 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

TestNG简单的学习(九)TestNG Method Interceptors 的使用

阅读更多

 

TestNG官方网站:

http://testng.org/doc/documentation-main.html

 

官方文档:

5.16 - Method Interceptors
Once TestNG has calculated in what order the test methods will be invoked, these methods are split in two groups:
Methods run sequentially. These are all the test methods that have dependencies or dependents. These methods will be run in a specific order.
Methods run in no particular order. These are all the methods that don't belong in the first category. The order in which these test methods are run is random and can vary from one run to the next (although by default, TestNG will try to group test methods by class).
In order to give you more control on the methods that belong to the second category, TestNG defines the following interface: public interface IMethodInterceptor { 

    

  List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context); 

  

}
The list of methods passed in parameters are all the methods that can be run in any order. Your intercept method is expected to return a similar list of IMethodInstance, which can be either of the following:
The same list you received in parameter but in a different order.
A smaller list of IMethodInstance objects.
A bigger list of IMethodInstance objects.
Once you have defined your interceptor, you pass it to TestNG as a listener. For example:

Shelljava -classpath "testng-jdk15.jar:test/build" org.testng.TestNG -listener test.methodinterceptors.NullMethodInterceptor 

   -testclass test.methodinterceptors.FooTest
For the equivalent ant syntax, see the listeners attribute in the ant documentation.
For example, here is a Method Interceptor that will reorder the methods so that test methods that belong to the group "fast" are always run first:

/**
 * 
 */
package com.easyway.testng.junit;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.testng.IMethodInstance;
import org.testng.IMethodInterceptor;
import org.testng.ITestContext;
import org.testng.annotations.Test;

/**
 * @author longgangbai 2013-11-29 下午4:31:40
 * 
 */
public class MyMethodInterceptor implements IMethodInterceptor {

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.testng.IMethodInterceptor#intercept(java.util.List,
	 * org.testng.ITestContext)
	 */
	@Override
	public List<IMethodInstance> intercept(List<IMethodInstance> methods,
			ITestContext context) {
		List<IMethodInstance> result = new ArrayList<IMethodInstance>();

		for (IMethodInstance m : methods) {
			Test test = m.getMethod().getConstructorOrMethod().getMethod()
					.getAnnotation(Test.class);
			Set<String> groups = new HashSet<String>();
			for (String group : test.groups()) {
				groups.add(group);
			}
			System.out.println("groups +"+groups );
			if (groups.contains("fast")) {
				result.add(0, m);
			} else {
				result.add(m);
			}
		}
		return result;
	}
}

 

 

/**
 * 
 */
package com.easyway.testng.junit;

import org.testng.annotations.Test;

/**
 * @author longgangbai
 * 2013-11-29  下午4:36:54
 *
 */
public class MyMethodInterceptorTest {
	@Test(groups={"fast"})
	public void test1() { 
		System.out.println("=================test1=============");
	}  

	   
    
	@Test
	public void test2() {  
		System.out.println("=================test2=============");
	} 
	@Test(groups="init")
	public void test3() {  
		System.out.println("=================test3=============");
	} 
}

 

package com.easyway.testng.junit;

import org.testng.TestNG;

/**
 * @author longgangbai
 * 2013-11-29  下午4:20:51
 *
 */
public class MyMethodInterceptorTestMain {

	public static void main(String[] args) {
		TestNG tng = new TestNG();  
		tng.addListener( new MyMethodInterceptor());
		tng.setTestClasses(new Class[]{MyMethodInterceptorTest.class});
		tng.run();
	}
}

 测试结果:

[TestNG] Running:
  Command line suite

groups +[fast]
groups +[]
groups +[init]
groups +[fast]
groups +[]
groups +[init]
=================test1=============
=================test2=============
=================test3=============

===============================================
Command line suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

 

 

分享到:
评论

相关推荐

    TestNG中文手册学习笔记

    本教程的目标读者是希望学习 TestNG 的软件专业人员,要求读者具备基本的 Java 编程知识、文本编辑器的使用经验以及对软件开发和测试流程的理解。TestNG 相较于 JUnit,克服了如下的局限性: 1. 初始设计仅针对单元...

    testNG单元测试学习总结

    ### TestNG单元测试学习总结 #### 一、TestNG框架简介 **1.1 概念** TestNG(Test Next Generation)是一个高级测试框架,它继承了JUnit与NUnit的优点,并在此基础上添加了许多新的功能。TestNG是一个开源的、...

    testng-xslt-1.1.2.zip

    TestNG XSLT 1.1.2 是一个专门针对TestNG测试框架的扩展,它提供了将TestNG的测试结果转换为易于阅读和分析的XSLT格式的能力。这个压缩包文件“testng-xslt-1.1.2.zip”包含了这个扩展的源代码、文档以及可能的库...

    testng测试报告模板BeautifulReport.7z

    通常,它会指导用户如何配置TestNG以使用定制的模板,可能包括XML配置文件的设置、类路径的指定等。详细阅读这份说明是理解并正确应用模板的关键。 3. **testNGpara.xml**:这可能是TestNG的测试配置文件,用于定义...

    TestNG框架使用

    TestNG框架使用详解 TestNG是一款强大的测试框架,它提供了比JUnit更丰富的功能,尤其在并行测试、分组测试、依赖测试等方面表现突出。这篇博文将深入探讨如何使用TestNG进行单元测试和集成测试。 1. **TestNG基本...

    Testng JAR包及教程

    在Eclipse中使用TestNG进行测试,你需要创建一个新的TestNG类,通常继承自`org.testng.annotations.Test`注解的类。以下是一个简单的例子: ```java import org.testng.Assert; import org.testng.annotations.Test...

    testng-6.7.jar TestNG依赖包

    `testng-6.7-sources.jar`文件则包含了TestNG 6.7版本的源代码,这对于开发者来说非常有价值,因为可以直接查看源码理解内部工作原理,方便调试和学习。 总的来说,TestNG是一个强大且灵活的测试框架,对于Java开发...

    testng-6.9.4和testng-6.8.8.zip

    TestNG是Java编程语言中的一款强大的自动化测试框架,与JUnit和Selenium等工具配合使用,为软件测试提供了全面且灵活的解决方案。TestNG由Cédric Beust创建,旨在提高测试效率并支持更复杂的测试场景,如并发测试、...

    eclipse-testng离线包

    综上所述,"eclipse-testng离线包"是为了在Eclipse中便捷地使用和管理TestNG测试框架而提供的离线安装资源,包含了Eclipse与TestNG集成所需的所有组件,帮助开发者高效地进行单元测试、集成测试和功能测试。

    testng官方文档及使用图解.rar

    TestNG是一款功能强大的Java测试框架,它以JUnit和NUnit为灵感来源,但引入了许多增强功能,使得自动化测试更加高效和灵活。...通过深入学习和熟练运用TestNG,可以构建稳定、高效的自动化测试方案。

    TestNG学习文档英文版.pdf版

    这个教程旨在为软件专业人员提供对TestNG框架的深入理解,帮助他们以简单易懂的方式学习TestNG,并将其应用到企业级应用的测试中,确保软件的稳定性和可靠性。 本教程面向对学习TestNG框架感兴趣的软件专业人员,...

    testng-6.8.8文件

    - **testng-6.8.8.jar**:这是TestNG的JAR文件,包含了TestNG库的所有类和资源,可以被Java项目引用以使用TestNG进行测试。 - **src**:通常包含Java源代码文件,可能是使用TestNG编写的测试类或相关项目的源代码...

    TestNG离线安装文件 site

    TestNG是一种广泛使用的Java测试框架,它为开发者和测试工程师提供了功能强大且灵活的测试解决方案。这个"TestNG离线安装文件site"包含了在没有网络连接的情况下为Eclipse集成TestNG环境所需的所有组件,特别适合...

    TestNG学习笔记

    - 上述示例展示了如何使用 TestNG 编写一个简单的单元测试案例。 - `@Test` 注解用来标记这是一个测试方法。 - `RandomEmailGenerator` 类实现了生成随机邮箱地址的功能,虽然这里的实现并不随机,仅为演示目的。 - ...

    TestNG教程.pdf

    TestNG(Testing New Generation)是一个开源的自动...通过利用注解来定义测试和分组测试,使用TestNG的运行测试功能,以及生成详细的测试报告,TestNG帮助测试团队提高了测试的效率和质量,进而提升了软件产品的质量。

    testng.zip离线安装

    TestNG是一款功能强大的Java测试框架,它扩展...通过离线安装TestNG,开发者可以避免因网络问题而无法使用这个强大的测试工具。离线安装不仅适用于个人开发,对于那些网络受限的企业环境,也是一项非常实用的解决方案。

    TestNG官方文档中文版.pdf

    根据提供的文件信息,本文将对TestNG这一Java测试框架的相关知识点进行详细解析。TestNG(Test Next Generation)是一种用于Java语言的单元测试框架,它在JUnit的基础上进行了许多改进,提供了更强大、更灵活的测试...

    TestNG-离线安装包

    TestNG-6.9离线安装包,下载zip解压后,直接拷贝到eclipse下的dropins目录下即可。重启eclipse,TestNG插件即安装成功。重启eclipse会自动安装TestNG插件,所以启动时间较长,请耐心等待。大概3-5min左右。

    TestNG教程

    TestNG 是一个强大的自动化测试框架,广泛应用于Java应用程序的单元测试、集成测试和端到端测试。它由Cédric Beust创建,旨在提供比JUnit更...通过学习和熟练使用TestNG,你可以有效地提高测试效率,保证软件质量。

Global site tag (gtag.js) - Google Analytics