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!
注册 关于