파이썬으로 BDD 연습하기


133

행동 주도 개발을 연습하기 위해 파이썬에서 사용할 수있는 가장 고급 프레임 워크와 도구는 무엇입니까? 특히 루비에 대한 rspec 및 mocha와 유사한 도구를 찾는 것이 좋습니다.


1
Flowp는 "최소한의 마법으로 RSpec BDD 스타일로 테스트를 작성할 수 있습니다".
Carl G

7
오직 SO만이 "정보 적이 지 않은"유익한 정보를 제공합니다.
jeremyjjbrown 2

답변:


38

Ian Bicking 은 행동 중심 설계에 doctest 를 사용할 것을 권장합니다 .

나는 개인적 으로 행동 중심 디자인 스타일에서 빈 공간 모의 를 사용하는 경향이 있습니다 . 특히 코용 사양 플러그인 은 BDD에 탁월합니다.


7
Andrew Bennetts는 최근 왜 doctest가 남용된다고 생각하는지에 대한 몇 가지 게시물을 썼습니다. andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
ddaa

4
나는 doctest가 실제로 의도 한대로 취급 할 때 BDD의 철학에 더 잘 부합한다고 생각합니다. 소프트웨어에 대해 글을 쓰고 테스트를 구성하는 예제와 함께 산재합니다. "문서 중심 개발"이라고도합니다. 요점은 내부 작업 단위가 아닌 외부에서 설명 할 수있는 기능에 집중하는 것입니다. 전통 xUnit 그렇게하는 것이 끔찍 하다고 생각 합니다.
ianb

48

양상추는 파이썬을위한 오이와 같은 도구임을 의미합니다 : http://lettuce.it/

github.com/gabrielfalcao/lettuce에서 소스를 얻을 수 있습니다


상추를 고려한 Windows 사용자는 작성 당시 해당 OS에 대한 지원이 간단하지 않다는 것을 알아야합니다.
leonigmig

7
django와 양상추를 사용하려는 모든 사용자는 기본적 으로 테스트를 위해 기본 데이터베이스를 사용한다는 것을 알고 있어야합니다 . 이 흥미로운 디자인 선택으로 인해 하나의 프로덕션 데이터베이스가 필요했습니다. (
Rachel

3
양상추와 같은 대안도 있습니다. 여기에 그것들을 비교하고 Behave를 옹호하는 블로그 글이 있습니다 .
driftcatcher

1
@seafangs에게 감사드립니다-Behave가 아닌 대규모 프로젝트에서 Behave가 훨씬 관리하기 쉬워 보입니다.
jamesc 2016 년

django를 사용하는 경우 Lettuce를 사용하여 시간을 절약하십시오. 현재 버전 2.19는 최신 django에서 작동하지 않습니다.
James Lin

46

정말 행동하는 것이 좋습니다 .

파이썬 용 오이 클론을 찾고, 나는 양상추를 사용하기 시작했지만, 꽤 서툴게 디자인 된 레플리카를 찾았습니다. 매우 Unpythonic.

그런 다음 나는 행동을 발견하고 정말 행복했습니다.


11
장고 프로젝트에서 테스트하기 위해 기본 데이터베이스를 사용하는 기본 동작이 라이브 서버의 프로덕션 데이터베이스에 비용이 들었을 때 상추에서 동작하도록 전환했습니다. (정말로 행동합니다. django의 테스트 프레임 워크 github.com/rwillmer/django-behave
Rachel

1
나는 당신의 고통을 느낍니다. 또한 당신의 고통이 장고 생태계의 번창에 기여한 것을 보게되어 기쁩니다. ;-)
John Wang

1
기능 파일없이 동작을 사용할 수 있습니까? 나는 기술적이지 않은 사용자가 없으므로 작성하는 것이 나에게 소음입니다. 누군가 내 주어진 / 읽을 때 / 테스트를 읽을 수 없다면 어떤 식 으로든 비즈니스가 없습니다.
jeremyjjbrown 2

29

프로그래머가 BDD 및 TDD를 연습 할 수 있도록 개발 된 도구 세트를 사용하는 것이 좋습니다. 이 도구 세트는 pycukes , specloud , ludibrioshould-dsl로 구성 됩니다.

Must-DSL 은 RSpec과 유사한 기대치를 제공합니다. RSpec 기대 API로 할 수있는 모든 것, should-dsl 역시 가능합니다. Github 에서 최신 버전을 얻을 수 있습니다 .

SpecLoud는 BDD와 같은 단위 테스트 를 실행하는 데 도움을줍니다. 당신은 그것을 수행하여 설치할 수 있습니다

pip install specloud

Ludibrio 는 테스트 복식 (Mocks, Stubs 및 Dummies)을위한 라이브러리입니다. 통해 설치

pip install ludibrio

그리고 PyCukes 는 BDD의 주요 도구입니다. 시나리오 등을 실행합니다.

pip install pycukes

자세한 내용은 PyPi 의 도구 설명서를 참조하십시오 .



나는 should-dsl을 좋아한다. 파이썬 BDD에 대한 DSL을 고려하고 있습니다. 몇 가지가 있습니다.
Danny Staple

피라미드라는 BDD 프레임 워크에 대한 정보를 찾을 수 없습니다. @phaedrus가 링크 한 논문에서 참조 된 링크는 테스트와 관련이없는 모호한 사이트로 연결되며 웹 프레임 워크 인 Pyramid 에 대한 인터넷 검색 포인트 입니다. 누구든지 최신 링크를 제공 할 수 있습니까?
Björn Pollex 12

1
확실한 주장 DSL을 선호합니다 .
fatuhoku

@ BjörnPollex, Pyramid 웹 프레임 워크 때문에 Pyramid라는 이름을이 도구 제작자가 사용할 수 없었습니다. 이제는 분리 된 도구 일뿐입니다.
Douglas Camata

11

훌륭한 게시물과 답변. 그냥 포함하도록 갱신에 원 을 상쾌을 내가 중단 pycukes을 읽으면서이 목록에. Freshen과 함께 BDD와 Django를 사용하는 것에 대한 좋은 게시물이 여기 있습니다 .


9

표현 어설 션에 "sure" 를 사용할 수 있습니다 (RSpec에서와 동일).


파라벤! magic.py의 코드로 내 마음을 완전히 망쳤습니다. 파이썬에서 "확장 메소드"(공개 클래스)가 가능하다는 것을 몰랐습니다.
mdwhatcott

8

Pyccuracy 프로젝트는 Python에서 BDD에 도메인 별 언어를 제공하기위한 노력입니다.

API 수준에서 작동하는 doctest와 달리 웹 페이지로드 및 양식 제출과 같은 고급 작업을 인코딩합니다. 나는 그것을 사용하지 않았지만 그것이 당신이 찾고있는 것이라면 다소 유망 해 보입니다.


6

나는 Pyccuracy 를 많이 좋아 합니다. 요즘 중형 프로젝트에서 구현하고 있습니다.


3
나는 누군가가 공유 할 수있는 최근의 Pyccuracy 대 양상추 비교에 관심이 있습니다.
michela

아마도 비교에 Freshen (위의 답변에 링크되어 있음)을 포함시킬 수도 있습니다.
amit sep

이미 여기에 물었다 : quora.com/…
amit

6

pyspecs를 사용해보십시오 . 개발 중에 테스트를 읽기 쉽고 지속적으로 실행하는 것이이 프로젝트를 만드는 데있어 주요 목표 중 하나였습니다.

테스트 코드 :

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)

4

아마도 요점을 완전히 놓쳤을 수도 있지만 원래 BDD 논문 에서 유지 한 것은 BDD가 모범 사례를 강조하기 위해 TDD로 다시 포장 되었다는 것 입니다.

내 해석이 정확하면 모든 xUnit 구현 에서 메소드 이름을 바꾸면 BDD 프레임 워크를 얻을 수 있습니다 . 계속해서 표준 라이브러리의 unittest를 사용하십시오 .

편집 : 빠른 구글 은 치즈 샵 에서 행동 모듈을 설정했습니다 . BDD에 대한 추가 검색 은 다른 것을 찾지 못했습니다.


TDD는 실제로 BDD와 완전히 다른 규모의 혁신적인 관행입니다. 여전히 BDD 스타일로 테스트 중심으로 작성하는 방법에 대해 감사하게 생각합니다.
JtR

1
BDD가 단위 레벨에서 시작되었는데, 이것은 사실입니다. 컨텍스트, 이벤트 및 결과가 약간 더 재사용 가능성이 큰 시스템 수준의 동작을 포함하기 위해 상당히 빠르게 성장했습니다. 따라서 도구가 확산되어 비 기술적 이해 관계자와의 대화에서 캡처 된 자연 언어 시나리오와 자연 언어 시나리오를 모두 지원합니다. 이 질문을 받았으므로 대화와 도메인 언어를 통한 검색에 중점을두고 Feature Injection을 사용하여 BDD를 프로젝트 비전 수준까지 끌어 올렸습니다. 여전히 태양 아래 새로운 것은 없습니다.
Lunivore

bdd youtube.com/watch?v=pherUEzdJow 에 대한이 이야기가 마음에 듭니다 . 사양을 작성하고 테스트로 사용하는 좋은 방법을 보여줍니다.
aisbaa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.