简介
TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试,这个是TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试,TestNG无疑走的更远。可以用于集成测试,这个特性是我选择TestNG的最重要的原因。
先了解这两个注解的意思
@DataProvider 标记一个方法用于为测试方法提供数据。被注释的方法必须返回Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表。
从这个DataProvider接收数据@Test方法需要使用一个dataProvider名称等于这个注解的名字。
@Factory 标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]。
代码
文件结构
├── 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 * @updateUser 11 * @updateDate 12 */ 13 public class TestFactory { 14 15 @DataProvider(name = "datasource") 16 public Object[][] datasource() { 17 18 // Creating and filling result array 19 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工厂类,在带有@Factory注解的方法中调用被执行的测试类,TestNg会自动调用被执行类中带有@Test注解的方法,被执行的测试类为:HomePageTest , LoginPageTest
使用@DataProvider作为数据注入的方式,向Factory中注入数据,并执行测试。
##转载注明出处: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 * @updateUser 10 * @updateDate 11 */ 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 @Test 23 public void testLogin() { 24 // for demo purpose only 25 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 * @updateUser 10 * @updateDate 11 */ 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 @Test 24 public void testHomePage() { 25 System.out.println(userID + " - " + userName + " is testing Home page"); 26 } 27 28 }
##转载注明出处: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 page User2 - JamesBond is testing Home page User1 - WadeXu is testing Login page User2 - JamesBond is testing Login page
注意测试方法将被一共执行的次数,@DataProvider属于循环测试的类型。
TestNG更多功能请参考官方站点
感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。