七、TestNG传递参数2
阅读原文时间:2023年07月08日阅读:2

数据提供者本身可以接受两个类型的参数:Method和ITestContext

在创建@DataProvider方法是可以有四种格式如图:

第一种在上一篇中有学到

1-Methode参数使用

@DataProvider 使用 java.lang.reflect.Method 作为第一个参数,TestNG 会把当前的测试方法当成参数传给第一个参数。

这样不同测@test测试方法可以调用不同的测试数据

package com.lc.testChuanCan02;

import java.lang.reflect.Method;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class testNG10 {

@DataProvider(name = "data1")
public Object[][] testNG10_01(Method method) {
Object[][] data01 = null;
//method.getName()的值是@test测试方法的名称
if(method.getName().equals("testNG10_02")) {
data01 = new Object[][] {{"我是测试方法a","我是测试方法a"}};
}else if(method.getName().equals("testNG10_03")) {
data01 = new Object[][] {{"我是测试方法b","我是测试方法b"}};
}

  return data01;  

}

@Test(dataProvider = "data1")
public void testNG10_03(String name1,String name2) {
System.out.println("name1:"+name1+";name2:"+name2);

}
}

2-ITestContext参数

给数据提供者提供ITestContext参数像是吧@test方的所在组提供给他;要配合txtng.xml文件使用。

下面是 @DataProvider 数据提供者如果 组名是functional-test( group.equals("functional-test")) 则随机生成10随机数给他测试方法,如果不是就提供2个随机数

package com.lc.testChuanCan02;

import java.util.List;
import java.util.Random;

import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class testNG11 {

@DataProvider  
public Object\[\]\[\] randomIntegers(ITestContext context){

    String\[\] groups = context.getIncludedGroups();

    int size = 2 ; 

    for(String group : groups) {  
        System.out.println("group=="+group);  
        if(group.equals("functional-test")) {  
            size = 10 ;  
            break;  
        }  
    }

    Object\[\]\[\] result = new Object\[size\]\[\];  
    Random r = new Random();

    for(int i = 0 ; i < size ; i++) {  
        result\[i\] = new Object\[\] {new Integer(r.nextInt())};  
    }  
    return result;

}

@Test(dataProvider = "randomIntegers",groups = {"unit-test","functional-test"})  
public void random(Integer n) {  
    System.out.println("n="+n);  
}

}