Какие самые продвинутые фреймворки и инструменты доступны для python для практики Behavior Driven Development? Было бы здорово найти такие инструменты, как rspec и mocha для ruby.
Лично я предпочитаю использовать нос и пустое пространство в стиле дизайна, ориентированного на поведение. В частности, специальный плагин для носа отлично подходит для BDD.
Я думаю, что на самом деле doctest больше соответствует философии BDD, когда вы относитесь к нему так, как задумано: вы начинаете писать о программном обеспечении, а затем перемежаете это примерами, которые также образуют тесты. Он также описывается как «разработка на основе документов» - главное - сосредоточиться на внешне описываемой функциональности, а не на внутренних единицах работы. Я думаю , что традиция XUnit это ужасно на это делать.
Янв
48
Салат означает быть похожим на огурец инструментом для python: http://lettuce.it/
Вы можете получить источник на github.com/gabrielfalcao/lettuce
Пользователи Windows, рассматривающие салат, должны знать, что на момент написания статьи поддержка этой ОС не была простой.
leonigmig
7
Любые пользователи, намеревающиеся использовать салат с django, должны знать, что по умолчанию он использует ваш базу данных по умолчанию для тестирования. Этот интересный выбор дизайна стоил мне одной производственной базы данных :(
Я переключился на поведение с салата, когда его поведение по умолчанию, заключающееся в использовании базы данных по умолчанию для тестирования в проекте django, стоило мне производственной базы данных на живом сервере :( Мне очень нравится поведение; я запустил проект django-behavior, чтобы подключить его к Тестовый фреймворк Джанго github.com/rwillmer/django-behave
Рэйчел
1
Я чувствую вашу боль, а также рад видеть, что ваши страдания способствовали процветанию экосистемы django. ;-)
Джон Ван
1
Могу ли я использовать поведение без файлов функций? У меня нет нетехнических пользователей, поэтому написание их для меня просто шум. Если кто-то не может прочитать мои / когда / то тесты, они не имеют никакого отношения там.
jeremyjjbrown
29
Я рекомендую вам использовать набор инструментов, разработанный для помощи программистам в практике BDD и TDD. Этот набор инструментов состоит из: pycukes , specloud , ludibrio и should-dsl .
Нашел этот полезный документ, когда искал подробности вашего ответа: arxiv.org/pdf/1007.1722
amit
Мне нравится should-dsl. Я рассматривал DSL для python BDD - их несколько, но этот кажется довольно выразительным.
Дэнни Стейпл
Я не могу найти никакой информации о фреймворке BDD под названием Pyramid. Ссылка, указанная в документе, связанном с @phaedrus, ведет на сомнительно выглядящий сайт, который не имеет ничего общего с тестированием, а поиск в Google указывает на Pyramid , веб-фреймворк. Кто-нибудь может предоставить актуальную ссылку?
@ BjörnPollex, имя Pyramid не может использоваться создателями этих инструментов из-за Pyramid Web Framework. Теперь они только отдельные инструменты.
Дуглас Камата
11
Отличный пост и ответы. Просто хотел обновить, чтобы включить Freshen в этот список, так как я читаю pycukes больше не выпускается. Хороший пост об использовании BDD и Django с Freshen находится здесь .
Парабены! Вы совершенно поразили меня кодом в magic.py. Я понятия не имел, что «методы расширения» (открытые классы) возможны в Python.
mdwhatcott
8
Проект Pyccuracy - это попытка предоставить язык BDD, специфичный для предметной области, в Python.
В отличие от doctest, который работает на уровне API, он кодирует операции более высокого уровня, такие как загрузка веб-страницы и отправка формы. Я не использовал это, но это выглядит несколько многообещающе, если это то, что вы ищете.
Попробуйте pyspecs . Создание тестов, легко читаемых и постоянно выполняемых в процессе разработки, было двумя из моих главных целей при создании этого проекта.
Тестовый код:
from pyspecs import given, when, then, and_, the, this
with given.two_operands:
a =2
b =3with when.supplied_to_the_add_function:
total = a + b
with then.the_total_should_be_mathmatically_correct:
the(total).should.equal(5)with and_.the_total_should_be_greater_than_either_operand:
the(total).should.be_greater_than(a)
the(total).should.be_greater_than(b)with when.supplied_to_the_subtract_function:
difference = b - a
with then.the_difference_should_be_mathmatically_correct:
the(difference).should.equal(1)
Консольный вывод:
# run_pyspecs.py|• given two operands
|• when supplied to the add function
|• then the total should be mathmatically correct
|•and the total should be greater than either operand
|• when supplied to the subtract function
|• then the difference should be mathmatically correct
(ok)6 passed (6 steps,1 scenarios in0.0002 seconds)
Я, вероятно, полностью упускаю суть, но то, что я сохранил из оригинального документа BDD, заключалось в том, что BDD был просто переупакован TDD, чтобы подчеркнуть некоторые передовые практики.
Если моя интерпретация верна, вы можете получить среду BDD, просто переименовав методы в любой реализации xUnit . Так что просто используйте стандартную библиотеку unittest .
РЕДАКТИРОВАТЬ: быстрый Google обнаружил модуль поведения в магазине сыров . Дальнейшие поиски BDD там больше ничего не нашли.
TDD действительно революционная практика в совершенно ином масштабе, чем BDD. Тем не менее, я оценил способ написания тестов в стиле BDD.
JtR
1
BDD запустился на уровне единицы, это правда. Он довольно быстро разросся, чтобы охватить поведение на системном уровне, где контексты, события и результаты выигрывают от немного большей возможности повторного использования - отсюда и распространение инструментов для поддержки как этого, так и сценариев на естественном языке, взятых из бесед с нетехническими заинтересованными сторонами. С тех пор, как был задан этот вопрос, мы подняли BDD до уровня видения проекта, используя Feature Injection, с тем же акцентом на обнаружение посредством разговора и языка предметной области. Все еще ничего нового под солнцем.
Лунивор
Мне нравится этот разговор о bdd youtube.com/watch?v=pherUEzdJow . Я показываю хороший способ написания спецификаций и тестирования.
Ответы:
Ян Бикинг рекомендует использовать doctest для дизайна, ориентированного на поведение:
Лично я предпочитаю использовать нос и пустое пространство в стиле дизайна, ориентированного на поведение. В частности, специальный плагин для носа отлично подходит для BDD.
источник
Салат означает быть похожим на огурец инструментом для python: http://lettuce.it/
Вы можете получить источник на github.com/gabrielfalcao/lettuce
источник
Очень рекомендую вести себя хорошо .
В поисках клона огурца для Python я начал использовать салат, но нашел его довольно неуклюжей копией. Очень непифонично.
Потом я обнаружил, что веду себя хорошо, и был очень доволен этим.
источник
Я рекомендую вам использовать набор инструментов, разработанный для помощи программистам в практике BDD и TDD. Этот набор инструментов состоит из: pycukes , specloud , ludibrio и should-dsl .
Should-DSL оправдает ожидания, подобные RSpec. Все, что вы можете сделать с API ожидания RSpec, следует также и в случае с. Вы можете скачать последнюю версию с Github .
SpecLoud поможет вам в проведении BDD-подобных юнит-тестов. Вы можете установить его, выполнив
Ludibrio - это библиотека для тестовых двойников (Mocks, Stubs и Dummies). Установите его через
А PyCukes - это основной инструмент для BDD. Он запустит сценарии и т. Д. Опять же,
Для получения дополнительной информации прочтите документацию по инструментам на PyPi .
источник
Отличный пост и ответы. Просто хотел обновить, чтобы включить Freshen в этот список, так как я читаю pycukes больше не выпускается. Хороший пост об использовании BDD и Django с Freshen находится здесь .
источник
Вы можете использовать "sure" для выразительных утверждений (как в RSpec)
источник
Проект Pyccuracy - это попытка предоставить язык BDD, специфичный для предметной области, в Python.
В отличие от doctest, который работает на уровне API, он кодирует операции более высокого уровня, такие как загрузка веб-страницы и отправка формы. Я не использовал это, но это выглядит несколько многообещающе, если это то, что вы ищете.
источник
Мне очень нравится Пиккураци . В настоящее время я реализую это в проекте среднего размера.
источник
Попробуйте pyspecs . Создание тестов, легко читаемых и постоянно выполняемых в процессе разработки, было двумя из моих главных целей при создании этого проекта.
Тестовый код:
Консольный вывод:
источник
Я, вероятно, полностью упускаю суть, но то, что я сохранил из оригинального документа BDD, заключалось в том, что BDD был просто переупакован TDD, чтобы подчеркнуть некоторые передовые практики.
Если моя интерпретация верна, вы можете получить среду BDD, просто переименовав методы в любой реализации xUnit . Так что просто используйте стандартную библиотеку unittest .
РЕДАКТИРОВАТЬ: быстрый Google обнаружил модуль поведения в магазине сыров . Дальнейшие поиски BDD там больше ничего не нашли.
источник