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

TestNG:来自DataProvider的特定数据,用于特定测试方法

欧阳声
2023-03-14

是否可以为每个测试方法指定来自DataProvider的数据。我做过这样的东西。

@DataProvider(name = "loginData")
public Object[][] getData(Method m) {
    if (m.getName().equalsIgnoreCase("testValidLogin")) {
        return new Object[][]{
                {"aaa", "qwe123!"}
        };
    }
    if (m.getName().equalsIgnoreCase("testSendMail")){
            return new Object[][]{
                    {"Test@test", "Test", "Hi there!"}
            };
    } else {
        return new Object[][]{
                {"12312312","123qwe"},
        };
   }
}`

有没有更好的方法?我可以为两种测试方法指定一个数据集吗?谢谢

共有1个答案

暴乐邦
2023-03-14

如果测试数据与测试方法相关,最好将其保留在测试方法中,或创建单独的数据提供程序。

另外一个选项是使用测试上下文,并将所需参数从before方法传递给测试方法。

或者你可以构建这样的东西:

public class DataProviderPerMethod {

    @DataProvider(name = "provider")
    public Object[][] provider(Method method) {
        List<TestData> options = Arrays.asList(method.getAnnotation(TestDataOptions.class).value());
        int optionsSize = options.size();
        int optionLength = Objects.requireNonNull(options.get(0)).value().length;
        Object[][] result = new Object[optionsSize][optionLength];
        IntStream.range(0, optionsSize).forEach(i -> result[i] = options.get(i).value());
        return result;
    }

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @Repeatable(TestDataOptions.class)
    public @interface TestData {
        String[] value();
    }

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface TestDataOptions {
        TestData[] value();
    }


    @TestDataOptions({
            @TestData({"1", "string"}),
            @TestData({"2", "else one string"})
    })
    @Test(dataProvider = "provider")
    public void verifyTestData(String first, String second) {
        System.out.println(first);
        System.out.println(second);
    }

}
 类似资料:
  • 我在java testng测试中使用allure testng(2.12.1)适配器。我有使用@DataProvider的测试。我的测试实现了ITest,以在运行时更改测试方法实例名称。当我运行测试时,我看到了不同的测试方法名称,但在allure报告中,它为每个测试运行显示了相同的测试方法。如何配置诱惑报告以显示类似IDE的内容? 预期:测试一测试二测试三 实际:myTest myTest myT

  • 我有maven测试项目如下: pom.xml testng.xml 跟踪测试。JAVA 当我尝试运行“mvn test”命令时,它运行得很好,但当我尝试使用maven命令运行特定的测试类(如“mvn test-Dtest=TrackerTest”)时,它会引发如下异常: 看起来使用maven命令运行特定的测试类并没有尝试从testng获取参数。xml,我也尝试过类似“mvn test-Dtest=

  • 本文向大家介绍特定测试方法的执行如何依赖于TestNG中的其他测试方法?,包括了特定测试方法的执行如何依赖于TestNG中的其他测试方法?的使用技巧和注意事项,需要的朋友参考一下 可以在dependsOnMethods helper属性的帮助下,使特定测试方法的执行依赖于另一个测试方法。 示例 在Java类文件中,只有在该方法成功运行后,才会执行verifyLoan()方法。但是方法独立运行,而无

  • 我正在尝试使用TestNG构建一个Selenium混合框架,从excel数据表中获取数据。我试图使用testNG的DataProvider,但问题是因为我的数据表包含属于不同测试用例的数据(例如,2行用于添加用户,1行用于修改用户,一些行用于搜索用户等) 因为我的数据提供商将返回数据表中的所有数据,并将其传递给任何特定的测试案例,这将为所有行的数据提供商运行将导致问题(例如,创建用户将需要5个参数

  • 我有一个testng xml文件,它被设置为运行一个特定的类,该类的方法包含以下组标记或被分组为以下类型之一: 并行测试 顺序测试 烟雾测试 虽然我的一些测试被指定为并行或顺序测试,但一些测试可能包含一个额外的标签“冒烟测试”。在这个场景中,我希望能够只运行那些被归类为“烟雾测试”的组件。当我运行测试时,它要么找不到任何测试,要么只是运行所有分组为“sequential-test”的测试。我似乎不

  • 定义一个普通的设置方法,并在每个方法的开头调用; 将方法与依赖于它的所有方法一起移动到一个新类(顶级类或内部类)。 两者都不理想,我希望保持测试的自然分组和清洁,而不是由于缺乏替代方案而分裂。