Как обеспечить, чтобы метод @Test всегда выполнялся раньше других, независимо от класса, набора или группы? - PullRequest
3 голосов
/ 15 марта 2012

Мое чтение документов TestNG предполагает, что если у меня есть метод теста, помеченный так:

  @BeforeSuite(alwaysRun = true)
  @Test
  public void MyTestMethod { ... }

затем MyTestMethod будет запущен перед любым другим определенным где-либо тестом, независимо от класса, набора или группы. Но, похоже, это не так.

Есть ли способ заставить тестовый метод безоговорочно запускаться раньше всего? (И что в случае неудачи другие тесты не будут запущены.)

Edit:

Тестовый класс:

class Suite_Setup
extends BaseTestSuite
{
  @BeforeSuite(alwaysRun = true)
  def setup() {
    System.out.println("Conducting test suite setup...")

    // Verify that the internal API is configured properly and that the API host is available...
    new Action(ApiHostname, new BasicCookieStore)
  }
}

Edit:

Ответ:

Мы генерируем наши собственные файлы TestNG.xml (автоматически), и метод @BeforeSuite в него не включается. После включения @BeforeSuite имел ожидаемый эффект.

Однако, похоже, что и @BeforeSuite (и предположительно другие @Before... и @After... аннотации) можно можно смешивать с @Test и вместо того, чтобы препятствовать выполнению аннотированного метода, они заставляют его запускать более одного раза!

Кроме того, я упускаю возможность не указывать, какую версию TestNG я использую. Сейчас 6,2.

Ответы [ 5 ]

4 голосов
/ 31 октября 2013

Попробуйте использовать группы либо на уровне класса, либо на уровне метода.

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

@Test(groups="smoke")
public class SmokeTests {
    public void test1 {
        //
    }
    ...
}

И все остальные классы с тестами:

@Test(dependsOnGroups = "smoke")
public class OtherTests {
    public void test1 {
        //
    }
    ...
}
2 голосов
/ 06 мая 2012

Я думаю, что ответом будет

  1. , чтобы отделить методы конфигурации от методов тестирования,
  2. , чтобы использовать @BeforeSuite для метода, который будет выполнен перед всеми тестами внабор (например, для получения EntityManager)
  3. для использования depenOnMethods для определения порядка запуска тестов

В следующем примере testRemove будет выполняться после testInsert, testReadAllи testUpdate запустились.testReadAll будет запущен после запуска testInsert.testUpdate будет запущен после запуска testInsert.Обратите внимание, что между testReadAll и testUpdate нет зависимости.

@Test
public void testInsert() 
{..}

@Test(dependsOnMethods={"testInsert"})
public void testUpdate() 
{..}

@Test(dependsOnMethods={"testInsert"})`
public void testReadAll()`
{..}

@Test(dependsOnMethods={"testInsert", "testUpdate", "testReadAll"})`
public void testRemove()`
{..}
0 голосов
/ 25 ноября 2015

Есть ли способ пометить метод теста, чтобы он безоговорочно запускался раньше всего?

Просто попробуйте назначить целевому тесту самое низкое значение приоритета.

@Test(priority = -2147483648)
public void myTest() {
    ...
}

Вы можете узнать больше о приоритете теста TestNG над там .

А если он не пройдёт, другие тесты не будут запущены.

Вам необходимо выполнить другие тесты в зависимости от этого метода, используя один из следующих параметров:

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

0 голосов
/ 16 сентября 2014

@ Test (alwaysRun = True)

позволяет выполнять тест всегда независимо от методов или групп, от которых он зависит, и даже если он не пройден

0 голосов
/ 16 марта 2012

Удалить @Test, метод не может быть как конфигурацией, так и методом тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...