当前位置: 首页 > 知识库问答 >
问题:

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

时仰岳
2023-03-14

设置:

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

问题:

我需要用一行数据运行所有方法(测试),但到目前为止,它会在所有行上重复相同的测试,即如果有7行数据,那么测试1将运行7次,然后第二次测试将开始,第二次测试也会如此,以此类推。

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

我正在使用ApachePOIAPI从ms excel工作表中读取数据。Java、testng和Selenium在Windows上实现浏览器的自动化

我访问了以下链接,但没有得到实现:https://dzone.com/articles/testng-run-tests-sequentially

共有2个答案

梁丘霖
2023-03-14

编写数据提供程序时,可以向数据提供程序添加属性'index'。为了前任

//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行。

毕泽宇
2023-03-14

工厂允许动态创建测试。

假设这是当前设置...

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-为之前传递给测试方法的每个参数创建实例变量。使用实例变量创建构造函数。从测试注释中删除数据提供程序部分。从测试方法中删除参数。

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);
}

java—需要将dataprovider方法分离成一个单独的类(如果还没有),并向其中添加factory方法。数据提供者保持不变。

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

xml-删除现有部分。只需提及包含工厂方法的类的名称。最重要的是添加groupbyinstances=“true”参数,该参数将获得所需的行为。

  < test name="fact" group-by-instances="true">
      < classes>
          < class name="....Data"/>
      < classes/>
  < /test>
 类似资料:
  • 我目前正在使用testng selenium来自动化我的测试,我有以下场景: 我需要从excel文件中读取数据,转换对象中的每一行,并为每一行运行一个测试。我试图使用annotation@DataProvider返回一个对象数组,但是它只能返回迭代器和对象[]。是否有任何变通方法可用于从数据提供程序返回客户机对象数组?我尝试了以下代码,但它只打印来自Client2的数据: 编辑1:客户类别: 在控

  • 我使用testNg用于使用java的自动化,我使用从excel获取数据并作为参数传递给测试脚本。 假设我在中有10行数据,我的测试用例将按顺序执行10次,但现在我想并行运行这10个测试,同时使用线程。 这能做到吗?如果是的话,有人能给我一个同样的例子吗?

  • 我正在使用数据提供程序向每个测试方法传递数据。假设数据提供程序中有2行。 当前运行单个测试方法的所有迭代,然后运行第二个测试方法...例如: 但我想按以下顺序运行。 http://fruzenshtein.com/testng-dataprovider-run-tests-sequency/

  • 我使用selenium、TestNG和dataprovider创建了一些测试。每次运行测试时,都会执行两次测试,一次使用参数,第二次使用null参数,请在此处输入图像描述 请找到截图以供参考 请让我知道如何解决这个问题。 感谢您的帮助!! 代码:公共类AppTest\u BlankOrder扩展了ReplaceBaseclass{ //---- 数据提供者代码----

  • 我想用Jest做一个测试。 我使用

  • 例如: 数据提供程序1:dataA 数据提供程序2:dataB,dataC 数据提供程序3:dataD、dataE、dataG 所以我的测试需要一个数据提供者。但是我希望它根据测试组为不同的测试类型选择不同的数据提供者。例如,如果我正在运行“smoke”组,那么我希望使用数据提供者1;如果我正在运行“sanity”组,那么我希望运行数据提供者1和数据提供者2;如果我正在运行“regression”