【本系列其他教程正在陆续翻译中,点击分类:TestNG进行查看。】
【翻译 by 明明如月 QQ 605283073】
原文:http://websystique.com/java/testing/testng-suites-example/
上一篇:TestNG Groups 例子
本文将讲述TestNG Suite 测试,一个Suite(套件)在 TestNG 中通过一个叫testng.xml的XML文件表示。
使用
TestNG的每个测试方法都是套件的一部分。
在TestNG中一个套件通过一个通常命名为testng.xml的XML文件表示。
<suite> 标签是此xml的第一个标签,代表一个套件,它里面可以包含
<test>标签。每一个<test>标签相应的也可能含有一个或者多个<classes>。
<packages>, <groups> 标签。
当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> 标签有两个带有name的值‘front-end’ & ‘back-end’。
每个<test>标签都包含指定的包名。当TestNG想运行此套件时,将检查这些包,获得需要运行的
测试类和方法。
在这种情况下 front-end 和back-end 测试可以平行运行。
注意:套件的每一个分类如front-end 将通过单独的一个线程运行。
更多Suite(套件)例子
<?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>
2)执行除 ui group外的所有测试
<?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>
2)执行除 ui group外的所有测试(用类代替包)
<?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>
套件 & 测试标签级注解:
这比较适合设置或者初始化多个分组共有的环境。
@AfterSuite
注解的方法将在套件内什么的任何测试方法执行后被执行一次。
这比较适合设置或者初始化多个分组共有的环境。
@BeforeTest将在 带有<test>标签的任何方法执行之前执行一次。
@AfterTest则与之相反。
完整的例子
创建
testNG.xml
src/test/resources/testNG.xml
<?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");
}
}
右键 testng.xml, Run As–>TestNG Suites
执行结果:
@BeforeSuite
@BeforeTest
openConfirmationDialog()
openFileDialog()
@AfterTest
@BeforeTest
accessAdminPage()
accessHomePage()
testDelete()
testInsert()
testUpdate()
@AfterTest
@AfterSuite
===============================================
fulltests
Total tests run: 7, Failures: 0, Skips: 0
===============================================