Thực hành BDD với python [đã đóng]


133

Những khung và công cụ tiên tiến nhất có sẵn cho python để thực hành Phát triển hướng hành vi? Đặc biệt là tìm các công cụ tương tự như rspec và mocha cho ruby ​​sẽ rất tuyệt.


1
Flowp "cho phép viết các bài kiểm tra theo kiểu RSpec BDD với phép thuật tối thiểu".
Carl G

7
Chỉ trên SO mới có nhiều thông tin bằng "không mang tính xây dựng".
jeremyjjbrown 7/11/2016

Câu trả lời:


38

Ian Bicking khuyên bạn nên sử dụng doctest cho thiết kế hướng hành vi:

Cá nhân tôi có xu hướng sử dụng mũi giảkhoảng trống trong phong cách thiết kế hướng hành vi. Cụ thể, plugin spec cho mũi là tuyệt vời cho BDD.


7
Andrew Bennetts gần đây đã viết một vài bài đăng về lý do tại sao anh ấy nghĩ rằng doctest bị lạm dụng. andrew.puzzling.org/diary/2008/Oc/10/23/narrative-tests andrew.puzzling.org/diary/2008/Oc/10/24/more-doctest-probols
ddaa

4
Tôi nghĩ rằng doctest thực sự phù hợp hơn với triết lý của BDD, khi bạn coi nó như dự định: bạn bắt đầu viết về phần mềm, và sau đó xen kẽ với các ví dụ cũng hình thành các bài kiểm tra. Nó cũng được mô tả là "phát triển theo hướng tài liệu" - vấn đề là tập trung vào chức năng có thể mô tả ra bên ngoài, chứ không phải các đơn vị nội bộ của công việc. Tôi nghĩ rằng truyền thống xUnit khủng khiếp khi làm điều đó.
ianb

48

Xà lách có nghĩa là một công cụ giống dưa chuột cho trăn: http://lettuce.it/

Bạn có thể lấy nguồn tại github.com/gabrielfalcao/lettuce


Người dùng windows xem xét rau diếp nên biết, tại thời điểm viết, việc hỗ trợ cho HĐH đó không đơn giản.
leonigmig

7
Bất kỳ người dùng nào có ý định sử dụng rau diếp với django nên lưu ý rằng theo mặc định, nó sử dụng cơ sở dữ liệu mặc định của bạn để kiểm tra. Sự lựa chọn thiết kế thú vị này khiến tôi mất một cơ sở dữ liệu sản xuất :(
Rachel

3
Có một số lựa chọn thay thế cho Xà lách, chẳng hạn như Behave; đây là một bài viết trên blog so sánh chúng và ủng hộ Behave .
driftcatcher

1
Cảm ơn @seafangs - Behave có vẻ dễ quản lý hơn đối với các dự án lớn hơn Xà lách.
jamesc

Nếu bạn đang sử dụng django, hãy tiết kiệm thời gian sử dụng Lettuce, phiên bản hiện tại 2.19 không hoạt động với django mới nhất.
James Lin

46

Tôi thực sự khuyên bạn nên cư xử .

Tìm kiếm một bản sao dưa chuột cho Python, tôi bắt đầu sử dụng rau diếp, nhưng thấy nó là một bản sao được thiết kế khá vụng về. Rất Unpythonic.

Sau đó, tôi phát hiện ra hành vi, và đã thực sự hạnh phúc với nó.


11
Tôi đã chuyển sang hành xử từ rau diếp khi hành vi mặc định của nó là sử dụng cơ sở dữ liệu mặc định để thử nghiệm trong dự án django khiến tôi mất một cơ sở dữ liệu sản xuất trên máy chủ trực tiếp :( Tôi thực sự thích hành xử; Tôi đã bắt đầu dự án hành vi django để nối nó vào khung thử nghiệm của django github.com/rwillmer/django-behave
Rachel

1
Tôi cảm thấy nỗi đau của bạn, tôi cũng rất vui khi thấy sự đau khổ của bạn đã góp phần vào sự phát triển mạnh mẽ của hệ sinh thái django. ;-)
John Wang

1
Tôi có thể sử dụng ứng xử mà không có các tập tin tính năng không? Tôi không có người dùng không có kỹ thuật nên việc viết chúng chỉ là tiếng ồn đối với tôi. Nếu ai đó không thể đọc các bài kiểm tra đã cho / khi / sau đó của tôi thì họ không có kinh doanh ở đó.
jeremyjjbrown 7/11/2016

29

Tôi khuyên bạn nên sử dụng một bộ công cụ được phát triển để giúp các lập trình viên thực hành BDD và TDD. Bộ công cụ này được sáng tác bởi: pycukes , specloud , ludibrioShould -dsl .

Nên-DSL sẽ cung cấp cho bạn những kỳ vọng giống như RSpec. Mọi thứ bạn có thể làm với API kỳ vọng RSpec, cũng nên làm như vậy. Bạn có thể lấy phiên bản mới nhất từ ​​Github .

SpecLoud giúp bạn chạy các unittests giống như BDD. Bạn có thể cài đặt nó bằng cách làm

pip install specloud

Ludibrio là một thư viện để thử nghiệm đôi (Mocks, Stub và Dummies). Cài đặt nó qua

pip install ludibrio

PyCukes là công cụ chính cho BDD. Nó sẽ chạy các Kịch bản, vv Một lần nữa,

pip install pycukes

Để biết thêm thông tin xin vui lòng đọc tài liệu công cụ tại PyPi .


Tìm thấy tài liệu hữu ích này trong khi tìm kiếm chi tiết câu trả lời của bạn: arxiv.org/pdf/1007.1722
amit

Tôi thích nên-dsl. Tôi đã xem xét DSL cho python BDD - có một số ít, cái này có vẻ khá biểu cảm.
Daniel Staple

Tôi không thể tìm thấy bất kỳ thông tin nào về khung BDD được gọi là Kim tự tháp. Liên kết được tham chiếu trong bài báo được liên kết bởi @phaedrus dẫn đến một trang web trông đáng ngờ không liên quan gì đến việc kiểm tra và lấy điểm của Pyramid , khung web. Bất cứ ai cũng có thể cung cấp một liên kết cập nhật?
Bjorn Pollex

1
Tôi thích DSL khẳng định chắc chắn .
fatuhoku

@ BjornPollex, tên Kim tự tháp không thể được sử dụng bởi những người tạo công cụ này vì Khung web Kim tự tháp. Bây giờ chúng chỉ là các công cụ riêng biệt.
Douglas Camata

11

Bài đăng và câu trả lời tuyệt vời. Chỉ muốn cập nhật để đưa Freshen vào danh sách này khi tôi đọc pycukes bị ngưng. Một bài viết hay về việc sử dụng BDD và Django với Freshen có ở đây .


9

Bạn có thể sử dụng "chắc chắn" cho các xác nhận biểu cảm (giống như trong RSpec)


Paraben! Bạn hoàn toàn thổi bay tâm trí của tôi với mã trong magic.py. Tôi không biết rằng "các phương thức mở rộng" (các lớp mở) có thể có trong Python.
mdwhatcott

8

Dự án Pyccuracy là một nỗ lực để cung cấp một ngôn ngữ dành riêng cho miền cho BDD trong Python.

Không giống như doctest, hoạt động ở cấp API, nó mã hóa các hoạt động cấp cao hơn như tải trang web và gửi biểu mẫu. Tôi đã không sử dụng nó nhưng có vẻ hơi hứa hẹn nếu đó là những gì bạn đang tìm kiếm.


6

Tôi thích Pyccuracy rất nhiều. Tôi đang thực hiện nó trên một dự án cỡ vừa trong những ngày này.


3
Tôi sẽ quan tâm đến bất kỳ so sánh Pyccuracy vs Lettuce gần đây mà bất cứ ai cũng có thể chia sẻ.
michela

Có thể bao gồm Freshen (liên kết trong một câu trả lời ở trên) trong so sánh.
amit

Đã được hỏi tại đây: quora.com/ Kẻ
amit

6

Hãy thử pyspecs . Làm cho các bài kiểm tra dễ đọc và liên tục chạy trong quá trình phát triển là hai mục tiêu chính của tôi khi tạo dự án này.

Mã kiểm tra:

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)

Bảng điều khiển đầu ra:

# 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

Tôi có lẽ hoàn toàn thiếu quan điểm, nhưng điều tôi giữ lại trong bài viết ban đầu của BDD là BDD chỉ là TDD được đóng gói lại để nhấn mạnh một số thực tiễn tốt nhất.

Nếu giải thích của tôi là chính xác, bạn có thể nhận được khung BDD chỉ bằng cách đổi tên các phương thức xung quanh trong bất kỳ triển khai xUnit nào . Vì vậy, chỉ cần đi trước và sử dụng các thư viện chuẩn của unittest .

EDIT: Một google nhanh chóng bật lên một mô-đun Hành vi trong Cheese Shop . Tìm kiếm thêm cho BDD không tìm thấy gì khác.


TDD thực sự là một cuộc cách mạng trong một quy mô hoàn toàn khác so với BDD. Tuy nhiên, tôi vẫn đánh giá cao cách viết bài kiểm tra theo phong cách BDD.
JtR

1
BDD bắt đầu ở cấp độ đơn vị, điều này là đúng. Nó phát triển khá nhanh để bao gồm hành vi ở cấp hệ thống, trong đó bối cảnh, sự kiện và kết quả được hưởng lợi từ việc tái sử dụng nhiều hơn một chút - do đó sự phổ biến của các công cụ để hỗ trợ cả các tình huống và ngôn ngữ tự nhiên được nắm bắt từ các cuộc hội thoại với các bên liên quan phi kỹ thuật. Vì câu hỏi này đã được hỏi, chúng tôi đã đưa BDD lên đến tầm nhìn dự án, sử dụng Tính năng tiêm, với cùng sự nhấn mạnh vào khám phá thông qua hội thoại và ngôn ngữ miền. Vẫn không có gì mới dưới ánh mặt trời.
Lunivore

Tôi thích bài nói chuyện này về bdd youtube.com/watch?v=pherUEzdJow . Tôi cho thấy một cách tốt để viết thông số kỹ thuật và có nó dưới dạng thử nghiệm.
aisbaa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.