TestNG 四 测试方法之工厂

工厂允许你动态的创建测试。例如,假设你需要创建一个测试方法,并用它来多次访问一个web页面,而且每次都带有不同的参数:

[java] view plain copy
 
  1. public class TestWebServer {  
  2.   @Test(parameters = { "number-of-times" })  
  3.   public void accessPage(int numberOfTimes) {  
  4.     while (numberOfTimes-- > 0) {  
  5.      // access the web page  
  6.     }  
  7.   }  
  8. }  

testng.xml:

[html] view plain copy
 
  1. <test name="T1">  
  2.   <parameter name="number-of-times" value="10"/>  
  3.   <class name= "TestWebServer" />  
  4. </test>  
  5. <test name="T2">  
  6.   <parameter name="number-of-times" value="20"/>  
  7.   <class name= "TestWebServer"/>  
  8. </test>  
  9. <test name="T3">  
  10.   <parameter name="number-of-times" value="30"/>  
  11.   <class name= "TestWebServer"/>  
  12. </test>  

参数一旦多起来,就难以管理了,所以应该使用工厂来做:

[java] view plain copy
 
  1. public class WebTestFactory {  
  2.   @Factory  
  3.   public Object[] createInstances() {  
  4.    Object[] result = new Object[10];    
  5.    for (int i = 0; i < 10; i++) {  
  6.       result[i] = new WebTest(i * 10);  
  7.     return result;  
  8.   }  
  9. }  

新的测试类如下:

[java] view plain copy
 
  1. public class WebTest {  
  2.   private int m_numberOfTimes;  
  3.   
  4.   public WebTest(int numberOfTimes) {  
  5.     m_numberOfTimes = numberOfTimes;  
  6.   }  
  7.   @Test  
  8.   public void testServer() {  
  9.    for (int i = 0; i < m_numberOfTimes; i++) {  
  10.      // access the web page  
  11.     }  
  12.   }  
  13. }  

你的testng.xml 只需要引用包含工厂方法的类,而测试实例自己会在运行时创建:

<class name="WebTestFactory"/>

工厂方法可以接受诸如 @Test 和 @Before/After 所标记的参数,并且会返回 Object[]。这些返回的对象可以是任何类(不一定是跟工厂方法相同的类),并且他们甚至都不需要TestNG注解(在例子中会被TestNG忽略掉)

本文转载自:http://blog.sina.com.cn/bestfeiyong 

 
 
原文地址:https://www.cnblogs.com/ceshi2016/p/6439919.html