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

TestNG@DataProvider返回动态类

农存
2023-03-14

因此,首先,我正在构建一个基于Selenium和Java的自动化库。我正在构建一种参数化传递到测试方法中的数据的方法。我正在使用TestNG。

@Test(dataProvider = "JsonDataProvider")
public void testDataProviderOne(TestModelA testData) {
    System.out.println(testData.getTestDataAA());
    System.out.println(testData.getTestDataAB());
}

@Test(dataProvider = "JsonDataProvider")
public void testDataProviderTwo(TestModelB testData) {
    System.out.println(testData.getTestDataBA());
    System.out.println(testData.getTestDataBB());
}

我需要帮助的是构建这个数据提供程序方法...

现在,如果我返回指定的类,它将与其中的一个一起工作。

示例:

@DataProvider(name = "JsonDataProvider")
protected static Object[][] getJsonDataModel() {

    return new Object[][]{ { new TestModelA() } };
}

如果您想查看我在GitHub上的项目,可以访问:https://GitHub.com/dominic-pace/autocorecomons

共有1个答案

艾浩广
2023-03-14

为了使事情更清晰,我建议使用单独的数据提供程序。因此它很容易理解和维护。

如果要将数据提供程序方法外部化到单独的文件中,则可以。这是可以实现的。

为此您需要做的是:

    null

MyDataProvider.java

package example.dataprovider;

import org.testng.annotations.DataProvider;

public class MyDataProvider {
    @DataProvider(name = "JsonDataProviderForTestModelA")
    public static Object[][] getJsonDataProviderForTestModelA() {

        return new Object[][]{ { new TestModelA() } };
    }

    @DataProvider(name = "JsonDataProviderForTestModelB")
    public static Object[][] getJsonDataProviderForTestModelB() {

        return new Object[][]{ { new TestModelB() } };
    }
}

您的@test方法可以使用特定于其需求的数据提供程序。就像

@Test(dataProvider = "JsonDataProviderForTestModelA")
public void testDataProviderOne(TestModelA testData) {
    System.out.println(testData.getTestDataAA());
    System.out.println(testData.getTestDataAB());
}

@Test(dataProvider = "JsonDataProviderForTestModelB")
public void testDataProviderTwo(TestModelB testData) {
    System.out.println(testData.getTestDataBA());
    System.out.println(testData.getTestDataBB());
}
 类似资料:
  • 我找遍了所有我知道的地方,但我似乎找不到答案。 如果我将一个“复杂”对象从Data提供者传递给测试方法,Invoker似乎会在每次迭代中获得一个新的RetryAnalyzer实例。 IRL,我的数据提供程序进行DB查询并将对象传递给测试方法。我最初假设DB访问会导致问题,但后来将其缩小到我认为最简单的示例。 请看下文。如果我在 RetryAnalyzer 中设置断点,我可以看到 retryCoun

  • 我们的dataprovider旨在根据传入的某个键值从Excel文件中检索一行数据。这对于我们的测试套件来说效果很好,其中有大约15个测试,但在接下来的几个月里,测试将增加到几百个,因此我担心每次测试访问一次excel文件的影响(是的,excel文件将为每个测试访问一行)。 从性能/资源的角度来看,这是一个合理的担忧吗?如果是,如何衡量?(我在mac电脑上)。 使用@BeforeClass方法,我

  • 我试图通过动态输入要从中提取数据的工作表的名称,以这种方式重用现有的数据提供程序,将Excel文件中的数据加载到我的测试框架中。 示例:我正在从Login凭据表加载数据,该表代表成功登录测试的数据。第二个测试是失败的登录测试,它从InvalidLogin凭据表加载数据。第三个测试从第三个表UserInformation等中提取数据。我所遵循的udemy课程并没有真正涵盖这个主题,我觉得整个事情的实

  • 问题内容: 我有一个模块分开的应用程序。有几个实体和CSV模块。CSV模块仅支持struct(Entity),但我想使CSV模块可与任何类型的实体一起使用。现在,它的工作方式如下:Csv模块从通道接收数据并将其严格转换为struct。我如何实现动态返回类型,因此它可以与任何类型的Entity一起使用,而不仅限于 问题答案: 快速/肮脏的解决方案: 返回接口{},但是您最终欺骗了编译器,而类型检查的

  • 我用TestNG创建了一个Selenium框架。在这个@Data提供者中包含一组代码,这些代码从excel中读取数据,并以数组形式将此值返回给@test。 因为登录测试用例有两个输入,所以方法login有两个属性。同样,若寄存器测试用例有5个输入,那个么寄存器方法将有5个属性。但我想以某种方式创建一个标准方法,这样当我从@dataprovider返回数组时。然后@test方法应该动态读取值,而不是

  • 问题内容: 我使用了。 是否可以将两个数据提供程序逐步赋予 相同的 测试功能? 我可以将两个提供程序合而为一,但这不是我想要的。 我需要(与本示例不同)独立生成数据。 我想让两个提供商都接受相同的测试。这可能吗? 问题答案: 否,但是没有什么可以阻止您将这两个数据提供程序合并为一个,并指定其中一个作为您的数据提供程序: