IT源码网

TestNG之参数化

itxm 2021年05月17日 程序员 410 0

TestNG提供了两种参数化的方式,一种是通过XML,一种是通过代码实现,下面对这两种方式做介绍。

一、通过xml

    /**  
    *   <suite name="Suite" parallel="false"> 
    *   <!-- XML中增加一下两行 --> 
    *   <parameter name="username"  value="admin"/> 
      *    <parameter name="password"  value="123456"/> 
    *  
    * @Title: paraFromXML  
    * @Description: Parameters from testng.xml 
    * @param name 
    * @param pwd 
    * @return void 
    * @throws  
    */ 
    @Parameters({"username","password"}) 
    @Test 
    public void paraFromXML(String name, String pwd) { 
        System.out.println(name+","+pwd); 
        //print admin,123456 
    }

二、通过DataProvider,返回值分别是Object[][]和Iterator<Object[]>

返回值是Object[][]

1.DataProvider提供者和调用者在同一个类

    @DataProvider(name="testdp") 
    public Object[][] createData() { 
         return new Object[][] { 
           { "张三", new Integer(36) }, 
           { "李四", new Integer(37)}, 
         }; 
        } 
     
    /**  
    * @Title: paraFromDP  
    * @Description: Parameters from DataProvider in one class 
    * @param name 
    * @param it 
    * @return void 
    * @throws  
    */ 
    @Test(dataProvider="testdp") 
    public void paraFromDP(String name, Integer it) { 
        System.out.println(name+", "+it); 
        //print 
        //张三, 36 
        //李四, 37 
    }

2.DataProvider提供者和调用者在不同的类

DataProvider调用类:

package test.testng; 
 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 
 
/**  
 * @author QiaoJiafei  
 * @version 创建时间:2015年12月11日 上午10:30:35  
 * 类说明  
 */ 
public class TestParameters { 
    /**  
    * @Title: paraFromDPA  
    * @Description: Parameters from DataProvider in another class 
    * @param num 
    * @return void 
    * @throws  
    */ 
    @Test(dataProvider = "create", dataProviderClass = StaticProvider.class) 
    public void paraFromDPA(Integer num) { 
        System.out.println(num); 
        //print 42 
    } 
     
}

DataProvider提供类:

package test.testng; 
 
import org.testng.annotations.DataProvider; 
 
/**  
 * @author QiaoJiafei  
 * @version 创建时间:2015年12月11日 上午11:34:01  
 * 类说明  
 */ 
public class StaticProvider { 
     @DataProvider(name = "create") 
     public static Object[][] createData() { 
         return new Object[][] { 
            new Object[] { new Integer(42) } 
        }; 
     } 
}

返回值是Iterator<Object[]>

3.1数据源提供类

package com.data; 
 
import java.lang.reflect.Method; 
import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.Iterator; 
import java.util.List; 
 
import org.apache.poi.hslf.model.Sheet; 
import org.testng.annotations.DataProvider; 
 
/**  
 * @author QiaoJiafei  
 * @version 创建时间:2016年1月20日 上午11:58:26  
 * 类说明  
 */ 
public class TestD { 
    @DataProvider(name="testdp") 
    public static Iterator<Object[]> createData() { 
        HashSet<Integer> set = new HashSet<Integer>(); 
        set.add(Integer.valueOf(4)); 
        set.add(Integer.valueOf(5)); 
         
        HashSet<Object[]> so = new HashSet<Object[]>(); 
        for(Integer intg:set){ 
            so.add(new Object[]{intg}); 
        } 
         
        return so.iterator(); 
    } 
}

3.2 测试调用类

package com.data; 
 
import org.testng.annotations.Test; 
 
/**  
 * @author QiaoJiafei  
 * @version 创建时间:2016年1月20日 上午11:58:34  
 * 类说明  
 */ 
public class TestT { 
    @Test(dataProvider="testdp",dataProviderClass = TestD.class) 
    public void login(Integer caseNum) { 
        System.out.println(caseNum); 
    } 
}

输出:

4
5

三、dataProvider方法可接受 的参数:Method method, ITestContext context,如:

package com.data; 
 
import java.lang.reflect.Method; 
import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.Iterator; 
import java.util.List; 
 
import org.apache.poi.hslf.model.Sheet; 
import org.testng.ITestContext; 
import org.testng.annotations.DataProvider; 
 
/**  
 * @author QiaoJiafei  
 * @version 创建时间:2016年1月20日 上午11:58:26  
 * 类说明  
 */ 
public class TestD { 
    @DataProvider(name="testdp") 
    public static Iterator<Object[]> createData(Method method, ITestContext context) { 
        System.out.println("-----------"+method.getName()); 
        System.out.println("-----------"+context.getName()); 
        HashSet<Integer> set = new HashSet<Integer>(); 
        set.add(Integer.valueOf(4)); 
        set.add(Integer.valueOf(5)); 
         
        HashSet<Object[]> so = new HashSet<Object[]>(); 
        for(Integer intg:set){ 
            so.add(new Object[]{intg}); 
        } 
         
        return so.iterator(); 
    } 
}

注意:参数可以传其中一个,也可以两个一起传入

四.参数化后,在测试报告的显示如下图:


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

如何用dos命令运行testng