#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