第一步:在测试类中写业务逻辑测试代码+在测试类中插入testng相关注解
数据驱动给@test标记的方法提供数据
看数据驱动源码
在TestNG中,你可以使用
@DataProvider
注解来标记一个方法,该方法将提供数据给测试方法。数据提供者的名称默认为方法名。被注解的方法必须返回一个Object[][]
数组,其中每个Object[]
数组可以赋值给测试方法的参数列表。如果你有一个测试方法,它需要从数据提供者那里接收数据,那么你需要使用
@Test
注解,并指定dataProvider
属性,其值应该与数据提供者的名称相同。下面举例讲解
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; public class MyTestClass { // 数据提供者方法,返回Object[][]数组 @DataProvider(name = "testData") public Object[][] provideTestData() { return new Object[][] { {"value1", 1}, {"value2", 2}, {"value3", 3} }; } // 测试方法,使用上面定义的数据提供者 @Test(dataProvider = "testData") public void testMethod(String stringValue, int intValue) { // 在这里使用传入的参数进行测试 System.out.println("String value: " + stringValue); System.out.println("Integer value: " + intValue); // ... 编写测试逻辑 ... }
}
在上面的例子中,
provideTestData
方法是一个数据提供者,它返回了一个二维数组Object[][]
,每个内部数组Object[]
包含两个元素,分别是一个字符串和一个整数。这个数据提供者方法被标记为@DataProvider
,并命名为"testData"。然后,在
testMethod
测试方法中,我们使用@Test
注解,并通过dataProvider
属性指定了我们希望使用的数据提供者名称"testData"。这样,TestNG在运行testMethod
方法时,会调用provideTestData
方法,并将返回的每组数据依次传递给testMethod
方法的参数。通过这种方式,你可以为测试方法提供多组不同的数据,从而进行参数化测试。
数据驱动的返回规范 是二维数组
步骤:
1、查看list集合内容
2、因数据驱动返回规范事二维数组,格式是Object[][],所以
3、得到excel内的测试用例
调用ExcelRead获取list集合,从之前代码中复制过来,就是new ExcelRead得到,再用对象调handlerExcel方法,传入case info这个类
4、用例存储到二维数组
为什么要存到二维数组,因为数据驱动的规范
二维数组是什么
二维数组本质上是一个数组的数组,即每个元素都是一个数组的数组。在编程中,二维数组常被用于表示表格或矩阵,其中每个元素可以通过两个索引(通常是行索引和列索引)来访问。
例如,在Java中,一个二维数组可以这样声明和初始化:
java复制代码
int[][] array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
在这个例子中,
array
是一个二维数组,它有3个元素,每个元素本身又是一个包含3个整数的数组。你可以通过array[i][j]
的形式来访问二维数组中的元素,其中i
是行索引,j
是列索引。二维数组在很多场景中都非常有用,比如:
- 表示棋盘的格子和状态。
- 存储学生的成绩,其中行可以表示学生,列可以表示科目。
- 实现矩阵运算。
- 在科学计算中处理多维数据。
需要注意的是,二维数组在内存中是连续存储的,但其布局方式(即行优先还是列优先)可能会因编程语言和平台的不同而有所差异。在编程时,应当注意二维数组的初始化和访问方式,以避免越界错误或其他逻辑错误。
实例化一个二维数组对象
传入2就是写死了2行,灵活运用,list.size 获取元素数量
要遍历用例,用for循环
list.get(i),当i=0时,获取list的集合中第1行
object[i]是当i=1=0时,代表二维数组第一行,Object[]是一维数组{传入caseinfo用例}
在这段代码中,我们创建了一个二维数组
objects
,其中外层数组的大小是2,内层数组则是动态分配的。接着,通过一个循环,我们遍历了列表list
中的元素,并将每个元素(假设是CaseInfo
类型)封装在一个新的Object
数组中,然后将这个新数组赋值给objects
的相应位置。下面是代码的逐步解释:
Object[][] objects = new Object[2][];
这里声明了一个二维数组objects
,并初始化外层数组的大小为2。内层数组(即objects[0]
和objects[1]
)初始时是null
,因为二维数组的内层数组可以单独分配大小。
for (int i = 0; i < 2; i++) {
开始一个循环,循环两次,从i = 0
到i = 1
。
CaseInfo caseInfo = list.get(i);
从列表list
中获取索引为i
的元素,并将其赋值给caseInfo
变量。
objects[i] = new Object[]{caseInfo};
创建一个新的Object
数组,其中包含刚刚从list
中获取的caseInfo
对象,然后将这个新数组赋值给objects
的第i
个位置。
优化,listsize在循环中会被算两遍,赋值即可
变量学习
取个数据驱动名字,test需指定数据驱动名字
已经建立测试类,可看结果
二维数组里有几条数据就会运行几次
总结:
如果传入的参数提供的是m列数据,test传入的是和它对应的数据类型
正常是参数对应,我们在之前建立了caseinfo对象,所以二维数据存放对象,入参就是1个,常规是有几个传几个