因此,首先,我正在构建一个基于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
为了使事情更清晰,我建议使用单独的数据提供程序
。因此它很容易理解和维护。
如果要将数据提供程序
方法外部化到单独的文件中,则可以。这是可以实现的。
为此您需要做的是:
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方法应该动态读取值,而不是
问题内容: 我使用了。 是否可以将两个数据提供程序逐步赋予 相同的 测试功能? 我可以将两个提供程序合而为一,但这不是我想要的。 我需要(与本示例不同)独立生成数据。 我想让两个提供商都接受相同的测试。这可能吗? 问题答案: 否,但是没有什么可以阻止您将这两个数据提供程序合并为一个,并指定其中一个作为您的数据提供程序: