如何逐个读取csv数据并在多个testNG测试中通过它
我需要在web应用程序中多次插入数据。我将selenium与testNG以及数据驱动框架一起使用 我使用CSV文件读取输入值 请在下面找到示例代码如何逐个读取csv数据并在多个testNG测试中通过它,csv,selenium,selenium-webdriver,testng,Csv,Selenium,Selenium Webdriver,Testng,我需要在web应用程序中多次插入数据。我将selenium与testNG以及数据驱动框架一起使用 我使用CSV文件读取输入值 请在下面找到示例代码 public class TestData { private static String firstName; public static String lastName; @BeforeClass public void beforeClass() throws IOException { reader =
public class TestData
{
private static String firstName;
public static String lastName;
@BeforeClass
public void beforeClass() throws IOException
{
reader = new CSVReader(new FileReader(fileName));
while((record = reader.readNext()) != null)
{
firstName = record[0];
lastName = record[1];
}
}
@Test
public void test1()
{
driver.findElement(By.id(id)).sendKeys(firstName);
driver.findElement(By.id(id)).click();
and so on....
}
@Test
public void test2()
{
driver.findElement(By.id(id)).sendKeys(lastName);
driver.findElement(By.id(id)).click();
and so on....
}
}
在这里,我需要插入3条记录,但当我使用上述代码时,只插入第3条记录
请帮我解决这个问题
样本输入文件
这里您需要的是一个由
数据提供者提供动力的工厂。工厂将生成测试类实例(这里的测试类基本上是一个常规类,其中包含一个或多个@test
方法)。数据提供者基本上会向工厂方法提供实例化测试类所需的数据
现在,您的@Test
方法基本上可以与实例中的数据成员一起运行其逻辑
下面是一个简单的示例,说明了这一点
import org.assertj.core.api.Assertions;
导入org.testng.annotations.DataProvider;
导入org.testng.annotations.Factory;
导入org.testng.annotations.Test;
公共类TestClassSample{
私有字符串名;
私有字符串lastName;
@工厂(dataProvider=“dp”)
公共TestClassSample(字符串名、字符串名){
this.firstName=firstName;
this.lastName=lastName;
}
@数据提供者(name=“dp”)
公共静态对象[][]getData(){
//可以用读取csv文件的逻辑(使用CSVReader)来替换此选项
//然后将其转换为二维数组。
返回新对象[][]{
{“Mohan”,“Kumar”},
{“凯恩”,“威廉姆斯”},
{“马克”,“亨利”}
};
}
@试验
公共void test1(){
Assertions.assertThat(this.firstName).isNotEmpty();
}
@试验
公共无效测试2(){
Assertions.assertThat(this.lastName).isNotEmpty();
}
}
这里您需要的是一个工厂
,由数据提供者
供电。工厂将生成测试类实例(这里的测试类基本上是一个常规类,其中包含一个或多个@test
方法)。数据提供者基本上会向工厂方法提供实例化测试类所需的数据
现在,您的@Test
方法基本上可以与实例中的数据成员一起运行其逻辑
下面是一个简单的示例,说明了这一点
import org.assertj.core.api.Assertions;
导入org.testng.annotations.DataProvider;
导入org.testng.annotations.Factory;
导入org.testng.annotations.Test;
公共类TestClassSample{
私有字符串名;
私有字符串lastName;
@工厂(dataProvider=“dp”)
公共TestClassSample(字符串名、字符串名){
this.firstName=firstName;
this.lastName=lastName;
}
@数据提供者(name=“dp”)
公共静态对象[][]getData(){
//可以用读取csv文件的逻辑(使用CSVReader)来替换此选项
//然后将其转换为二维数组。
返回新对象[][]{
{“Mohan”,“Kumar”},
{“凯恩”,“威廉姆斯”},
{“马克”,“亨利”}
};
}
@试验
公共void test1(){
Assertions.assertThat(this.firstName).isNotEmpty();
}
@试验
公共无效测试2(){
Assertions.assertThat(this.lastName).isNotEmpty();
}
}
根据您提供的数据,while循环在CSV文件的第三条记录处结束。在每次迭代中,变量“firstName”和“lastName”都会被覆盖
循环中断时,变量存储最后写入的值。因此,使用更好的数据结构来存储所有值。我推荐地图
您可以在一个方法中进一步合并所有测试用例,使用@test注释中的invocationcount属性对map中的每个条目重复执行。使用@BeforeTest再添加一个方法,以增加映射中的下一个键集 根据您提供的数据,while循环在CSV文件的第三条记录处结束。在每次迭代中,变量“firstName”和“lastName”都会被覆盖
循环中断时,变量存储最后写入的值。因此,使用更好的数据结构来存储所有值。我推荐地图
您可以在一个方法中进一步合并所有测试用例,使用@test注释中的invocationcount属性对map中的每个条目重复执行。使用@BeforeTest再添加一个方法,以增加映射中的下一个键集 beforeClass
在返回之前读取文件中的所有行(而循环执行此操作)。因此,始终只有最后一行数据。您可以将CSV数据保存在一个数组中,并在每个测试中通过索引访问它。beforeClass
在返回之前读取文件中的所有行(而loop则执行此操作)。因此,始终只有最后一行数据。您可以将CSV数据保存在一个数组中,并在每个测试中通过索引访问它。