Запустите Dataprovider после теста - PullRequest
0 голосов
/ 02 октября 2018

Мне интересно, как Dataprovider работает в тестовом наборе?Я имею в виду, в каком порядке все работает?Например:

  • @Dataprovider
  • Test01
  • Test02 -> заполняет Dataprovider
  • Test03
  • Test04 -> использует Dataprovider

Может ли Test04 работать до Test2 и, таким образом, использовать пустой Dataprovider?

Ответы [ 4 ]

0 голосов
/ 05 октября 2018

@ Даниэль, если нам нужно выполнить какие-либо действия подготовить перед запуском тестов (например, открыть соединение с БД и подготовить в нем тестовые данные, или вызвать другие не-тестируемые здесь службы, или поставить тестовые данные, которые будут использоваться в большинстве тестов ) - мы должны использовать одну из @Before аннотаций.Они могут быть очень полезными и гибкими, хороший ответ с кодом о них здесь .Как насчет @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 (см. здесь ), адаптированный для использования, например, с Stream API.

Надеюсь, это будет полезно.

0 голосов
/ 02 октября 2018

Вы можете использовать приоритет, как указано в ответе выше.Вот порядок выполнения приоритетов. Сначала будут запланированы более низкие приоритеты.

Пример: @Test (priority = 1) будет выполняться первым.@Test (приоритет = 2) будет выполняться вторым.

0 голосов
/ 02 октября 2018

Как сказал @Mukesh, priority может запустить (запустить) ваш Test2 до Test1, но это не гарантирует, что Test2 будет завершен в тот момент, когда Test1 запускается - так что при таком подходе ваши тестовые данные могут бытьпустой.Для вашей цели и такой гарантии вы должны использовать параметры groups и dependsOnGroups:

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

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

Еще один момент заключается в том, что тесты, в зависимости от других тестов, не являются хорошей практикой, я думаю - лучше использовать @Before аннотаций.

Надеюсь, это поможет!

0 голосов
/ 02 октября 2018

Вы можете установить приоритет для каждого теста.На основании приоритета, упомянутого только для каждого теста, он выполнит

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


@Test(priority=1)
public void Test2(){
  //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...