TestNG官方文档中文版(8,9)-类级别注解和并发,重复失败测试,junit测试,jdk1.4支持,编程式调用和Beanshell
2009-06-23 11:41
537 查看
5.8 - Class level annotations
@Test注解可以放置在类上:
@Test
public
class
Test1 {
public
void
test1() {
}
public
void
test2() {
}
}
类级别注解的效果是将这个类的所有的public方法都变成测试方法,即使他们没有被注解。还可以在需要增加属性的方法上重复@Test注解。
例如:
@Test
public
class
Test1 {
public
void
test1() {
}
@Test(groups
=
"
g1
"
)
public
void
test2() {
}
}
将方法test1()和test2()都变成测试方法,但是在此之上,test2()现在属于组"g1".
5.9 - Parallel running and time-outs
可以通过使用parallel属性要求TestNG在单独的线程中运行测试。这个属性可以在两个值中取其一:
<
suite
name
="My suite"
parallel
="methods"
thread-count
="5"
>
<
suite
name
="My suite"
parallel
="tests"
thread-count
="5"
>
* parallel="methods": TestNG将在单独的线程中运行测试方法,除了那些依赖其他测试方法的,这些将在同一个线程中运行,以保证他们的执行顺序。
* parallel="tests":
TestNG将在一个线程中运行所有在同一个<test>标签中的测试方法,但是每个<test>标签将在单独的线程中运行。这
种方式容许把所有不是线程安全的类分组到相同的<test>标签中,保证他们将在相同的线程中运行,有利于TestNG使用尽可能多的线程来
运行测试。
此外,thread-count属性容许指定运行时将分配多少线程。
注意:@Test的属性timeOut在并发和非并发模型下都可以工作。
也可以指定@Test方法在不同的线程中被调用。可以使用threadPoolSize属性来实现这样的结果:
@Test(threadPoolSize
=
3
, invocationCount
=
10
, timeOut
=
10000
)
public
void
testServer() {
}
在这个例子中,方法testServer将被3个不同线程调用10次。此外,10秒种的time-out属性保证任何线程都不会长时间阻塞。
5.10 - Rerunning failed tests
套件中的测试失败时,每次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将包含所有必要的依赖方法,所以可以保证运行失败的方法而不运行任何被跳过的(失败)方法。
5.11 - JUnit tests
TestNG可以运行junit测试。所需要的只是在testng.classNames属性中指定junit测试类,并设置testng.junit属性为true。
<
test
name
="Test1"
junit
="true"
>
<
classes
>
<!--
-->
这种情况下TestNG的行为类似jnit:
* 类中所有以test*开头的方法将被运行。
* 如果测试类中有方法setUp(), 将在每次测试方法调用前被执行。
* 如果测试类中有方法tearDown(),将在每次测试方法调用后被执行。
5.12 - JDK 1.4
TestNG也可以在JDK1.4下工作。在这种情况下,需要使用发布的jdk1.4的jar文件(名为testng-...-jdk14.jar)。唯一的差别是在于注解,jdk1.4下使用流行的XDoclet javadoc注解语法:
public
class
SimpleTest {
/**
* @testng.before-class = "true"
*/
public
void
setUp() {
//
code that will be invoked when this test is instantiated
}
/**
* @testng.test groups = "functest" dependsOnGroups = "group1,group2"
*/
public
void
testItWorks() {
//
your test code
}
}
javadoc语法的规则非常简洁,和jdk1.5注解的唯一差别是数组串数组需要特别写成单独的,逗号或空格分隔的字符串。虽然值周围的双引号是可选的,但还是建议在任何情况下都使用双引号,以保证将来迁移到jdk1.5时可以比较容易。
同样需要在<testng>的ant任务中指明sourcedir属性(或者在命令行中使用-sourcedir),以便testNG可以找到你的测试文件的源代码来解析javadoc注解。
这里是jdk1.4和jdk5注解的语法对照表:
(表格在blog中不好排版,不在这里发了,详细内容请参考官方文档的原文:http://testng.org/doc/documentation-main.html#jdk-14。)
更多jdk1.4的支持范例,请参考发行包中的test-14文件夹,这里包含全部的JDK 1.5测试对应的使用javadoc注解的内容。
5.13 - Running TestNG programmatically
在自己的程序中调用testNG也很简单:
TestListenerAdapter tla
=
new
TestListenerAdapter();
TestNG testng
=
new
TestNG();
testng.setTestClasses(
new
Class[] { Run2.
class
});
testng.addListener(tla);
testng.run();
这个范例创建了一个TestNG对象并运行测试类Run2。还增加了一个TestListener。你可以使用适配器类
org.testng.TestListenerAdapter或自己实现org.testng.ITestListener。这个接口包含多个回调方
法,使得可以追踪测试的开始,成功,失败等等。
类似的,可以使用testng.xml文件调用TestNG或者自己创建一个虚拟的testng.xml文件。为了做到这点,需要使用org.testng.xml包的类:XmlClass, XmlTest, 等等。每个类对应他们xml标签。
例如,假设你想创建下面的虚拟文件:
<
suite
name
="TmpSuite"
>
<
test
name
="TmpTest"
>
<
classes
>
<
class
name
="test.failures.Child"
/>
<
classes
>
</
test
>
</
suite
>
你将使用下面的代码:
XmlSuite suite
=
new
XmlSuite();
suite.setName(
"
TmpSuite
"
);
XmlTest test
=
new
XmlTest(suite);
test.setName(
"
TmpTest
"
);
List
<
XmlClass
>
classes
=
new
ArrayList
<
XmlClass
>
();
classes.add(
new
XmlClass(
"
test.failures.Child
"
));
test.setXmlClasses(classes) ;
然后你可以将XmlSuite传递给TestNG:
List
<
XmlSuite
>
suites
=
new
ArrayList
<
XmlSuite
>
();
suites.add(suite);
TestNG tng
=
new
TestNG();
tng.setXmlSuites(suites);
tng.run();
完整的API请参考javadoc。
5.14 - BeanShell and advanced group selection
如果testng.xml中的<include>和<exclude>标签还不足够满足你的需要,你可以使用BeanShell表达式来决定是否需要将一个特定的测试方法包含在测试操作中。只需要在<test>标签下指定这个表达式:
<
test
name
="BeanShell test"
>
<
method-selectors
>
<
method-selector
>
<
script
language
="beanshell"
>
<![CDATA[
groups.containsKey("test1")
]]>
</
script
>
</
method-selector
>
</
method-selectors
>
<!--
-->
当发现testng.xml中有<script>标签,TestNG将忽略当前<test>标签中的以后的组和方法
的<include>和<exclude>标签:BeanShell表达式将是决定一个测试方法是否包含的唯一方法。
这里有一些BeanShell脚本的额外信息:
* 必须返回boolean值。除了这个约束,任何有效的BeanShell代码都被容许.(例如,你可能想在工作日返回true而在周末返回false,这将容许你更加日期不同差异性的运行测试。
* TestNG为了便利定义了以下变量:
java.lang.reflect.Method method: 当前测试方法
org.testng.ITestNGMethod testngMethod: 当前测试方法的描述
java.util.Map<String, String> groups: 当前测试方法所属组的Map
* 你可能需要在你的表达式前后增加CDATA声明(如上面所示)以避免讨厌的xml转义字符。
@Test注解可以放置在类上:
@Test
public
class
Test1 {
public
void
test1() {
}
public
void
test2() {
}
}
类级别注解的效果是将这个类的所有的public方法都变成测试方法,即使他们没有被注解。还可以在需要增加属性的方法上重复@Test注解。
例如:
@Test
public
class
Test1 {
public
void
test1() {
}
@Test(groups
=
"
g1
"
)
public
void
test2() {
}
}
将方法test1()和test2()都变成测试方法,但是在此之上,test2()现在属于组"g1".
5.9 - Parallel running and time-outs
可以通过使用parallel属性要求TestNG在单独的线程中运行测试。这个属性可以在两个值中取其一:
<
suite
name
="My suite"
parallel
="methods"
thread-count
="5"
>
<
suite
name
="My suite"
parallel
="tests"
thread-count
="5"
>
* parallel="methods": TestNG将在单独的线程中运行测试方法,除了那些依赖其他测试方法的,这些将在同一个线程中运行,以保证他们的执行顺序。
* parallel="tests":
TestNG将在一个线程中运行所有在同一个<test>标签中的测试方法,但是每个<test>标签将在单独的线程中运行。这
种方式容许把所有不是线程安全的类分组到相同的<test>标签中,保证他们将在相同的线程中运行,有利于TestNG使用尽可能多的线程来
运行测试。
此外,thread-count属性容许指定运行时将分配多少线程。
注意:@Test的属性timeOut在并发和非并发模型下都可以工作。
也可以指定@Test方法在不同的线程中被调用。可以使用threadPoolSize属性来实现这样的结果:
@Test(threadPoolSize
=
3
, invocationCount
=
10
, timeOut
=
10000
)
public
void
testServer() {
}
在这个例子中,方法testServer将被3个不同线程调用10次。此外,10秒种的time-out属性保证任何线程都不会长时间阻塞。
5.10 - Rerunning failed tests
套件中的测试失败时,每次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将包含所有必要的依赖方法,所以可以保证运行失败的方法而不运行任何被跳过的(失败)方法。
5.11 - JUnit tests
TestNG可以运行junit测试。所需要的只是在testng.classNames属性中指定junit测试类,并设置testng.junit属性为true。
<
test
name
="Test1"
junit
="true"
>
<
classes
>
<!--
-->
这种情况下TestNG的行为类似jnit:
* 类中所有以test*开头的方法将被运行。
* 如果测试类中有方法setUp(), 将在每次测试方法调用前被执行。
* 如果测试类中有方法tearDown(),将在每次测试方法调用后被执行。
5.12 - JDK 1.4
TestNG也可以在JDK1.4下工作。在这种情况下,需要使用发布的jdk1.4的jar文件(名为testng-...-jdk14.jar)。唯一的差别是在于注解,jdk1.4下使用流行的XDoclet javadoc注解语法:
public
class
SimpleTest {
/**
* @testng.before-class = "true"
*/
public
void
setUp() {
//
code that will be invoked when this test is instantiated
}
/**
* @testng.test groups = "functest" dependsOnGroups = "group1,group2"
*/
public
void
testItWorks() {
//
your test code
}
}
javadoc语法的规则非常简洁,和jdk1.5注解的唯一差别是数组串数组需要特别写成单独的,逗号或空格分隔的字符串。虽然值周围的双引号是可选的,但还是建议在任何情况下都使用双引号,以保证将来迁移到jdk1.5时可以比较容易。
同样需要在<testng>的ant任务中指明sourcedir属性(或者在命令行中使用-sourcedir),以便testNG可以找到你的测试文件的源代码来解析javadoc注解。
这里是jdk1.4和jdk5注解的语法对照表:
(表格在blog中不好排版,不在这里发了,详细内容请参考官方文档的原文:http://testng.org/doc/documentation-main.html#jdk-14。)
更多jdk1.4的支持范例,请参考发行包中的test-14文件夹,这里包含全部的JDK 1.5测试对应的使用javadoc注解的内容。
5.13 - Running TestNG programmatically
在自己的程序中调用testNG也很简单:
TestListenerAdapter tla
=
new
TestListenerAdapter();
TestNG testng
=
new
TestNG();
testng.setTestClasses(
new
Class[] { Run2.
class
});
testng.addListener(tla);
testng.run();
这个范例创建了一个TestNG对象并运行测试类Run2。还增加了一个TestListener。你可以使用适配器类
org.testng.TestListenerAdapter或自己实现org.testng.ITestListener。这个接口包含多个回调方
法,使得可以追踪测试的开始,成功,失败等等。
类似的,可以使用testng.xml文件调用TestNG或者自己创建一个虚拟的testng.xml文件。为了做到这点,需要使用org.testng.xml包的类:XmlClass, XmlTest, 等等。每个类对应他们xml标签。
例如,假设你想创建下面的虚拟文件:
<
suite
name
="TmpSuite"
>
<
test
name
="TmpTest"
>
<
classes
>
<
class
name
="test.failures.Child"
/>
<
classes
>
</
test
>
</
suite
>
你将使用下面的代码:
XmlSuite suite
=
new
XmlSuite();
suite.setName(
"
TmpSuite
"
);
XmlTest test
=
new
XmlTest(suite);
test.setName(
"
TmpTest
"
);
List
<
XmlClass
>
classes
=
new
ArrayList
<
XmlClass
>
();
classes.add(
new
XmlClass(
"
test.failures.Child
"
));
test.setXmlClasses(classes) ;
然后你可以将XmlSuite传递给TestNG:
List
<
XmlSuite
>
suites
=
new
ArrayList
<
XmlSuite
>
();
suites.add(suite);
TestNG tng
=
new
TestNG();
tng.setXmlSuites(suites);
tng.run();
完整的API请参考javadoc。
5.14 - BeanShell and advanced group selection
如果testng.xml中的<include>和<exclude>标签还不足够满足你的需要,你可以使用BeanShell表达式来决定是否需要将一个特定的测试方法包含在测试操作中。只需要在<test>标签下指定这个表达式:
<
test
name
="BeanShell test"
>
<
method-selectors
>
<
method-selector
>
<
script
language
="beanshell"
>
<![CDATA[
groups.containsKey("test1")
]]>
</
script
>
</
method-selector
>
</
method-selectors
>
<!--
-->
当发现testng.xml中有<script>标签,TestNG将忽略当前<test>标签中的以后的组和方法
的<include>和<exclude>标签:BeanShell表达式将是决定一个测试方法是否包含的唯一方法。
这里有一些BeanShell脚本的额外信息:
* 必须返回boolean值。除了这个约束,任何有效的BeanShell代码都被容许.(例如,你可能想在工作日返回true而在周末返回false,这将容许你更加日期不同差异性的运行测试。
* TestNG为了便利定义了以下变量:
java.lang.reflect.Method method: 当前测试方法
org.testng.ITestNGMethod testngMethod: 当前测试方法的描述
java.util.Map<String, String> groups: 当前测试方法所属组的Map
* 你可能需要在你的表达式前后增加CDATA声明(如上面所示)以避免讨厌的xml转义字符。
相关文章推荐
- TestNG系列-第五章 测试方法、测试类和测试分组(续5)-9类级别注解、并发、失败情况
- 【译】TestNG官方文档中文版(08)—— 测试方法、测试类和测试组(5.13-5.20)
- TestNG官方文档中文版(5)-测试方法/类和组
- 【译】TestNG官方文档中文版(05)—— 测试方法、测试类和测试组(5.1-5.4)
- 【译】TestNG官方文档中文版(09)—— 测试结果
- TestNG官方文档中文版(05)—— 测试方法、测试类和测试组
- 【译】TestNG官方文档中文版(06)—— 测试方法、测试类和测试组(5.5-5.6)
- TestNG官方文档中文版(06)—— 测试结果
- 【译】TestNG官方文档中文版(08)—— 测试方法、测试类和测试组
- TestNG官方文档中文版(5)-测试方法/类和组
- 【译】TestNG官方文档中文版(07)—— 测试方法、测试类和测试组(5.7-5.12)
- TestNG官方文档中文版(5)-测试方法/类和组
- 【译】TestNG官方文档中文版(04)—— 运行TestNG
- jQuery 1.4官方文档中文版发布
- Android官方开发文档Training系列课程中文版:Activity测试之创建运行测试
- TestNG官方文档中文版(03)—— testng.xml
- Android官方开发文档Training系列课程中文版:Activity测试之UI组件测试
- Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的屏幕
- Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的平台版本
- Springtest与junit结合测试注解失败原因