2016-04-07 2 views
3

Я манипулирую ветвями кода, которые были частично выполнены несколько месяцев назад, с переплетенными зависимостями. Таким образом, самый простой способ, чтобы двигаться вперед, чтобы отметить провал попытки испытаний по конкретной отрасли в ожидании (в rspec пути) или быть пропущен, и иметь дело с ними после того, как все были объединены в.Как пропустить тест в режиме python BDD?

В своем заключительном докладе, behave отчетов количество пропущенных тестов, # failed, # skipped и # untested (которые не равны нулю, когда я нажимаю Ctrl-C, чтобы прервать выполнение). Итак, behave как концепция пропущенных тестов. Как мне добраться до ?

ответ

2

Behave не пропускает тесты, он пропускает шаги в сценарии, который уже провалился. Пропуск тестов не поддерживается напрямую, но если вам нужно выполнить только часть ваших тестов, вы можете control the execution with tags.

-1

Вы можете использовать предопределенный тег «@skip» для сценариев или функций, которые вы хотели бы пропустить и вести, автоматически пропустит тестирование сценария или всей функции.

+0

Неверно. Я просто попытался добавить @skip в один из моих сценариев, и он был проигнорирован Behave 1.2.5, как и ожидалось. '@ wip' предопределен, как указано [здесь] (https://pythonhosted.org/behave/tutorial.html#controlling-things-with-tags). Тем не менее, я не нахожу упоминания о '@ skip' в любом месте. – Louis

+0

Простите, что пропустить работает только для сценариев. Таким образом, вы можете поместить тег @skip, чтобы пропустить сценарий, но не всю функцию. Подробности режима: https://jenisys.github.io/behave.example/tutorials/tutorial11.html – shakyaabiral

+0

В учебнике написано «предопределенные или часто используемые теги». '@ skip' и' @ slow' не являются «предопределенными». Они «часто используются». Другими словами, вы можете использовать тег '@ skip', если хотите, который вы можете контролировать с помощью опции' --tags' *, как и любой другой тег *, что является [принятым ответом] (http://stackoverflow.com/a/36518200/1906307). Вы можете пропустить сценарии с тегом с именем '@ skip' или' @ potato' или '@ asdf'. '@ skip' более понятен, но не имеет особого статуса. – Louis

8

Если вы хотите управлять вещами в командной строке, то вы делаете то, что Tymoteusz Paul предлагает в другом ответе. Вкратце, вы можете использовать любой тег, который хотите пометить своими функциями и сценариями, а затем использовать --tags для выбора или отмены выбора функций и сценариев на основе тегов, которые вы использовали. В документации приведен пример заметок медленных сценариев с помощью @slow, а затем с использованием behave --tags=slow для запуска только медленных тестов или с использованием behave --tags=-slow, чтобы исключить медленные тесты. Чтение documentation рекомендуется для изучения того, что позволяет использовать синтаксис --tags.

По методу выше, вы можете использовать @skip и делать behave --tags=-skip. Это исключает все, что помечено @skip, но раздражает необходимость включать дополнительный аргумент при каждом вызове. Не удалось @skip только сам по себе сказать Пропустить, не требуя каких-либо аргументов в командной строке?

Если вы хотите @skip тега, который будет пропускать функции и сценарии, отмеченные с ней, не требуя дополнительный аргумент, то, как из BEHAVE 1.2.5, вы должны построить функциональность в файл environment.py. Отрицательно what this answer предлагает, это не встроенный. Добавим функциональность, как это:

def before_feature(context, feature): 
    if "skip" in feature.tags: 
     feature.skip("Marked with @skip") 
     return 

    # Whatever other things you might want to do in this hook go here. 

def before_scenario(context, scenario): 
    if "skip" in scenario.effective_tags: 
     scenario.skip("Marked with @skip") 
     return 

    # Whatever other things you might want to do in this hook go here. 

Аргумент к .skip методов является причиной пропуска.

Я использую .effective_tags для тестирования тегов в сценариях. Поле .effective_tags наследует теги, которые были установлены в этой функции. В данном случае это не имеет значения, потому что если функция имела @skip, то принудительно сценарии в ней будут пропущены уже. Тем не менее, я предпочитаю придерживаться общего принципа, согласно которому проверка тегов в сценариях должна использовать .effective_tags, так что наследование тегов работает.


Подождите! Разве tutorial не говорит, что встроен @skip?

Нет, учебное пособие немного искажает, потому что оно дает список, который показывает @skip рядом с @wip.@wip встроен, поэтому @skip встроен слишком правильно? Нет, они находятся в списке «Предопределенные или часто используемые теги». @skip просто «часто используется». Он часто используется, потому что с помощью слова «пропустить» информативный способ отметить что-то как пропущенное. Это не означает, что тег встроен в Behave.

+0

Небольшое уточнение здесь заключается в том, чтобы добавить ', а не context.config.tags.check ([" skip "])' в операторы if, так что явный '-tags = skip' все равно позволит вам запустить все в настоящее время пропущены тесты. – ncoghlan

+0

Корректировка к моему предыдущему выше: обязательное добавление 'и не (context.config.tags и context.config.tags.check ([" skip "]))', так как в выражении пустого тега в противном случае сообщается 'True' для каждого тега. – ncoghlan

Смежные вопросы