【本系列其他教程正在陆续翻译中,点击分类:TestNG进行查看。】
【翻译 by 明明如月 QQ 605283073】
原文:http://websystique.com/java/testing/testng-suites-example/
上一篇:TestNG Groups 例子
本文将讲述TestNG Suite 测试,一个Suite(套件)在 TestNG 中通过一个叫testng.xml的XML文件表示。
当TestNG 执行一个套件,他主要先读取此xml内容然后根据xml定义的情况进行执行。
testng.xml 的例子
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="tests" parallel="tests" thread-count="2"> <test name="front-end"> <packages> <package name="com.websystique.testng.frontend.*" /> </packages> </test> <test name="back-end"> <packages> <package name="com.websystique.testng.backend.*" /> </packages> </test> </suite>
每个<test>标签都包含指定的包名。当TestNG想运行此套件时,将检查这些包,获得需要运行的
测试类和方法。
在这种情况下 front-end 和back-end 测试可以平行运行。
注意:套件的每一个分类如front-end 将通过单独的一个线程运行。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="tests"> <test name="full"> <packages> <package name="com.websystique.*" /> </packages> </test> </suite>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="tests"> <test name="backend"> <groups> <run> <exclude name="ui" /> </run> </groups> <packages> <package name="com.websystique.*" /> </packages> </test> </suite>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="tests"> <test name="backend"> <groups> <run> <exclude name="ui" /> </run> </groups> <classes> <class name="com.websystique.testng.TestCalculator" /> </classes> </test> </suite>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="fulltests"> <test name="front-end"> <classes> <class name="com.websystique.testng.TestUI" /> </classes> </test> <test name="back-end"> <classes> <class name="com.websystique.testng.TestSecurity" /> <class name="com.websystique.testng.TestDataBase" /> <class name="com.websystique.testng.TestBackendConfig" /> </classes> </test> </suite>
package com.websystique.testng; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TestUI { @BeforeTest public void beforeTest() { System.out.println("@BeforeTest"); } @AfterTest public void afterTest() { System.out.println("@AfterTest\n"); } @Test(groups= "ui") public void openConfirmationDialog() { System.out.println("openConfirmationDialog()"); } @Test(groups= "ui") public void openFileDialog() { System.out.println("openFileDialog()"); } }
package com.websystique.testng; import org.testng.annotations.Test; public class TestSecurity { @Test(groups= "security") public void accessHomePage() { System.out.println("accessHomePage()"); } @Test(groups= "security") public void accessAdminPage() { System.out.println("accessAdminPage()"); } }
package com.websystique.testng; import org.testng.annotations.Test; public class TestDataBase { @Test(groups= "database") public void testInsert(){ System.out.println("testInsert()"); } @Test(groups= "database") public void testUpdate(){ System.out.println("testUpdate()"); } @Test(groups= "database") public void testDelete(){ System.out.println("testDelete()"); } }
package com.websystique.testng; import org.testng.annotations.AfterSuite; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeSuite; import org.testng.annotations.BeforeTest; public class TestBackendConfig { @BeforeSuite public void beforeSuite() { System.out.println("@BeforeSuite\n"); } @AfterSuite public void afterSuite() { System.out.println("@AfterSuite"); } @BeforeTest public void beforeTest() { System.out.println("@BeforeTest"); } @AfterTest public void afterTest() { System.out.println("@AfterTest\n"); } }
执行结果:
@BeforeSuite @BeforeTest openConfirmationDialog() openFileDialog() @AfterTest @BeforeTest accessAdminPage() accessHomePage() testDelete() testInsert() testUpdate() @AfterTest @AfterSuite =============================================== fulltests Total tests run: 7, Failures: 0, Skips: 0 ===============================================