使用第一行dataprovider运行整个测试类

问题描述 投票:0回答:2

建立:

  1. 我有一个测试课。
  2. 这个测试类有几个使用@Test(dataProvider = "getData")注释的方法。
  3. 数据中有7条记录(行)。
  4. 所有测试都是顺序的。

问题:

我需要用一行数据运行所有方法(测试),但是现在它继续在所有行上重复相同的测试,即如果有7行数据,则测试1将运行7次,然后第二次测试将开始,第二次测试也是如此,依此类推。

我希望所有测试都在第1行运行,然后所有测试再次为第2行运行。

我正在使用Apache poi API从ms-excel表中读取数据。 Java,testng和Selenium在Windows上自动化浏览器。

我访问过以下链接但未获得实施:https://dzone.com/articles/testng-run-tests-sequentially

java selenium selenium-webdriver testng dataprovider
2个回答
2
投票

Factory允许动态创建测试。

假设这是当前的设置......

SequentialTest.java - 示例部分

@Test(dataProvider="dp")
public void firstTest(int id, String account) {
    System.out.println("Test #1 with data: "+id+". "+account);
}

Data.java - 示例部分

@DataProvider(name="dp")
public static Object[][] dataProvider() {
    Object[][] dataArray = { {1, "user1"}, {2, "user2"} };
    return dataArray;
}

也许你有同一类的数据提供者。

testng.xml - 相关部分

< test name = "checks">
   < classes >
      < class name="....Sequential" />
   < /classes >
< /test>

根据文章,类和xml中所需的更改。

SequentialTest.java - 为先前传递给测试方法的每个参数创建实例变量。使用实例变量创建构造函数。从Test annotation中删除dataprovider部件。从测试方法中删除参数。

private int id;
private String account;

public SequentialTest(int id, String account) {
    this.id = id;
    this.account = account;
}

@Test
public void firstTest() {
    System.out.println("Test #1 with data: "+id+". "+account);
    assertTrue(true);
}

Data.java - 需要将dataprovider方法分离到一个单独的类(如果还没有)并将工厂方法添加到它。 Dataprovider保持不变。

@Factory(dataProvider="dp")
    public Object[] createInstances(int id, String account) {
        return new Object[] {new SequentialTest(id, account)};
}

testng.xml - 删除现有部分。只需要提及包含Factory方法的类的名称。最重要的是添加group-by-instances="true"参数,它将为您提供所需的行为。

  < test name="fact" group-by-instances="true">
      < classes>
          < class name="....Data"/>
      < classes/>
  < /test>

0
投票

在编写数据提供者时,可以向数据提供者添加属性“索引”。对于前者

//Define the index you want to return it to. Here it will return first row
@DataProvider(name = "dataProviderSample", indices = {0})
public Object[][] getSelectedData() {
    return getInputData();
}

// Write your logic to generate data form excel/csv/json/xml inside the below method
private static Object[][] getInputData() {
    return new Object[][]{{"Sample1", "Sample1", "Sample1"},
            {"Sample2", "Sample2", "Sample2"},
            {"Sample3", "Sample3", "Sample3"},
            {"Sample4", "Sample5", "Sample5"}
    };
}

通过上述方法,您可以在测试方法中传递预期的索引。

@Test(dataProvider = "dataProviderSample")
void testDataProvider(String fname, String lName, String num) {
    System.out.println(fname);
    System.out.println(lName);
    System.out.println(num);
}

因此,通过使用此方法,您可以在所有测试方法中一次传递一行。但是如果要在测试方法中传递所有的dataprovider行。

© www.soinside.com 2019 - 2024. All rights reserved.