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”。
欢迎关注 微信公众号【测试备忘录】,查看更多内容,一起交流呀