Как получить данные покрытия кода из функциональных тестов Python BDD с помощью Behave?

Я не видел ответа на этот конкретный вопрос (инструмент тестового покрытия для Behave test framework), и я не видел, чтобы результаты поиска Google давали достаточный ответ. Следовательно...

Как я могу получить отчет о покрытии кода из себя? Мне трудно поверить, что нет разработчиков Python, использующих методологию BDD, и мне еще труднее поверить, что те разработчики Python, которые используют BDD, делают это без статистики покрытия кода из их функциональных тестов. Может Coverage.py использоваться для управления поведением для создания покрытия кода? Как?

4 ответов


Я не знаю, как использовать behave, но я использовал огурец для BDD, который я думаю, вероятно, почти похож. И поэтому я думаю, что вы должны иметь возможность использовать behave с покрытием. вы должны указать, какой файл включить в файл.. (Я использовал его с огурцом). Смотрите, если этой может помочь.

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

# .coveragerc to control coverage.py
[run]
parallel = True

# if you want to include tests append tests/*
include =
    src/*
    *src*

[paths]
source =
    src/
    */src

tests =
    tests/
    */tests

следуя предложению Дэвида выше.

предполагая, что тестируемый код находится в каталоге приложения, добавьте в свой .coveragerc:

[run]
source=app/

из терминала:

coverage run $(which behave);

затем вы можете использовать отчет о покрытии или покрытии html как обычный. Если вы не укажете dir приложения в своем .coveragerc file, coverage проверит все библиотеки Python, локальные для вашей установки behave.


Behave может генерировать данные покрытия junit и пакет освещения можно объединить эти данные из нескольких тестовых запусков, а также создать отчет HTML, который можно просмотреть или автоматически опубликовать в среде CI.

вот заявления, которые я в настоящее время использую для производства, объединения и отчета о покрытии с behave:

cd your/repo/tests  # <-- Make sure you're inside your tests dir!
rm -rf behave-reports/*
behave --junit --junit-directory behave-reports
coverage combine
coverage html

на rm -rf behave-reports/* принудительно удаляет все внутри каталога behave-reports/, так что мне гарантируется либо свежий отчет о покрытии или вообще ничего (в моем случае это приводит к сбою в CI). Обратите внимание, что если вы запускаете тесты локально, вы хотите добавить запись в свой .gitignore файл (или эквивалент), чтобы вы не добавляли и не фиксировали результаты теста.

Running вести себя с --junit произведет выход junit, пока --junit-directory флаг говорит вести себя, где писать данные junit на диске.

под управлением coverage combine ест весь охват кода и объединяет его в один файл покрытия.

наконец, coverage html создает довольно html-отчет, который включает в себя все объединенные данные покрытия.


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

coverage run /path/to/lib/python2.7/site-packages/behave/__main__.py

конечно, вы захотите указать в своем .coveragerc исходные файлы, которые вы хотите включить.