國(guó)慶7天假期,,大部分朋友都出去旅游了,,微信圈里全是曬旅游的照片, 東南亞游,,歐洲游呀,,真是羨慕呀。 悲慘的我只去了上海野生動(dòng)物園,, 在家休息,,利用這段假期,把之前學(xué)過的東西都總結(jié)下,。 我前段時(shí)間加班太多了,,每天忙碌工作,都沒精力去管自己的學(xué)習(xí)新技能的計(jì)劃, 博客也沒寫幾篇,,很多想做的事情都因?yàn)楣ぷ魈ΧR了,。 所以工作太忙了也不好,沒有精力關(guān)注工作以外的事情,。 最近寫自動(dòng)化測(cè)試每天都用到TestNG, 把常用的TestNG的用法總結(jié)下。
閱讀目錄
TestNG介紹TestNG是Java中的一個(gè)測(cè)試框架,, 類似于JUnit 和NUnit, 功能都差不多,, 只是功能更加強(qiáng)大,使用也更方便 Java中已經(jīng)有一個(gè)JUnit的測(cè)試框架了,。 TestNG比JUnit功能強(qiáng)大的多,。 測(cè)試人員一般用TestNG來寫自動(dòng)化測(cè)試。 開發(fā)人員一般用JUnit寫單元測(cè)試,。 官方網(wǎng)站: http:///doc/index.html
在Eclipse中安裝TestNG打開Eclipse Help ->Install New Software , 然后Add "http:///eclipse"
TestNG最簡(jiǎn)單的測(cè)試下面是TestNG的最簡(jiǎn)單的一個(gè)例子 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"); } }
TestNG的基本注解
TestNG中如何執(zhí)行測(cè)試第一種直接執(zhí)行:右鍵要執(zhí)行的方法, 點(diǎn)Run As ->TestNG Test
第二種: 通過testng.xml文件來執(zhí)行. 把要執(zhí)行的case, 放入testng.xml文件中,。 右鍵點(diǎn)擊testng.xml, 點(diǎn)Run As testng.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http:///testng-1.0.dtd" >
<suite name="Suite1">
<test name="test12">
<classes>
<class name="TankLearn2.Learn.TestNGLearn1" />
</classes>
</test>
</suite>
TestNG按順序執(zhí)行Case在testng.xml中,,可以控制測(cè)試用例按順序執(zhí)行。 當(dāng)preserve-order="true"是,可以保證節(jié)點(diǎn)下面的方法是按順序執(zhí)行的 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http:///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異常測(cè)試測(cè)試中,,有時(shí)候我們期望某些代碼拋出異常,。 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組測(cè)試TestNG中可以把測(cè)試用例分組,,這樣可以按組來執(zhí)行測(cè)試用例比如: 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中 按組執(zhí)行測(cè)試用例 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http:///testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <groups> <run> <include name="functiontest" /> </run> </groups> </test> </suite>
TestNG參數(shù)化測(cè)試軟件測(cè)試中,,經(jīng)常需要測(cè)試大量的數(shù)據(jù)集。 測(cè)試代碼的邏輯完全一樣,,只是測(cè)試的參數(shù)不一樣,。 這樣我們就需要一種 “傳遞測(cè)試參數(shù)的機(jī)制”。 避免寫重復(fù)的測(cè)試代碼 TestNG提供了2種傳遞參數(shù)的方式,。 第一種: testng.xml 方式使代碼和測(cè)試數(shù)據(jù)分離,,方便維護(hù) 第二種:@DataProvider能夠提供比較復(fù)雜的參數(shù)。 (也叫data-driven testing)
方法一: 通過testng.xml 傳遞參數(shù)給測(cè)試代碼 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-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傳遞參數(shù) 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忽略測(cè)試有時(shí)候測(cè)試用例還沒準(zhǔn)備好,, 可以給測(cè)試用例加上@Test(enable = false),, 來禁用此測(cè)試用例 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 依賴測(cè)試有時(shí)候,我們需要按順序來調(diào)用測(cè)試用例,, 那么測(cè)試用例之間就存在依賴關(guān)系,。 TestNG支持測(cè)試用例之間的依賴 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測(cè)試結(jié)果報(bào)告測(cè)試報(bào)告是測(cè)試非常重要的部分. TestNG默認(rèn)情況下,會(huì)生產(chǎn)兩種類型的測(cè)試報(bào)告HTML的和XML的,。 測(cè)試報(bào)告位于 "test-output" 目錄下.
當(dāng)然我們也可以設(shè)置測(cè)試報(bào)告的內(nèi)容級(jí)別. verbose="2" 標(biāo)識(shí)的就是記錄的日志級(jí)別,,共有0-10的級(jí)別,其中0表示無,,10表示最詳細(xì) <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http:///testng-1.0.dtd" > <suite name="Suite1"> <test name="test12" verbose="2"> <classes> <class name="TankLearn2.Learn.TestNGLearn1" /> </classes> </test> </suite>
如果您看了本篇博客,覺得對(duì)您有所收獲,,請(qǐng)點(diǎn)擊右下角的 [推薦] 如果您想轉(zhuǎn)載本博客,請(qǐng)注明出處 如果您對(duì)本文有意見或者建議,,歡迎留言 感謝您的閱讀,,請(qǐng)關(guān)注我的后續(xù)博客 |
|