其实这篇文章的group宏哥在上一篇中就提到过,可是就是举例一笔带过的,所以今天专门有一篇文章来说解Group的相关知识。但愿你们茅塞顿开 ,有着更进一步认识和了解测试组。java
TestNG 容许你将复杂的测试方法归类为不一样的组。不只仅是能够声明某个方法属于某个组,并且还可让组包含其余的组。这样TestNG能够调用或者请求包含一组特定的组 (或者正则表达式)而排除其余不须要组的集合。这样,若是你打算将测试分红两份的时候,就无需从新编译。这个特色,会给你在划分组的时候带来很大的灵活性。linux
组(Group)在testng.xml文件中指定,能够在<test>或<suite>标记下找到。<suite>标记中指定的组适用于下面的全部<test>标记。请注意,组在这些标记中是累积的:若是在<suite>中指定组“a”,在<test>中指定“b” ,则将包括“a”和“b”。正则表达式
例如,一般将测试划分为两种类别是再常见不过的了:windows
检查性测试(Check-in test):这些测试在你提交新代码以前就会运行。它们通常都是很快进行的,而且保证没有哪一个基本的功能是很差使的。微信
功能性测试(Functional test):这些测试涵盖你的软件中全部的功能,而且至少天天运行一次,不过你也可能但愿他们持续的运行。框架
典型的来讲,检测性测试一般是功能性测试的一个子集。TestNG容许你根据我的感受来进行组划分。例如,你可能但愿把你全部的测试类都划归为"functest"组,而且额外的有几个方法输入"checkintest"组。测试
TestNG容许您以很是直观的方式使用测试组指定。例如,您能够经过说明您的整个测试类属于“functest”组来构建测试,另外还有一些方法属于“checkintest”组:ui
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自动化测试交流群:694280102 * * Java自动化测试框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */
public class Test1 { @Test(groups = { "functest", "checkintest" }) public void testMethod1() { } @Test(groups = {"functest", "checkintest"} ) public void testMethod2() { } @Test(groups = { "functest" }) public void testMethod3() { } }
经过下面的内容调用TestNGspa
<test name="Test1">
<groups>
<run>
<include name="functest"/>
</run>
</groups>
<classes>
<class name="example1.Test1"/>
</classes>
</test>
以上会运行上面那个类中全部的测试,当要使用checkintest进行调用的时候,就仅仅运行testMethod1()和testMethod2()。.net
下面是另一个例子。此次使用正则表达式。假定有些测试方法不该该运行在Linux环境下,你的测试会看起来像:
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自动化测试交流群:694280102 * * Java自动化测试框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */ @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使用的是正则表达式,而不是通配符。注意这两者的区别
例如,"anything" 是匹配于 ".*" -- 点和星号 -- 而不是星号 "*".
测试组也能够包含其余组。这样的组叫作“元组”(MetaGroups)。例如,你可能要定义一个组all来包含其余的组,chekcintest 和functest。"functest"自己只包含了组windows和linux,而"checkintest"仅仅包含windows。你就能够在属性文件中这样定义:
<test name="Regression1">
<groups>
<define name="functest">
<include name="windows"/>
<include name="linux"/>
</define>
<define name="all">
<include name="functest"/>
<include name="checkintest"/>
</define>
<run>
<include name="all"/>
</run>
</groups>
<classes>
<class name="test.sample.Test1"/>
</classes>
</test>
TestNG 容许你包含组,固然也能够排除之。
譬如说,由于最近的改动,致使当前的测试中断而且,你尚未时间修复这些问题都是司空见惯的。可是,你还须要本身的功能测试能够正确运行,因此,制药简单的让这些不须要的测试失效就能够了。可是别忘记在之后须要的时候,要从新让其生效。
一个简单的办法来解决这个问题就是建立一个叫作"broken"组,而后使得这些测试方法从属于那个组。例如上面的例子,假设我知道testMethod2()会中断,因此我但愿使其失效:
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自动化测试交流群:694280102 * * Java自动化测试框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */ @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>
经过这种办法,咱们既能够获得整洁的测试运行,同时也可以跟踪那些须要稍后修正的中断的测试。
注意:你能够能够经过使用"enabled"属性来完成,这个属性适用于@Test 和 @Before/After annotation。
能够在类级别定义组,以后还能够在方法级定义组:
package hongge; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import hongge.TestSum; /** * @author 北京-宏哥 * * java自动化测试交流群:694280102 * * Java自动化测试框架-03 - TestNG之Test Group篇 * * 2019年10月22日 */ @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"组。
你能够排除或者包含单个方法
<test name="Test1">
<classes>
<class name="example1.Test1">
<methods>
<include name=".*enabledTestMethod.*"/>
<exclude name=".*brokenTestMethod.*"/>
</methods>
</class>
</classes>
</test>
这能够派上用来停用单个方法而没必要从新编译任何东西,但我不建议过多地使用这种技术,由于若是你开始重构Java代码(正则表达式中使用的正则表达式),它会使你的测试框架崩溃。标签可能再也不符合您的方法)。
嘿嘿!今天就分享到这里。下一篇计划是测试方法(Test Method),但愿小伙伴们和童鞋们喜欢和继续关注宏哥!
有问题加入java自动化测试交流群:694280102
我的公众号 微信群 (微信群已满100,能够加宏哥的微信拉你进群,请备注:进群)
您的确定就是我进步的动力。若是你感受还不错,就请鼓励一下吧!记得点波 推荐 哦!!!(点击右边的小球便可!(^__^) 嘻嘻……)