测试后运行Dataprovider

时间:2018-10-02 13:03:40

标签: java testng

我很好奇Dataprovider在测试套件中如何运行? 我的意思是事情按什么顺序运行? 例如:

  • @Dataprovider
  • Test01
  • Test02->填充Dataprovider
  • Test03
  • Test04->使用Dataprovider

Test04可以在Test2之前运行,因此可以使用空的Dataprovider吗?

4 个答案:

答案 0 :(得分:1)

您可以为每个测试设置优先级。根据仅针对每个测试用例提到的优先级,它将执行

@Test(priority=2)
public void Test1(){
  //...
}


@Test(priority=1)
public void Test2(){
  //...
}

答案 1 :(得分:1)

如@Mukesh所述,priority可以在Test1之前运行(启动)您的Test2,但并不保证在Test1启动时立即完成Test2-因此,通过这种方法,您的测试数据可以为空。 为了您的目的和此类保证,您必须使用groupsdependsOnGroups参数:

@Test(groups = "groupA")
public void test2() {}

@Test(dependsOnGroups = "groupA")
public void test1() {}

另一个时刻是,根据其他测试,测试不是好习惯,我认为- 最好使用@Before注释。

希望这会有所帮助!

答案 2 :(得分:0)

您可以使用以上答案中提到的优先级。这是优先级的执行顺序,低优先级将首先被安排。

示例:@Test(priority = 1)将首先执行。          @Test(priority = 2)将执行第二个。

答案 3 :(得分:0)

@Daniel,如果我们需要在运行测试之前执行任何 prepare 操作(例如,打开与DB的连接并在其中准备测试数据,或者调用其他此处未测试的服务,或者放置测试数据,该数据将在所有测试中使用)-我们必须使用@Before批注之一。它们可能是非常有用且灵活的,有关它们的代码here的很好答案。 @Dataprovider呢-它直接提供数据给需要测试的人:

@Test(dataProvider = "Authentication")
public void errorMessageOnLoginWithBadCredentials(String email, String password, String errMsg) {
            User badUser = new User(email, password);

            at(LoginPage.class)
                    .loginAs(badUser)
                    .errorMessage
                    .shouldHave(exactText(errMsg));
}

@DataProvider(name = "Authentication")
public static Object[][] credentials() {
            return new Object[][]{
                    {" ", " ", "Username is required"},
                    {"user1@gmail.com", "UserTest@123", "Login and / or password do not match"},
                    {"user1@gmail.com", " ", "Password is required"},
                    {"ololo@ololo.com", "admin", "Login and / or password do not match"}
            };
}

为避免Object[][] (or Iterator<Object[]>)的语法丑陋,您还可以使用@DataSupplier(请参阅here),例如,该参数适用于Stream API。

希望这会有用。