我很好奇Dataprovider
在测试套件中如何运行?
我的意思是事情按什么顺序运行?
例如:
@Dataprovider
Dataprovider
Dataprovider
Test04可以在Test2之前运行,因此可以使用空的Dataprovider
吗?
答案 0 :(得分:1)
您可以为每个测试设置优先级。根据仅针对每个测试用例提到的优先级,它将执行
@Test(priority=2)
public void Test1(){
//...
}
@Test(priority=1)
public void Test2(){
//...
}
答案 1 :(得分:1)
如@Mukesh所述,priority
可以在Test1之前运行(启动)您的Test2,但并不保证在Test1启动时立即完成Test2-因此,通过这种方法,您的测试数据可以为空。
为了您的目的和此类保证,您必须使用groups
和dependsOnGroups
参数:
@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。
希望这会有用。