1. 测试方法
测试方法用@Test注释。除非您在testng.xml中将allow-return-values设置为true,否则将忽略用@Test注释的返回值的方法,设置方式如下:
<suite allow-return-values="true"> or <test allow-return-values="true">
2. 测试组
TestNG允许对测试方法进行复杂的分组。不仅可以声明方法属于组,还可以指定包含其他组的组。然后可以调用TestNG并要求它包括一组特定的组(或正则表达式),而排除另一组。如果要背对背运行两组不同的测试,这将提供最大的灵活性来划分测试的方式,并且不需要重新编译任何内容。
组在testng.xml文件中指定,可以在<test>或<suite>标记下找到。<suite>标记中指定的组适用于下面的所有<test>标记。请注意,组在这些标记中是累积的:如果在<suite>中指定组“ a”,在<test>中指定组“ b”,则将同时包括“ a”和“ b”。
以两类比较普遍的测试为例:
1) check-in 测试。 在提交新代码之前,应先运行这些测试。 它们通常应该很快,并且只需确保没有破坏基本功能即可。
2) 功能性测试(检查性测试)。 这些测试应涵盖软件的所有功能,并且每天至少要运行一次,理想情况下,可以持续运行。
通常, check-in 测试是功能测试的子集。TestNG允许通过测试组以非常直观的方式指定此名称。例如,可以通过说整个测试类都属于“ functest”组来构造自定义的测试,另外,还有几个方法属于“ checkintest”组,
示例1如下:
public class Test1 { @Test(groups = { "functest", "checkintest" }) public void testMethod1() { } @Test(groups = {"functest", "checkintest"} ) public void testMethod2() { } @Test(groups = { "functest" }) public void testMethod3() { } }
调用的方式:
<test name="Test1"> <groups> <run> <include name="functest"/> </run> </groups> <classes> <class name="example1.Test1"/> </classes> </test>
以上调用方式将运行该类中的所有测试方法,而使用checkintest调用它将仅运行testMethod1()和testMethod2()。
示例2:
使用类似正则表达式的示例。假设您的某些测试方法不应在Linux上运行,则您的测试应如下所示:
@Test public class Test1 { @Test(groups = { "windows.checkintest" }) public void testWindowsOnly() { } @Test(groups = {"linux.checkintest"} ) public void testLinuxOnly() { } @Test(groups = { "windows.functest" ) public void testWindowsToo() { } }
使用以下testng.xml来只运行windows的测试方法
<test name="Test1"> <groups> <run> <include name="windows.*"/> </run> </groups> <classes> <class name="example1.Test1"/> </classes> </test> 注意:TestNG使用正则表达式,而不使用wildmats的方式。 注意区别(例如,“ anything”由“.*”(点星号)而不是“*”匹配)。
3. 方法的组
使用 include 或 exclude 实现自定义的方法:
<test name="Test1"> <classes> <class name="example1.Test1"> <methods> <include name=".*enabledTestMethod.*"/> <exclude name=".*brokenTestMethod.*"/> </methods> </class> </classes> </test>
这样可以方便地停用单个方法而无需重新编译任何东西,但是不建议过多使用该技术,因为如果开始重构Java代码,它可能会使测试框架崩溃(在Java中使用的正则表达式可能不再与新的方法匹配)。
4. 排除组
testng不仅可以排除方法,也可以排除组:
例如,由于最近的更改而使测试暂时中断是很常见的,还没有时间修复但是确实希望对功能测试进行重新完整的运行,这时需要停用这些测试,但是记得要重新再加回来。
解决此问题的一种简单方法是创建一个名为“broken”的组,并使这些测试方法属于该组。例如:
@Test(groups = {"checkintest", "broken"} ) public void testMethod2() { }
testng.xml的设置:
<test name="Simple example"> <groups> <run> <include name="checkintest"/> <exclude name="broken"/> </run> </groups> <classes> <class name="example1.Test1"/> </classes> </test> 注:也可以通过使用@Test和@Before/@After注解上“enabled”是否可用的属性来达到禁用效果。
5. 部分组
可以在类级别定义组,然后在方法级别添加组:
@Test(groups = { "checkin-test" }) public class All { @Test(groups = { "func-test" ) public void method1() { ... } public void method2() { ... } }
在该类中,method2()是“ checkin-test”组的一部分,该组在类级别定义,而method1()既属于“ checkin-test”又属于“ func-test”。
今天就学习到这里,欢迎关注交流,一起进步~