6、testng.xml
6.1、带包和不带包
<suite name="Suite1" verbose="1" >
<test name="Nopackage" >
<classes>
<class name="NoPackageTest" />
</classes>
</test>
<test name="Regression1">
<classes>
<class name="test.sample.ParameterSample"/>
<class name="test.sample.ParameterTest"/>
</classes>
</test>
</suite>
6.2、指定包不指定类
<suite name="Suite1" verbose="1" >
<test name="Regression1" >
<packages>
<package name="test.sample" />
</packages>
</test>
</suite>
在上述案例中,TestNG将查看包test.sample中的所有类,并将仅执行具有TestNG批注的类。
6.2、指定要包括和排除的组和方法
<test name="Regression1">
<groups>
<run>
<exclude name="brokenTests" />
<include name="checkinTests" />
</run>
</groups>
<classes>
<class name="test.IndividualMethodsTest">
<methods>
<include name="testMethod" />
</methods>
</class>
</classes>
</test>
在上述案例中,在@Test中配置了groups="checkinTests",则会执行,没有配置或配置groups="brokenTests"则不会执行。在IndividualMethodsTest类中只有testMethod才会执行。
6.2、打乱执行顺序
<test name="Regression1" preserve-order="false">
<classes>
<class name="test.Test1">
<methods>
<include name="m1" />
<include name="m2" />
</methods>
</class>
<class name="test.Test2" />
</classes>
</test>
默认情况下,TestNG将按照在XML文件中找到的顺序运行测试。 如果要以不可预测的顺序运行此文件中列出的类和方法,请将preserve-order属性设置为false。
7、测试类、测试方法、测试组
7.1、执行带返回值的方法
<suite allow-return-values="true">
默认情况下,使用@Test的方法如果有返回值,则会直接忽略,使用allow-return-values="true"之后则可以执行。
7.2、Test groups
TestNG允许您对测试方法进行复杂的分组。 不仅可以声明方法属于组,还可以指定包含其他组的组。 然后可以调用TestNG并要求它包括一组特定的组(或正则表达式),而排除另一组。
如果要连续运行两组不同的测试,这将为您提供最大的灵活性来划分测试方式,并且不需要重新编译任何内容。
7.3、组合用法
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>
上述案例中,testMethod1、testMethod2、testMethod3都会执行,当<include name="functest"/>``<include name="checkintest"/>则只有testMethod1、testMethod2会执行。
7.4、正则表达式用法
@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() {
}
}
<test name="Test1">
<groups>
<run>
<include name="windows.*"/>
</run>
</groups>
<classes>
<class name="example1.Test1"/>
</classes>
</test>
上述案例,只有groups=windows开头的方法才会执行。
7.5、方法包含和排除
<test name="Test1">
<classes>
<class name="example1.Test1">
<methods>
<include name=".*enabledTestMethod.*"/>
<exclude name=".*brokenTestMethod.*"/>
</methods>
</class>
</classes>
</test>
上述案例中,如果是单独匹配方法名,如果方法名中包含enabledTestMethod那么方法就会执行,如果方法中包含brokenTestMethod则不会执行。不推荐使用这种方式,因为这样会改造你的方法名。
7.6、组的嵌套定义
<test name="Regression1">
<groups>
<define name="all">
<include name="functest"/>
<include name="checkintest"/>
</define>
<define name="functest">
<include name="windows"/>
<include name="linux"/>
</define>
<run>
<include name="all"/>
</run>
</groups>
<classes>
<class name="test.sample.Test1"/>
</classes>
</test>
上述案例中,all包含checkintest、function,function包含window、linux,最终运行all。只要方法上使用all或者all包含的组都会执行。
7.7、同时拥有include和exclude
@Test(groups = {"checkintest", "broken"} )
public void testMethod2() {
}
<test name="Simple example">
<groups>
<run>
<include name="checkintest"/>
<exclude name="broken"/>
</run>
</groups>
<classes>
<class name="example1.Test1"/>
</classes>
</test>
上述案例中,testMethod2方法上既有include的checkintest又有exclude的broken,那么这个方法将不会执行,使用这种方式可以让我们非常方便的暂时停用某些方法,而不会影响原来的配置,当你想继续使用这些方式时,只需要去掉broken即可。
7.8、在类上使用分组
@Test(groups = { "checkin-test" })
public class All {
@Test(groups = { "func-test" )
public void method1() { ... }
public void method2() { ... }
}
上述案例中,method1、method2方法都属于checkin-test组,method1同时也属于func-test组。当运行
checkin-test组时method1和method2都会运行,当允许func-test组时只会运行method1。
欢迎来到testingpai.com!
注册 关于