Предположим, что в тестовом классе есть 10 тестов. Я хочу запускать их в определенном порядке. Я могу использовать атрибут приоритета, чтобы установить приоритет тестовых случаев. Есть ли другой способ установить приоритет тестовых случаев.

0
Aruna14 29 Окт 2019 в 21:06
Возможно дублирование stackoverflow. ru / questions / 40105037 /…
 – 
Dipak Bachhav
29 Окт 2019 в 21:13
1
Вам нужно долго и хорошо подумать, зачем вам это нужно. Лучше всего не запускать автоматизацию в определенном порядке, потому что это может скрыть проблемы. Тесты не должны зависеть друг от друга, каждый должен быть изолирован.
 – 
JeffC
29 Окт 2019 в 22:49

2 ответа

Сценарий: в тестовых классах есть один или несколько методов @Test, определенных с приоритетами import org.testng.annotations.Test;

Public class MyTests1 {

@Test(priority = 1)
public void test1() {
    System.out.println("test1 from " + getClass().getSimpleName() + " class");
}

@Test(priority = 2)
public void test2() {
    System.out.println("test2 from " + getClass().getSimpleName() + " class");
}

}

Также работайте так же .... @Test public void Test1 () {

}

@Test (dependsOnMethods = {"Test1"}) public void Test2 () {

}

@Test (dependsOnMethods = {"Test2"}) public void Test3 () {

}

0
Vijay Pansheriya 29 Окт 2019 в 22:26

TestNG использует Priority, чтобы «предлагать» порядок выполнения в зависимости от приоритета, который вы даете тесту. Это не то же самое, что установка заказа.

Строгий способ установить порядок определенных тестов - использовать зависимости тестов . Если TestA имеет приоритет = 1, а TestB имеет приоритет = 2, но A зависит от B, тогда TestNG сначала запустит B, игнорируя приоритет, в противном случае A завершится ошибкой.

Комбинация этих двух практик даст вам нечто похожее на «порядок выполнения».

Я бы поправил то, что говорит ДжеффК: он прав, говоря, что это хорошая практика, чтобы ваши тесты были как можно более независимыми друг от друга. Но это всегда верно ТОЛЬКО при модульном тестировании.

Например: у вас может быть набор регрессии, например:

@Test (priority=2)
public void validateAddingMilkToShoppingCart(){
  putMilkInCart();
  validateMilkIsInCart();
}

@Test (priority=1, dependsOnMethods = {"validateAddingMilkToShoppingCart"})
public void validateRemovingMilkToShoppingCart(){
  verifyMilkIsInCart();
  removeMilkFromCart();
  validateCartIsEmpty();
}

В этом сценарии «validateRemovingMilkToShoppingCart» может иметь более высокий приоритет, потому что Sprint работает над опорожнением корзины покупок или из-за недавно связанной ошибки. Но вы должны запускать этот тест только в том случае, если вы можете положить молоко в тележку, в противном случае вы потратите время и ресурсы на выполнение теста, который, как вы уже знаете, не удастся, на основе предыдущего теста. К тому же, сделав это, вы сообщите, что будет выглядеть чище, показывая Пропустить, если функция не может быть протестирована из-за ошибки в предыдущем тесте.

Надеюсь, что это ответ на ваш вопрос.

0
Rodrigo Vaamonde 14 Ноя 2019 в 19:08