TestNG是一個(gè)設(shè)計(jì)用來(lái)簡(jiǎn)化廣泛的測(cè)試需求的測(cè)試框架,從單元測(cè)試到集成測(cè)試,這個(gè)是TestNG設(shè)計(jì)的出發(fā)點(diǎn),不僅僅是單元測(cè)試,而且可以用于集成測(cè)試。設(shè)計(jì)目標(biāo)的不同,對(duì)比junit的只適合用于單元測(cè)試,TestNG無(wú)疑走的更遠(yuǎn)。可以用于集成測(cè)試,這個(gè)特性是我選擇TestNG的最重要的原因。
先了解這兩個(gè)注解的意思
@DataProvider 標(biāo)記一個(gè)方法用于為測(cè)試方法提供數(shù)據(jù)。被注釋的方法必須返回Object[][], 其中每個(gè)Object[]可以指派為這個(gè)測(cè)試方法的參數(shù)列表。
從這個(gè)DataProvider接收數(shù)據(jù)@Test方法需要使用一個(gè)dataProvider名稱(chēng)等于這個(gè)注解的名字。
@Factory 標(biāo)記方法作為一個(gè)返回對(duì)象的工廠,這些對(duì)象將被TestNG用于作為測(cè)試類(lèi)。這個(gè)方法必須返回Object[]。
文件結(jié)構(gòu)
├── src/main/java/test/demo/TestFactory.java├── src/main/java/test/demo/LoginPageTest.java│── src/main/java/test/demo/HomePageTest.java└── src/test/resources/smokeTest.xml
1 package test.demo; 2 3 import org.testng.annotations.DataProvider; 4 import org.testng.annotations.Factory; 5 6 /** 7 * @Description: Demo 8 * @author wadexu 9 * 10 * @updateUser11 * @updateDate12 */13 public class TestFactory {14 15 @DataProvider(name = "datasource")16 public Object[][] datasource() {17 18 // Creating and filling result array19 Object[][] credentials = new Object[2][2];20 21 credentials[0][0] = "User1";22 credentials[0][1] = "WadeXu";23 24 credentials[1][0] = "User2";25 credentials[1][1] = "JamesBond";26 27 return credentials;28 }29 30 @Factory(dataProvider = "datasource")31 public Object[] createTest(String userID, String userName) {32 33 Object[] tests = new Object[2];34 35 tests[0] = new HomePageTest(userID, userName);36 tests[1] = new LoginPageTest(userID, userName);37 38 return tests;39 }40 41 42 }
TestFactory工廠類(lèi),在帶有@Factory注解的方法中調(diào)用被執(zhí)行的測(cè)試類(lèi),TestNg會(huì)自動(dòng)調(diào)用被執(zhí)行類(lèi)中帶有@Test注解的方法,被執(zhí)行的測(cè)試類(lèi)為:HomePageTest , LoginPageTest
使用@DataProvider作為數(shù)據(jù)注入的方式,向Factory中注入數(shù)據(jù),并執(zhí)行測(cè)試。
##轉(zhuǎn)載注明出處:http://www.cnblogs.com/wade-xu/p/4761275.html
1 package test.demo; 2 3 import org.testng.annotations.Test; 4 5 /** 6 * @Description: Demo Login Page 7 * @author wadexu 8 * 9 * @updateUser10 * @updateDate11 */12 public class LoginPageTest {13 14 private String userID;15 private String userName;16 17 public LoginPageTest(String userID, String userName) {18 this.userID = userID;19 this.userName = userName;20 }21 22 @Test23 public void testLogin() {24 // for demo purpose only25 System.out.println(userID + " - " + userName + " is testing Login page");26 }27 28 }
1 package test.demo; 2 3 import org.testng.annotations.Test; 4 5 /** 6 * @Description: Demo Home Page 7 * @author wadexu 8 * 9 * @updateUser10 * @updateDate11 */12 public class HomePageTest {13 14 private String userID;15 private String userName;16 17 public HomePageTest(String userID, String userName) {18 this.userID = userID;19 this.userName = userName;20 }21 22 23 @Test24 public void testHomePage() {25 System.out.println(userID + " - " + userName + " is testing Home page");26 }27 28 }
##轉(zhuǎn)載注明出處:http://www.cnblogs.com/wade-xu/p/4761275.html
TestNG xml配置文件如下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><!--<suite name="DMP_Test_Suite" --><suite name="Demo_Test_Suite" parallel="false"> <test name="Demo_Test"> <classes> <class name="test.demo.TestFactory" /> </classes> </test> </suite>
右擊xml文件Run as TestNG
Test Result:
Console output:
User1 - WadeXu is testing Home pageUser2 - JamesBond is testing Home pageUser1 - WadeXu is testing Login pageUser2 - JamesBond is testing Login page
注意測(cè)試方法將被一共執(zhí)行的次數(shù),@DataProvider屬于循環(huán)測(cè)試的類(lèi)型。
TestNG更多功能請(qǐng)參考官方站點(diǎn)
感謝閱讀,如果您覺(jué)得本文的內(nèi)容對(duì)您的學(xué)習(xí)有所幫助,您可以點(diǎn)擊右下方的推薦按鈕,您的鼓勵(lì)是我創(chuàng)作的動(dòng)力。
##轉(zhuǎn)載注明出處:http://www.cnblogs.com/wade-xu/p/4761275.html
聯(lián)系客服