一、并行运行于超时

可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中。这个属性可以带有如下这样的值:

  1. <suite name="My suite" parallel="methods" thread-count="5">
  2. <suite name="My suite" parallel="tests" thread-count="5">
  3. <suite name="My suite" parallel="classes" thread-count="5">

1.parallel="methods": TestNG 会在不同的线程中运行测试方法,除非那些互相依赖的方法。那些相互依赖的方法会运行在同一个线程中,并且遵照其执行顺序。

2.parallel="tests": TestNG 会在相同的线程中运行相同的<test>标记下的所有方法,但是每个<test>标签中的所有方法会运行在不同的线程中。这样就允许你把所有非线程安全的类分组到同一个<test>标签下,并且使其可以利用TestNG多线程的特性的同时,让这些类运行在相同的线程中。

3.parallel="classes": TestNG 会在相同线程中相同类中的运行所有的方法,但是每个类都会用不同的线程运行。

此外,属性 thread-count 允许你为当前的执行指定可以运行的线程数量。

注意:@Test 中的属性 timeOut 可以工作在并行和非并行两种模式下。

你也可以指定 @Test 方法在不同的线程中被调用。你可以使用属性 threadPoolSize 来实现:

@Test(threadPoolSize = 3, invocationCount =10,  timeOut = 10000)

public void testServer() {

上例中,方法 testServer 会在3个线程中调用10次。此外,10秒钟的超时设定也保证了这三个线程中的任何一个都永远不会阻塞当前被调用的线程。

二、再次运行失败的测试

每次测试suite出现失败的测试,TestNG 就会在输出目录中创建一个叫做 testng-failed.xml 的文件。这个XML文件包含了重新运行那些失败测试的必要信息,使得你可以无需运行整个测试就可以快速重新运行失败的测试。所以,一个典型的会话看起来像:

Java -classpath testng.jar;%CLASSPATH%org.testng.TestNG -d test-outputs testng.xml

java -classpath testng.jar;%CLASSPATH%org.testng.TestNG -d test-outputs test-outputs/testng-failed.xml

要注意的是,testng-failed.xml 已经包含了所有失败方法运行时需要的依赖,所以完全可以保证上次失败的方法不会出现任何 SKIP。

三、JUnit测试

TestNG 能够运行 JUnit 测试。所有要做的工作就是在testng.classNames 属性中设定要运行的JUnit测试类,并且把 testng.junit 属性设置为true:

<test name="Test1"   junit="true">

<classes>

<!-- ... -->

TestNG 在这种情况下所表现的行为与 JUnit 相似:

1.所有类中要运行的测试方法由 test* 开头

2.如果类中有 setUp() 方法,则其会在每个测试方法执行前被调用

3.如果类中有 tearDown() 方法,则其会在每个测试方法之后被调用

4.如果测试类包含 suite() 方法,则所有的被这个方法返回的测试类都会被调用

四、方法拦截器

一旦TestNG 计算好了测试方法会以怎样的顺序调用,那么这些方法就会分为两组:

1.按照顺序运行的方法。这里所有的方法都有相关的依赖,并且所有这些方法按照特定顺序运行。

2.不定顺序运行的方法。这里的方法不属于第一个类别。方法的运行顺序是随机的,下一个说不准是什么(尽管如此,默认情况下TestNG会尝试通过类来组织方法)。

为了能够让你更好的控制第二种类别,TestNG定义如下接口:

  1. public interface IMethodInterceptor {
  2. List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context);
  3. }

方法中叫做methods的那个列表参数包含了所有以不定序运行的方法。你的 intercept 方法也要返回一个 IMethodInstance列表,它可能是下面情况之一:

1.内容与参数中接收的一致,但是顺序不同

2.一组 IMethodInstance 对象

3.更大的一组 IMethodInstance对象

一旦你定义了拦截器,就把它传递个TestNG,用下面的方式:

java -classpath"testng-jdk15.jar:test/build" org.testng.TestNG -listenertest.methodinterceptors.NullMethodInterceptor /

-testclass test.methodinterceptors.FooTest

关于ant中对应的语法,参见 listeners 属性ant文档中的说明。

http://testng.org/doc/ant.html

例如,下面是个方法拦截器会重新给方法排序,一遍“fast”组中的方法总是先执行:

  1. public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
  2. List<IMethodInstance> result = new ArrayList<IMethodInstance>();
  3. for (IMethodInstance m : methods) {
  4. Test test = m.getMethod().getMethod().getAnnotation(Test.class);
  5. Set<String> groups = new HashSet<String>();
  6. for (String group : test.groups()) {
  7. groups.add(group);
  8. }
  9. if (groups.contains("fast")) {
  10. result.add(0, m);
  11. }
  12. else {
  13. result.add(m);
  14. }
  15. }
  16. return result;
  17. }

本文转载自http://blog.sina.com.cn/bestfeiyong

TestNG 五 运行TestNG的更多相关文章

  1. Maven 配置 Selenium + testNG + reportNG 运行环境

    .markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(56, 58, ...

  2. testng+reportng,运行xml

    在看了http://seleniumcn.cn/read.php?tid=7960视频的Reportng后自己实验了下, 1.下载reportng-1.1.4.zip,解压后如下,把reportng- ...

  3. TestNG官方文档中文版(4)-运行TestNG

    4 - 运行TestNG TestNG可以以不同的方式调用: * Command line     * ant     * Eclipse     * IntelliJ's IDEA 1) 命令行 假 ...

  4. 如何用dos命令运行testng

    写好的自动化程序怎么让它运行呢,总不能每次都启动eclipse吧,下面就先介绍一种用dos命令运行testNG的方法. 1.把项目打成jar吧,我用的是Fat jar工具. 2.在电脑的某个盘建一个文 ...

  5. java testng框架的windows自动化-自动运行testng程序上篇

    本文旨在让读者简单了解testng的自动运行 怎么说呢,在网上已经有了各个前辈进行代码演示以及分享,我力争说到点子上 接上文,之前讲的大部分是juint的自动化代码运行,从未涉及到testng,但是在 ...

  6. UI自动化测试(五)TestNG简介与安装步骤

    简述 TestNG是一个设计用来简化广泛的测试需求的测试框架, 从单元测试(隔离测试一个类) 到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统, 例如运用服务器) . testNG灵感来 ...

  7. 使用ant运行testng的testng.xml并且使用testng-results.xsl美化结果

    先看build.xml <?xml version="1.0" encoding="UTF-8"?> <project basedir=&qu ...

  8. TestNG独立运行的几种方法.md

    目录 通过main函数调用testng.xml文件,然后打成可执行jar包执行 1 假设我们已经写好了testng.xml,现在我们需要写一个主类和main函数用来调用testng.xml 2 把项目 ...

  9. Jenkins如何集成运行testng.xml文件的解决方案

    前言: 在我们使用maven+testng+restassured+reportng实现接口测试框架时,会发现在本机创建项目,进行一些pom引用和简单的封装后,很快就可以直接利用idea自带的test ...

随机推荐

  1. CSS Modules入门及React中实践(内附webpack4配置)

    本篇文章以整理为主,自己进行了部分修改,如有侵权,请告知 CSS Modules介绍 CSS Modules是什么东西呢?首先,让我们从官方文档入手:GitHub – css-modules/css- ...

  2. JSTL 1.1与JSTL 1.2之间的区别?如何下载JSTL 1.2?

    JSTL 1.1与JSTL 1.2之间的区别?如何下载JSTL 1.2? JSTL 1.2中不要求standard.jar架包 您可以在Maven中央仓库中找到它们: http://repo2.mav ...

  3. Java数据库连接池-proxool

    连接池技术的思想: 连接复用(高效.安全),避免数据库频繁建立.关闭的开销 --------------------极客学院(参考lulei) 1.配置文件 <proxool> <! ...

  4. react native 问题点

    问题点一:安装了react-native-vector-icons后,编译出错 版本: "react": "16.2.0", "react-nativ ...

  5. firfox与about:config

    ¤什么是about:config¤about:config是Firefox的设置页面,Firefox提供了不少高级设置选项在这里以便让你可以更加详细地控制Firefox的运行方式.官方不推荐用户手工修 ...

  6. HDU3487 Play With Chain [Splay]

    题目传送门 题目描述 Problem Description YaoYao is fond of playing his chains. He has a chain containing n dia ...

  7. 洛谷P1886滑动窗口

    题目传送门 理解题意:给定一个数列和窗口范围k,求依次向右移动窗口时每次窗口内的最大和最小值. 没什么思维难度,一边扫过去,用两个数组maxx和minn记录每个窗口内的最大最小值,移动过程中用两个变量 ...

  8. 有一种感动叫ACM(WJMZBMR在成都赛区开幕式上的讲话)

    各位选手,各位教练,大家好,我是来自清华大学交叉信息学院的陈立杰,今天很荣幸站在这里代表全体参赛选手发言.对于我来说,这是我第一次正式参加ACM的比赛.不过我跟ACM之间的缘分,大概在很早的时候就已经 ...

  9. Spring Cloud Feign 总结

    Spring Cloud中, 服务又该如何调用 ? 各个服务以HTTP接口形式暴露 , 各个服务底层以HTTP Client的方式进行互相访问. SpringCloud开发中,Feign是最方便,最为 ...

  10. 《深入浅出Nodejs》笔记——模块机制(1)

    前言 这是我读<深入浅出Nodejs>的笔记,真是希望我的机械键盘快点到啊,累死我了. CommonJS规范 主要分为模块引用.模块定义.模块标识三个部分. 模块引用 上下文提供requi ...