Можно пропустить / проигнорировать тестовый пример Cucumber без Assert.Предположим (..)

#java #junit #automation #cucumber

#java #junit #автоматизация #cucumber

Вопрос:

У меня есть файл Cucumber .feature с несколькими тестовыми примерами (используя «Examples»).
В какой-то ситуации я хочу пропустить несколько тестовых примеров и запустить только несколько из них.

Примечание: Пользователь должен иметь возможность выбирать, какой тестовый пример пропускать динамически
Например, он может решить при первом запуске пропустить тестовый пример номер 1, в следующий раз пропустить номер 2.

 Examples:
  | SERIAL_NO | ID                |
  | 1         | Create-Customer A |
  | 2         | Create-Customer B |
  | 3         | Create-Customer C |
  

Мне удалось сделать это с помощью

 Assume.assumeTrue(...)
  

Единственная проблема — код выдает исключение, и я хочу, чтобы журналы были чистыми.

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

Спасибо

Комментарии:

1. Вы можете использовать теги cucumber (например, @ignore) и передать это под тегами как «~@ignore» в классе test runner. Таким образом, будут выполнены все сценарии, за исключением использования тегов @ignore.

2. @DilipMeghwal, тег @Ignore поможет пропустить весь сценарий, нет? я говорю о пропуске конкретного тестового примера внутри сценария. файл функций (в примерах), также решение о том, пропускать или нет, находится во время выполнения (по выбору пользователя), я не могу просто постоянно пропускать тестовый пример.

3. То, что вы ищете, доступно с qaf

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

5. @Adir D, вы также можете указать фильтр тестовых данных во время выполнения, см. этот пост , и значение также может использовать выражение !

Ответ №1:

Я бы разделил ваши примеры для каждого сценария, в котором вы хотите пропустить тесты и пометить @todo , вот так:

    Scenario Outline: [test-scenario-001] Send a new form with request type  
   Given I preload the from using "request"
   And I select the 'Submit' button
   Then the response message "hello" is returned
   Examples:
    | request |
    | POST    |
   @todo
   Examples:
    | request | 
    | GET     |
    | PUT     |
    | DELETE  |
  

Затем, чтобы запустить сценарий только для 1-го Example , вызовите тег, который не должен запускаться как часть функции:

 -Dcucumber.options="--tags ~@todo"
  

Для запуска всех Example сценариев не используйте тег

Комментарии:

1. Я отредактировал свой вопрос, возможно, он был недостаточно ясен. Мне нужно иметь возможность динамически пропускать тестовые примеры, каждый раз разные, по вашему решению это хорошо, только если одни и те же тестовые примеры следует пропускать каждый раз (при необходимости).

2. Работает нормально. Странно прибегать к общему механизму группировки, такому как теги, для этой цели (в данном случае отрицаемый тег: ~), и что нет стандартного синтаксиса для пропуска вещей. Кстати, я назвал тег @skip, чтобы лучше объяснить, что он делает, и быть более общим.

Ответ №2:

Наконец, я нашел простое решение, используя тот же метод, который я упомянул Assert.assume (…), просто нужно очистить трассировку стека исключений и повторно запустить ее.

В приведенном ниже коде вы можете видеть фактическое изменение, просто я добавил блок catch:

 try
{
    Assume.assumeTrue("Some Condition...");
}
catch (AssumptionViolatedException e)
{
    // clearing stack trace, so it will keep logs clear, just print the name of exception
    e.setStackTrace(new StackTraceElement[] {});
    throw e;
}
  

Теперь трассировка стека исключений не печатается для регистрации, поэтому журналы хранятся в чистоте, и я просто вижу это вместо:

org.junit.Исключение AssumptionViolatedException: получено: <false>, ожидается: <true>

Для меня этого достаточно.

Комментарии:

1. То, что вы ищете, доступно с qaf