mũi và pytest - sự khác biệt (chủ quan) nào khiến tôi nên chọn? [đóng cửa]


85

Tôi đã bắt đầu làm việc trên một dự án Python (đa luồng) khá lớn, với vô số bài kiểm tra (đơn vị). Vấn đề quan trọng nhất ở đó là việc chạy ứng dụng yêu cầu một môi trường đặt trước, được thực hiện bởi trình quản lý ngữ cảnh. Cho đến nay, chúng tôi đã sử dụng phiên bản vá lỗi của trình chạy thử nghiệm đơn vị sẽ chạy các thử nghiệm bên trong trình quản lý này, nhưng điều đó không cho phép chuyển đổi ngữ cảnh giữa các mô-đun thử nghiệm khác nhau.

Cả mũi và pytest đều hỗ trợ điều đó vì chúng hỗ trợ đồ đạc ở nhiều mức độ chi tiết, vì vậy chúng tôi đang xem xét chuyển sang mũi hoặc pytest. Cả hai thư viện này cũng sẽ hỗ trợ các bài kiểm tra 'gắn thẻ' và chỉ chạy các tập hợp con được gắn thẻ này, đó là điều chúng tôi cũng muốn làm.

Tôi đã xem qua tài liệu về cả mũi và pytest một chút, và theo như tôi có thể thấy phần lớn hơn của các thư viện đó về cơ bản hỗ trợ cùng một chức năng, ngoại trừ việc nó có thể được đặt tên khác hoặc yêu cầu cú pháp hơi khác. Ngoài ra, tôi đã lưu ý một số khác biệt nhỏ trong các plugin có sẵn (mũi có hỗ trợ đa quy trình, ví dụ như pytest thì không)

Vì vậy, có vẻ như, ma quỷ là chi tiết, có nghĩa là (thường ít nhất) theo sở thích cá nhân và chúng ta tốt hơn nên sử dụng thư viện phù hợp với sở thích cá nhân của mình nhất.

Vì vậy, tôi muốn yêu cầu một lập luận chủ quan tại sao tôi nên sử dụng mũi hoặc pytest để chọn kết hợp thư viện / cộng đồng phù hợp nhất với nhu cầu của chúng tôi.


Chỉ cần lưu ý rằng nhiều hơn hoặc ít hơn cùng một câu hỏi được hỏi cũng ở đây - nhưng đó là năm năm trước, vì vậy tôi vẫn nghĩ reasking câu hỏi có ý nghĩa
Jakob van Bethlehem

9
pytesthỗ trợ hỗ trợ đa quy trình thông qua plugin pytest-xdist .
Bruno Oliveira

2
Ngoài ra, trình quản lý ngữ cảnh chỉ là các đối tượng Python thuần túy và bạn có thể gọi manager.__enter__()trong của bạn TestCase.setUp()manager.__exit__()trong của bạn tearDown().
rescdsk

Câu trả lời:


80

Tôi đã từng sử dụng Nose vì nó là mặc định với Pylons. Tôi không thích nó chút nào. Nó có các tua cấu hình ở nhiều nơi, hầu như mọi thứ dường như được thực hiện với một plugin không có tài liệu, điều này làm cho nó trở nên gián tiếp và khó hiểu hơn, và vì nó đã thực hiện các bài kiểm tra đơn nhất theo mặc định, nó thường xuyên bị lỗi theo dấu vết Unicode, che giấu các nguồn lỗi.

Tôi đã khá hài lòng với py.test trong vài năm qua. Có thể chỉ cần viết một thử nghiệm với assertout of the box làm cho tôi ghét viết bài kiểm tra cách ít hơn, và hack bất cứ điều gì tôi cần trên đỉnh cốt lõi đã được khá dễ dàng. Thay vì một giao diện plugin cố định, nó chỉ có hàng đống móc nối và mã nguồn khá dễ hiểu nếu bạn cần tìm hiểu thêm. Tôi thậm chí đã viết một bộ điều hợp để chạy các bài kiểm tra Testify trong py.test và gặp nhiều sự cố với Testify hơn là với py.test.

Điều đó nói rằng, tôi nghe nói mũi có các plugin cho các bài kiểm tra không có lớp học và khẳng định khả năng xem xét nội tâm ngày nay, vì vậy bạn có thể sẽ làm tốt với một trong hai. Tuy nhiên, tôi vẫn cảm thấy như mình có thể xuống đất khi chạy với py.test và tôi có thể hiểu điều gì đang xảy ra khi nó bị hỏng.


2
Một số vấn đề với dấu vết ẩn đã được khắc phục xung quanh mũi 0,11, nhiều năm trước đây. Vì cổng Python 3, tôi mong đợi bất kỳ lần truy vết unicode nào ít thường xuyên hơn (mặc dù cá nhân tôi nghĩ rằng tôi chỉ gặp sự cố unicode với mũi một lần, điều này đã xảy ra khi kết hợp nó với một số lớp cơ sở trường hợp thử nghiệm đã thực hiện một số "mẹo" đã không ' t thực sự có ý nghĩa - vì vậy đó hóa ra không phải là lỗi của mũi). Tôi nghi ngờ sự thật cả hai công cụ có các cạnh thô gõ tắt chúng trong những năm qua, vì vậy có lẽ bạn sẽ thích thích nhất nào bạn sử dụng gần đây nhất ;-)
Croad Langshan

những gì về phần tài liệu gần đây. Tôi cũng bối rối không biết nên sử dụng nosetests hay py.test. cả hai đều có vẻ tốt như nhau nhưng khi tôi đọc, hầu hết mọi người đang sử dụng nosetests ngày nay. Lý do có thể là gì khi py.tests có sẵn bộ thư viện đa xử lý tốt hơn?
proprius

1
@proprius nó có thể chỉ là nosetests đến trước. một số khuôn khổ đã thêm hỗ trợ cho nó, các dự án sử dụng các khuôn khổ đó đã sử dụng nó theo mặc định và nó lan rộng. Ngoài ra, trong khi py.test có thể chạy mũi và các bài kiểm tra mới nhất, phong cách thông thường của nó không được sắp xếp xung quanh các lớp, vì vậy việc chuyển sang py.test có thể cảm thấy khó khăn.
Eevee

4
tôi đã bắt đầu đọc qua phần tài liệu của pytest và tôi nhận ra rằng đối với mục đích đa xử lý cũng như về mặt học tập cho người mới, pytest là một lựa chọn tốt hơn.
proprius
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.