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 ...
随机推荐
- php打开错误日志
ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);
- 初始pip
关于pip包括下面的东西还不是很懂,慢慢的了解,我的pip是从https://bootstrap.pypa.io/get-pip.py 粘贴并命名为 get-pip.py 后,执行 python ge ...
- POJ1733 Party game [带权并查集or扩展域并查集]
题目传送 Parity game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10870 Accepted: 4182 ...
- Unity游戏开发之C#快速入门
C#是微软团队在开发.NET框架时开发的,它的构想接近于C.C++,也和JAVA十分相似,有许多强大的编程功能. 个人感受是C#吸收了众多编程语言的优点,从中可以看到C.C++.Java.Javasc ...
- win10安装mysql8.0.15
1:下载mysql8.0.15 https://www.mysql.com/downloads/ 2:下载完解压,增加my.ini配置文件 [mysqld] # 设置3306端口 port= # 设置 ...
- WebService数据示例
通过webservice提交xml数据以及soap协议的使用 上次已经给大家分享了简单的webservice的使用,提交给服务器的数据只是简单类型的数据,这次呢换成了xml,并通过一个小例子来讲解so ...
- poj 1127(直线相交+并查集)
Jack Straws Description In the game of Jack Straws, a number of plastic or wooden "straws" ...
- 【构造】CDOJ1607 大学生足球联赛
请自行百度逆时针轮转法 //单循环赛 逆时针轮转法 #include<cstdio> using namespace std; int n,a[70]; int main(){ scanf ...
- css排版之-标准文档流
标准流指的是在不使用其他的与排列和定位相关的特殊CSS规则时,各种元素的排列规则.HTML文档中的元素可以分为两大类:行内元素和块级元素. 1.行内元素不占据单独的空间,依附于块级元素,行 ...
- Educational Codeforces Round 9 D. Longest Subsequence dp
D. Longest Subsequence 题目连接: http://www.codeforces.com/contest/632/problem/D Description You are giv ...