TestNG 五 运行TestNG
一、并行运行于超时
可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中。这个属性可以带有如下这样的值:
- <suite name="My suite" parallel="methods" thread-count="5">
- <suite name="My suite" parallel="tests" thread-count="5">
- <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定义如下接口:
- public interface IMethodInterceptor {
- List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context);
- }
方法中叫做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”组中的方法总是先执行:
- public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
- List<IMethodInstance> result = new ArrayList<IMethodInstance>();
- for (IMethodInstance m : methods) {
- Test test = m.getMethod().getMethod().getAnnotation(Test.class);
- Set<String> groups = new HashSet<String>();
- for (String group : test.groups()) {
- groups.add(group);
- }
- if (groups.contains("fast")) {
- result.add(0, m);
- }
- else {
- result.add(m);
- }
- }
- return result;
- }
本文转载自http://blog.sina.com.cn/bestfeiyong
TestNG 五 运行TestNG的更多相关文章
- Maven 配置 Selenium + testNG + reportNG 运行环境
.markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(56, 58, ...
- testng+reportng,运行xml
在看了http://seleniumcn.cn/read.php?tid=7960视频的Reportng后自己实验了下, 1.下载reportng-1.1.4.zip,解压后如下,把reportng- ...
- TestNG官方文档中文版(4)-运行TestNG
4 - 运行TestNG TestNG可以以不同的方式调用: * Command line * ant * Eclipse * IntelliJ's IDEA 1) 命令行 假 ...
- 如何用dos命令运行testng
写好的自动化程序怎么让它运行呢,总不能每次都启动eclipse吧,下面就先介绍一种用dos命令运行testNG的方法. 1.把项目打成jar吧,我用的是Fat jar工具. 2.在电脑的某个盘建一个文 ...
- java testng框架的windows自动化-自动运行testng程序上篇
本文旨在让读者简单了解testng的自动运行 怎么说呢,在网上已经有了各个前辈进行代码演示以及分享,我力争说到点子上 接上文,之前讲的大部分是juint的自动化代码运行,从未涉及到testng,但是在 ...
- UI自动化测试(五)TestNG简介与安装步骤
简述 TestNG是一个设计用来简化广泛的测试需求的测试框架, 从单元测试(隔离测试一个类) 到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统, 例如运用服务器) . testNG灵感来 ...
- 使用ant运行testng的testng.xml并且使用testng-results.xsl美化结果
先看build.xml <?xml version="1.0" encoding="UTF-8"?> <project basedir=&qu ...
- TestNG独立运行的几种方法.md
目录 通过main函数调用testng.xml文件,然后打成可执行jar包执行 1 假设我们已经写好了testng.xml,现在我们需要写一个主类和main函数用来调用testng.xml 2 把项目 ...
- Jenkins如何集成运行testng.xml文件的解决方案
前言: 在我们使用maven+testng+restassured+reportng实现接口测试框架时,会发现在本机创建项目,进行一些pom引用和简单的封装后,很快就可以直接利用idea自带的test ...
随机推荐
- .net中 Timer定时器
作者:feiying008 在开发一套视觉系统时,发现系统内存一直不断增加,直至系统内存爆满.一开始还以为是程序内存泄露,是图像操作算法写的有问题,但是,发现如果电机轴如果 不运行的状态下,每隔一秒进 ...
- [已解决]#1142 - SELECT command denied to user ''@'localhost' for table 'pma_table_uiprefs'
症状:在phpmyadmin那边打不开表,提示 #1142 - SELECT command denied to user ''@'localhost' for table 'pma_table_ui ...
- BZOJ2654/COGS1764 [2012国家集训队]tree(陈立杰) [生成树,二分]
BZOJ传送门,COGS传送门 tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V, ...
- scrapy抓取拉勾网职位信息(三)——爬虫rules内容编写
在上篇中,分析了拉勾网需要跟进的页面url,本篇开始进行代码编写. 在编写代码前,需要对scrapy的数据流走向有一个大致的认识,如果不是很清楚的话建议先看下:scrapy数据流 本篇目标:让拉勾网爬 ...
- changing chmod for files but not directories
find . -type f -print0 | xargs -0 chmod 644
- 【贪心】Codeforces Round #436 (Div. 2) D. Make a Permutation!
题意:给你一个长度为n的数组,每个元素都在1~n之间,要你改变最少的元素,使得它变成一个1~n的排列.在保证改动最少的基础上,要求字典序最小. 预处理cnt数组,cnt[i]代表i在原序列中出现的次数 ...
- 基于socket的udp传输,socketserver模块,进程
基于UDP的套接字 udp是无连接的,先启动哪一端都不会报错 socket.SOCK_DGRAM 数据报协议 udp不会发送空数据,什么都不输入直接发送也会有报头发过去 服务端 import sock ...
- 活动中使用提示框(Toast)
任务名称:活动中使用Toast 任务现象:点击button时,会弹出提示框:You Click Button 步骤 1.创建一个项目,新建活动和加载布局.参考: http://8c925c9a.wiz ...
- struts2和spring整合错误 org.springframework.beans.factory.BeanCreationException,已解决
先贴上错误 2018-8-16 23:41:10 org.springframework.context.support.ClassPathXmlApplicationContext prepareR ...
- React事件系统入门
React基于虚拟DOM实现了一个合成事件层,我们所定义的事件处理器会接受到一个合成事件层对象的实例,它完全符合W3C标准,不会存在任何IE标准的兼容性问题.并且和原生的浏览器事件一样拥有同样的接口, ...