國慶7天假期,大部分朋友都出去旅遊了,微信圈裏全是曬旅遊的照片, 東南亞遊,歐洲遊呀,真是羨慕呀。 悲慘的我只去了上海野生動物園, 在家休息,利用這段假期,把以前學過的東西都總結下。 html
我前段時間加班太多了,天天忙碌工做,都沒精力去管本身的學習新技能的計劃, 博客也沒寫幾篇,不少想作的事情都由於工做太忙而耽擱了。 因此工做太忙了也很差,沒有精力關注工做之外的事情。 微信
最近寫自動化測試天天都用到TestNG, 把經常使用的TestNG的用法總結下。框架
閱讀目錄eclipse
TestNG介紹ide
在Eclipse中在線安裝TestNG單元測試
在Eclipse中離線安裝Testng學習
TestNG最簡單的測試測試
TestNG的基本註解網站
TestNG中如何執行測試ui
使用testtng.xml 文件執行 case
TestNG按順序執行Case
TestNG異常測試
TestNG組測試
TestNG參數化測試
TestNG忽略測試
TestNG 依賴測試
TestNG測試結果報告
TestNG是Java中的一個測試框架, 相似於JUnit 和NUnit, 功能都差很少, 只是功能更增強大,使用也更方便
Java中已經有一個JUnit的測試框架了。 TestNG比JUnit功能強大的多。 測試人員通常用TestNG來寫自動化測試。 開發人員通常用JUnit寫單元測試。
官方網站: http://testng.org/doc/index.html
打開Eclipse Help ->Install New Software , 而後Add "http://beust.com/eclipse"
首先下載testng離線包: http://pan.baidu.com/s/1hrEaX6k
1. 將解壓後的文件..\eclipse-testng離線包\features\org.testng.eclipse_6.9.9.201510270734 文件夾 放到 eclipse--》features目錄下
2. 將解壓後的文件..\eclipse-testng離線包\plugins\org.testng.eclipse_6.9.8.201510130443 文件夾 放到 eclipse--》plugins目錄下
3. 重啓eclipse
4. 驗證是否安裝成功,file-->new-->other-->TestNg
下面是TestNG的最簡單的一個例子
package TankLearn2.Learn;import org.junit.AfterClass;import org.junit.BeforeClass;import org.testng.annotations.Test;public class TestNGLearn1 { @BeforeClass public void beforeClass() { System.out.println("this is before class"); } @Test public void TestNgLearn() { System.out.println("this is TestNG test case"); } @AfterClass public void afterClass() { System.out.println("this is after class"); } }
註解 | 描述 |
---|---|
@BeforeSuite | 註解的方法將只運行一次,運行全部測試前此套件中。 |
@AfterSuite | 註解的方法將只運行一次此套件中的全部測試都運行以後。 |
@BeforeClass | 註解的方法將只運行一次先行先試在當前類中的方法調用。 |
@AfterClass | 註解的方法將只運行一次後已經運行在當前類中的全部測試方法。 |
@BeforeTest | 註解的方法將被運行以前的任何測試方法屬於內部類的 <test>標籤的運行。 |
@AfterTest | 註解的方法將被運行後,全部的測試方法,屬於內部類的<test>標籤的運行。 |
@BeforeGroups | 組的列表,這種配置方法將以前運行。此方法是保證在運行屬於任何這些組第一個測試方法,該方法被調用。 |
@AfterGroups | 組的名單,這種配置方法後,將運行。此方法是保證運行後不久,最後的測試方法,該方法屬於任何這些組被調用。 |
@BeforeMethod | 註解的方法將每一個測試方法以前運行。 |
@AfterMethod | 被註釋的方法將被運行後,每一個測試方法。 |
@DataProvider | 標誌着一個方法,提供數據的一個測試方法。註解的方法必須返回一個Object[] [],其中每一個對象[]的測試方法的參數列表中能夠分配。 該@Test 方法,但願從這個DataProvider的接收數據,須要使用一個dataProvider名稱等於這個註解的名字。 |
@Factory | 做爲一個工廠,返回TestNG的測試類的對象將被用於標記的方法。該方法必須返回Object[]。 |
@Listeners | 定義一個測試類的監聽器。 |
@Parameters | 介紹如何將參數傳遞給@Test方法。 |
@Test | 標記一個類或方法做爲測試的一部分。 |
第一種直接執行:右鍵要執行的方法, 點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.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經過@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中能夠把測試用例分組,這樣能夠按組來執行測試用例好比:
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提供了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); } }
有時候測試用例還沒準備好, 能夠給測試用例加上@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支持測試用例之間的依賴
package TankLearn2.Learn;import org.testng.annotations.Test;public class DependsTest { @Test public void setupEnv(){ System.out.println("this is setup Env"); } @Test(dependsOnMethods = {"setupEnv"}) public void testMessage(){ System.out.println("this is test message"); } }
測試報告是測試很是重要的部分.
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>
來源:https://www.cnblogs.com/TankXiao/p/3888070.html?from=timeline