【问题标题】:TestNG: How to execute several test methods in order with data supplied from DataProviderTestNG:如何使用 DataProvider 提供的数据按顺序执行多个测试方法
【发布时间】:2013-07-16 17:46:25
【问题描述】:

有没有办法使用来自数据提供者的不同数据按顺序执行多个测试方法?

例如

@DataProvider(name = "test1")
public Object[][] createData1() {
    return new Object[][] {
        { "Cedric", new Integer(36) },
        { "Anne", new Integer(37)}, 
    };
}


@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
    System.out.println(n1 + " " + n2);
}

@Test
public void verifyData2() {
    System.out.println("Verify2");
}

运行它的输出将是
塞德里克 36
验证2
安妮 37
验证2

【问题讨论】:

    标签: testng dataprovider


    【解决方案1】:

    为什么不在该类中使用多个数据提供者?

    @DataProvider(name = "test1")
    public Object[][] createData1() {
        return new Object[][] {
            { "Cedric", new Integer(36) },
            { "Anne", new Integer(37)}, 
        };
    }
    
    @DataProvider(name = "test2")
    public Object[][] createData2() {
        return new Object[][] {
            { "Amir", new Integer(42) },
            { "Alice", new Integer(39)}, 
        };
    }
    
    
    @Test(dataProvider = "test1")
    public void verifyData1(String n1, Integer n2) {
        System.out.println(n1 + " " + n2);
    }
    
    @Test(dataProvider = "test2")
    public void verifyData2(String n1, Integer n2) {
        System.out.println(n1 + " " + n2);
    }
    

    【讨论】:

      【解决方案2】:

      这里有一种方法:使用注解来指定哪个方法应该接收哪些数据:

      public class A {
      
        @DataProvider
        public Object[][] dp(Method m) {
          if (m.getAnnotation(Different.class) != null) {
            return new Object[][] {
                new Object[] { "different-a", "different-b" },
                new Object[] { "different-c", "different-d" },
              };
            } else {
              return new Object[][] {
                  new Object[] { "c", "d" },
                  new Object[] { "a", "b" },
              };
            }
          }
      
        @Test(dataProvider = "dp")
        public void test1(String a, String b) {
          System.out.println("test1: " + a + " " + b);
        }
      
        @Different
        @Test(dataProvider = "dp")
        public void test2(String a, String b) {
          System.out.println("test2: " + a + " " + b);
        }
      }
      

      注释:

      @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
      @Target({METHOD})
      public @interface Different {}
      

      输出:

      test1: c d
      test1: a b
      test2: different-a different-b
      test2: different-c different-d
      

      【讨论】:

      • 谢谢塞德里克。当我仔细检查 TestNG 文档时,我实际上找到了一种方法,然后注意到我可以指定 group-by-instances="true" 来按顺序运行我的测试。因为我正在关注一个包含许多测试断言和许多不同数据的场景,所以我使用 @Factory 创建 testclass 实例,为其提供不同的数据,然后按顺序运行它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多