Есть ли эквивалент python для RSpec для TDD?

Я ищу тестовую инфраструктуру, такую ​​как Ruby RSpec, для создания тестовой разработки на Python. Преимущество такой структуры, как RSpec, заключается в том, что она предлагает DSL, который хорошо поддается TDD. Сначала вы описываете тест на английском языке, а затем вы пишете тест, а когда он терпит неудачу, вы получаете сообщение о том, что тест не прошел с вашим хорошим описанием того, что пытается попытаться сделать.

До сих пор я смотрел на PyTest и Nose. PyTest кажется ближе к рубину MiniTest, чем RSpec. Вместо того, чтобы предлагать DSL с языком, чтобы он читался как спецификации, он фокусируется на утверждениях. Нос выглядит как обертка на PyTest, которая не добавляет свой собственный DSL.

Есть ли еще один вариант, который мне не хватает? Или я просто злоупотребляю PyTest и носом? Разве сообщество Python остановилось на совершенно другом способе этого, и я должен перестать пытаться сделать его похожим на Ruby? Не похоже, исходя из количества звезд в GitHub, что сообщество действительно помазало любой из этих опций в качестве предпочтительной структуры тестирования.

Ответ 2

Я люблю Rspec! На python я собираюсь использовать плагин py.test с именем spec: https://pypi.python.org/pypi/pytest-spec https://github.com/pchomik/pytest-spec

Он использует unittest, пакет python по умолчанию, плюс pytest и сам. После клонирования проекта с моей установкой python 2.7 conda OSX 10.11 я смог запустить свои собственные тесты, и он работал нормально!

Формат прост, но включает в себя основы: имя группы, статус pass/fail/skip и имя теста, обозначаемое пробелами вместо подчеркиваний. Здесь некоторые результаты из собственных тестов, которые кажутся мне просто простыми.

    $ py.test --spec
================================ test session starts =================================
platform darwin -- Python 2.7.11, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /Users/ME/src/pytestspec, inifile: setup.cfg
plugins: spec-1.0.1, testinfra-1.4.1
collected 30 items 

test/test_patch.py::TestPatch
    [PASS]  Pytest runtest logreport honors capitalization of words in test name
    [PASS]  Pytest runtest logreport marks method marked by double underscores
    [PASS]  Pytest runtest logreport prints class name before first test result
    [PASS]  Pytest runtest logreport prints test name and failed status
    [PASS]  Pytest runtest logreport prints test name and handle only single marker
    [PASS]  Pytest runtest logreport prints test name and passed status
    [PASS]  Pytest runtest logreport prints test name and skipped status
    [PASS]  Pytest runtest logreport returns none when letter is missing
    [PASS]  Pytest runtest logreport returns none when nodeid is wrong formatted
    [PASS]  Pytest runtest logreport returns none when word is missing
    [PASS]  Pytest runtest logreport skips empty line for first test
    [PASS]  Pytest runtest logstart returns none

test/test_plugin.py::TestPlugin
    [PASS]  Pytest adoption adds spec option
    [PASS]  Pytest adoption gets general group
    [PASS]  Pytest configure reloads pytest after patching
    [PASS]  Pytest configure should not reload configuration

test/test_replacer.py::TestPatcher
    [PASS]  Logstart replacer returns result of pytest runtest logstart method
    [PASS]  Report replacer returns result of pytest runtest logreport method

test/test_formats/test_functions.py
    [PASS]  Some function returns none
    [PASS]  Some function single underscore as prefix
    [PASS]  Some function single underscore as suffix

test/test_formats/test_methods.py::TestFormats
    [PASS]  Some method returns none
    [PASS]  Some method single underscore as suffix
    [PASS]  Some method single underscore as prefix

test/test_results/test_as_class.py::TestResults
    [SKIP]  Some method return none
    [SKIP]  Some method returns false
    [PASS]  Some method returns true

test/test_results/test_as_functions.py
    [PASS]  Some method returns true
    [SKIP]  Some method returns false
    [SKIP]  Some method return none

======================== 26 passed, 4 skipped in 0.14 seconds ========================

Ответ 3

http://pythonhosted.org/behave/

Это одно из решений поведенческой разработки в python. Может помочь.

Ответ 4

Существует также https://testinfra.readthedocs.io/en/latest/, если вы можете использовать servepec, который, согласно веб-сайту, говорит

Testinfra стремится быть эквивалентом Serverspec в python и написан как плагин для мощного прототипа Pytest

Я бы скорее сделал python, но мне нужно иметь дело с рубином. C'est La Vie.