TestNG 自动化测试入门教程--典型示例
TestNG介紹
TestNG是Java中的一個測試框架, 類似于JUnit 和NUnit, ? 功能都差不多, 只是功能更加強大,使用也更方便
Java中已經有一個JUnit的測試框架了。 ?TestNG比JUnit功能強大的多。 ?測試人員一般用TestNG來寫自動化測試。 ?開發人員一般用JUnit寫單元測試。
官方網站:?http://testng.org/doc/index.html
?
在Eclipse中安裝TestNG
打開Eclipse ? Help ->Install New Software , ? 然后Add ? "http://beust.com/eclipse"
?
TestNG最簡單的測試
?下面是TestNG的最簡單的一個例子
package TankLearn2.Learn;import org.junit.AfterClass; import org.junit.BeforeClass; import org.testng.annotations.Test;public class TestNGLearn1 {@BeforeClasspublic void beforeClass() {System.out.println("this is before class");}@Testpublic void TestNgLearn() {System.out.println("this is TestNG test case");}@AfterClasspublic void afterClass() {System.out.println("this is after class");} }?
TestNG的基本注解
?
| @BeforeSuite | 注解的方法將只運行一次,運行所有測試前此套件中。 |
| @AfterSuite | 注解的方法將只運行一次此套件中的所有測試都運行之后。 |
| @BeforeClass | 注解的方法將只運行一次先行先試在當前類中的方法調用。 |
| @AfterClass | 注解的方法將只運行一次后已經運行在當前類中的所有測試方法。 |
| @BeforeTest | 注解的方法將被運行之前的任何測試方法屬于內部類的?<test>標簽的運行。 |
| @AfterTest | 注解的方法將被運行后,所有的測試方法,屬于內部類的<test>標簽的運行。 |
| @BeforeGroups | 組的列表,這種配置方法將之前運行。此方法是保證在運行屬于任何這些組第一個測試方法,該方法被調用。 |
| @AfterGroups | 組的名單,這種配置方法后,將運行。此方法是保證運行后不久,最后的測試方法,該方法屬于任何這些組被調用。 |
| @BeforeMethod | 注解的方法將每個測試方法之前運行。 |
| @AfterMethod | 被注釋的方法將被運行后,每個測試方法。 |
| @DataProvider | 標志著一個方法,提供數據的一個測試方法。注解的方法必須返回一個Object[] [],其中每個對象[]的測試方法的參數列表中可以分配。 該@Test?方法,希望從這個DataProvider的接收數據,需要使用一個dataProvider名稱等于這個注解的名字。 |
| @Factory | 作為一個工廠,返回TestNG的測試類的對象將被用于標記的方法。該方法必須返回Object[]。 |
| @Listeners | 定義一個測試類的監聽器。 |
| @Parameters | 介紹如何將參數傳遞給@Test方法。 |
| @Test | 標記一個類或方法作為測試的一部分。 |
?
TestNG中如何執行測試
第一種直接執行:右鍵要執行的方法, 點Run As ->TestNG Test
?
?
第二種: ?通過testng.xml文件來執行. 把要執行的case, 放入testng.xml文件中。 右鍵點擊testng.xml, ? 點Run As
testng.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"><test name="test12"><classes><class name="TankLearn2.Learn.TestNGLearn1" /></classes></test> </suite>
?
TestNG按順序執行Case
在testng.xml中,可以控制測試用例按順序執行。 ?當preserve-order="true"是,可以保證節點下面的方法是按順序執行的
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"><test name="test12" preserve-order="true"><classes><class name="TankLearn2.Learn.TestNGLearn1"><methods><include name="TestNgLearn3" /><include name="TestNgLearn1" /><include name="TestNgLearn2" /></methods></class></classes></test> </suite>?
?
?
TestNG異常測試
測試中,有時候我們期望某些代碼拋出異常。
TestNG通過@Test(expectedExceptions) ?來判斷期待的異常, 并且判斷Error Message
package TankLearn2.Learn;import org.testng.annotations.Test;public class ExceptionTest {@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")public void testException(){throw new IllegalArgumentException("NullPoint");} }?
TestNG組測試
TestNG中可以把測試用例分組,這樣可以按組來執行測試用例比如:
package TankLearn2.Learn;import org.testng.annotations.Test;public class GroupTest {@Test(groups = {"systemtest"})public void testLogin(){System.out.println("this is test login");}@Test(groups = {"functiontest"})public void testOpenPage(){System.out.println("this is test Open Page");} }?
然后在testng.xml中 按組執行測試用例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"><test name="test1"><groups><run><include name="functiontest" /></run></groups></test> </suite>?
TestNG參數化測試
軟件測試中,經常需要測試大量的數據集。 測試代碼的邏輯完全一樣,只是測試的參數不一樣。 ?這樣我們就需要一種 “傳遞測試參數的機制”。 避免寫重復的測試代碼
TestNG提供了2種傳遞參數的方式。
第一種: testng.xml 方式使代碼和測試數據分離,方便維護
第二種:@DataProvider能夠提供比較復雜的參數。 (也叫data-driven testing)
?
方法一: 通過testng.xml 傳遞參數給測試代碼
package TankLearn2.Learn;import org.testng.annotations.Parameters; import org.testng.annotations.Test;public class ParameterizedTest1 {@Test@Parameters("test1")public void ParaTest(String test1){System.out.println("This is " + test1);} }testng.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"><parameter name="test1" value="Tank" /><parameter name="test1" value="Xiao" /><test name="test12"><classes><class name="TankLearn2.Learn.ParameterizedTest1" /></classes></test> </suite>?
方式二: ? 通過DataProvider傳遞參數
package TankLearn2.Learn;import org.testng.annotations.DataProvider; import org.testng.annotations.Test;public class DataProviderLearn {@DataProvider(name="user")public Object[][] Users(){return new Object[][]{{"root","passowrd"},{"cnblogs.com", "tankxiao"},{"tank","xiao"}};}@Test(dataProvider="user")public void verifyUser(String userName, String password){System.out.println("Username: "+ userName + " Password: "+ password);} }?
TestNG忽略測試
有時候測試用例還沒準備好, 可以給測試用例加上@Test(enable = false), ?來禁用此測試用例
package TankLearn2.Learn;import org.testng.annotations.Test;public class TesgNGIgnore {@Test(enabled = false)public void testIgnore(){System.out.println("This test case will ignore");} }?
TestNG 依賴測試
有時候,我們需要按順序來調用測試用例, ?那么測試用例之間就存在依賴關系。 TestNG支持測試用例之間的依賴
package TankLearn2.Learn;import org.testng.annotations.Test;public class DependsTest {@Testpublic void setupEnv(){System.out.println("this is setup Env");}@Test(dependsOnMethods = {"setupEnv"})public void testMessage(){System.out.println("this is test message");} }?
TestNG測試結果報告
測試報告是測試非常重要的部分. ?
TestNG默認情況下,會生產兩種類型的測試報告HTML的和XML的。 測試報告位于 "test-output" 目錄下.
?
當然我們也可以設置測試報告的內容級別.?
verbose="2" 標識的就是記錄的日志級別,共有0-10的級別,其中0表示無,10表示最詳細
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"><test name="test12" verbose="2"><classes><class name="TankLearn2.Learn.TestNGLearn1" /></classes></test> </suite>?
版權聲明:本文為小平果原創文章,轉載請注明:http://blog.csdn.net/i10630226
轉載于:https://www.cnblogs.com/dingxiaoyue/p/4948243.html
總結
以上是生活随笔為你收集整理的TestNG 自动化测试入门教程--典型示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GUI编程笔记(java)04:GUI(
- 下一篇: 【转载】C++创建对象的两种方法