Практика BDD с Python

Какие самые продвинутые фреймворки и инструменты доступны для Python для практики разработки, основанной на поведении? Было бы здорово найти такие инструменты, как rspec и mocha для ruby.

Flowp «позволяет писать тесты в стиле RSpec BDD с минимумом магии».
Carl G 26.01.2014 14:03

Только на SO быть высокоинформативным равно «неконструктивным».

jeremyjjbrown 07.11.2014 05:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
133
2
45 959
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Я, вероятно, полностью упускаю суть, но что я сохранил из оригинальная бумага BDD, так это то, что BDD был просто переупакован TDD, чтобы подчеркнуть некоторые лучшие практики.

Если моя интерпретация верна, вы можете получить структуру BDD, просто переименовав методы в любой реализации xUnit. Так что просто продолжайте и используйте стандартную библиотеку модульный тест.

Обновлено: быстрый Google обнаружил модуль Поведение в Сырная лавка. Далее поиск для BDD там больше ничего не нашел.

TDD действительно революционизирует практику в совершенно ином масштабе, чем BDD. Тем не менее, я оценил способ написания тестовых файлов в стиле BDD.

JtR 24.10.2008 14:17

BDD запустился на уровне юнитов, это правда. Он довольно быстро разросся, чтобы охватить поведение на системном уровне, где контексты, события и результаты выигрывают от немного большей возможности повторного использования - отсюда и распространение инструментов для поддержки как этого, так и сценариев на естественном языке, взятых из бесед с нетехническими заинтересованными сторонами. С тех пор, как был задан этот вопрос, мы подняли BDD до уровня видения проекта, используя внедрение функций, с таким же упором на обнаружение через диалог и язык предметной области. По-прежнему ничего нового под солнцем.

Lunivore 07.03.2011 14:13

Мне нравится этот разговор о bdd youtube.com/watch?v=pherUEzdJow. Я показал хороший способ написать спецификации и использовать их в качестве тестов.

aisbaa 04.04.2012 18:04
Ответ принят как подходящий

Ян Бикинг рекомендует использовать доктест для проектирования, управляемого поведением:

Лично я предпочитаю использовать нос и макет пустого пространства в стиле дизайна, ориентированном на поведение. В частности, спецификация плагин для носа отлично подходит для BDD.

Эндрю Беннеттс недавно написал пару постов о том, почему, по его мнению, злоупотребляют doctest. andrew.puzzling.org/diary/2008/October/23/narrative-testsandrew.puzzling.org/diary/2008/October/24/more-doctest-probl‌ ems

ddaa 24.10.2008 16:18

Я думаю, что на самом деле doctest больше соответствует философии BDD, когда вы относитесь к нему так, как предполагалось: вы начинаете писать о программном обеспечении, а затем перемежаете это примерами, которые также образуют тесты. Его также называют «разработкой, управляемой документами» - суть в том, чтобы сосредоточиться на внешне описываемой функциональности, а не на внутренних единицах работы. Я считаю, что традиция xUnit является ужасна в этом.

ianb 20.04.2009 22:38

Проект Pyccuracy - это попытка предоставить предметно-ориентированный язык для BDD на Python.

В отличие от doctest, который работает на уровне API, он кодирует операции более высокого уровня, такие как загрузка веб-страницы и отправка формы. Я не использовал его, но он выглядит многообещающим, если это то, что вы ищете.

Мне очень нравится Pyccuracy. В настоящее время я реализую это в проекте среднего размера.

Я был бы заинтересован в любом недавнем сравнении Pyccuracy и Lettuce, которым можно поделиться.

michela 14.12.2010 06:06

Возможно, включите Freshen (ссылка на ответ выше) в сравнение.

amit 10.09.2011 14:41

Уже спрашивали здесь: quora.com/…

amit 10.09.2011 14:42

Салат - это инструмент для Python, похожий на огурец: http://lettuce.it/

Вы можете скачать исходный код на github.com/gabrielfalcao/lettuce

Пользователи Windows, рассматривающие салат-латук, должны знать, на момент написания статьи, поддержка этой ОС не является простой задачей.

leonigmig 06.03.2011 16:41

Любые пользователи, намеревающиеся использовать салат с django, должны знать, что по умолчанию он использует вашу базу данных дефолт для тестирования. Этот интересный выбор дизайна стоил мне одной производственной базы данных

Rachel 26.09.2012 11:49

Есть несколько альтернатив салату-латук, например, Behave; вот сообщение в блоге, сравнивающее их и пропагандирующее поведение.

driftcatcher 05.02.2013 22:10

Спасибо @seafangs - Behave выглядит более управляемым для больших проектов, чем Lettuce.

jamesc 14.05.2013 01:44

Если вы используете django, сэкономьте время на использовании Lettuce, текущая версия 2.19 не работает с последней версией django.

James Lin 06.05.2014 07:10

Я рекомендую вам использовать набор инструментов, разработанный в помощь программистам в практике BDD и TDD. Этот набор инструментов состоит из: пикики, specloud, Ludibrio и должен-dsl.

Должен-DSL даст вам ожидания, подобные RSpec. Все, что вы можете делать с API ожидания RSpec, делает и should-dsl. Вы можете взять последняя версия от Github.

SpecLoud помогает запускать юнит-тесты, подобные BDD. Вы можете установить его, выполнив

pip install specloud

Ludibrio - это библиотека для тестовых двойников (Mocks, Stubs и Dummies). Установите его через

pip install ludibrio

А PyCukes - это основной инструмент для BDD. Он запустит сценарии и т. д. Опять же,

pip install pycukes

Для получения дополнительной информации прочтите документацию по инструментам на PyPi.

Нашел этот полезный документ, ища подробности вашего ответа: arxiv.org/pdf/1007.1722

amit 10.09.2011 14:37

Мне нравится should-dsl. Я рассматривал DSL для python BDD - их несколько, но этот кажется довольно выразительным.

Danny Staple 26.03.2012 16:30

Я не могу найти никакой информации о фреймворке BDD под названием Pyramid. Ссылка, указанная в документе, связанном с @phaedrus, ведет на сомнительно выглядящий сайт, который не имеет ничего общего с тестированием, а поиск в Google указывает на Пирамида, веб-фреймворк. Кто-нибудь может предоставить актуальную ссылку?

Björn Pollex 22.08.2013 16:28

Я предпочитаю DSL утверждения Конечно.

fatuhoku 02.09.2013 13:33

@ BjörnPollex, название Pyramid не могло использоваться создателями этих инструментов из-за Pyramid Web Framework. Теперь это всего лишь отдельные инструменты.

Douglas Camata 18.12.2013 21:39

Отличный пост и ответы. Просто хотел обновить, чтобы включить Освежить в этот список, поскольку я читал, что поддержка pycukes прекращена. Хороший пост об использовании BDD и Django с Freshen - здесь.

Попробуйте особи. Две мои основные цели при создании этого проекта - сделать тесты легко читаемыми и постоянно запускаемыми во время разработки.

Код теста:

from pyspecs import given, when, then, and_, the, this

with given.two_operands:
    a = 2
    b = 3

    with 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 in 0.0002 seconds)

Я очень рекомендую вести себя.

В поисках клона Cucumber для Python я начал использовать салат, но обнаружил, что это довольно неуклюжая копия. Очень непифонично.

Затем я обнаружил, что ведешь себя, и был очень доволен этим.

Я переключился на поведение с салата, когда его поведение по умолчанию - использование базы данных по умолчанию для тестирования в проекте django стоило мне производственной базы данных на живом сервере: Фреймворк тестирования django github.com/rwillmer/django-behave

Rachel 26.09.2012 11:51

Я чувствую вашу боль, а также рад видеть, что ваши страдания способствовали процветанию экосистемы django. ;-)

John Wang 10.10.2014 14:14

Могу ли я использовать поведение без файлов функций? У меня нет нетехнических пользователей, поэтому их написание для меня просто шум. Если кто-то не может прочитать мои тесты, которые я дал / когда /, то они не имеют никакого отношения к этому.

jeremyjjbrown 07.11.2014 05:10

Вы можете использовать "Конечно" для выразительных утверждений (как в RSpec)

Парабены! Вы совершенно поразили меня кодом в magic.py. Я понятия не имел, что в Python возможны «методы расширения» (открытые классы).

mdwhatcott 20.11.2012 10:06

Другие вопросы по теме