2011-09-13 31 views
35

Với pytest, người ta có thể đánh dấu kiểm tra bằng cách sử dụng trang tríPytest: Bỏ chọn kiểm tra

@pytest.mark.slow 
def some_slow_test(): 
    pass 

Sau đó, từ dòng lệnh, người ta có thể nói pytest để bỏ qua các bài kiểm tra đánh dấu "chậm"

pytest -k-slow 

Nếu tôi có thẻ bổ sung:

@pytest.mark.long 
def some_long_test() 
    pass 

Tôi muốn có thể bỏ qua cả thử nghiệm dài và chậm. Tôi đã thử điều này:

pytest -k-slow -k-long 

và điều này:

pytest -k-slow,long 

Và không có vẻ làm việc.

Tại dòng lệnh, làm thế nào để tôi nói với pytest bỏ qua cả thử nghiệm chậm và dài?

Trả lời

40

Bên cạnh đó, với việc bổ sung gần đây của tùy chọn dòng lệnh "-m", bạn sẽ có thể viết:

py.test -m "not (slow or long)" 

IOW, the "-m" tùy chọn chấp nhận một biểu thức có thể sử dụng các dấu hiệu như các giá trị boolean (nếu một điểm đánh dấu không tồn tại trên một hàm thử nghiệm thì giá trị của nó là False, nếu nó tồn tại, nó là True).

10

Nhìn qua các pytest mã (mark.py) và thử nghiệm tiếp tục cho thấy những điều sau đây dường như làm việc:

pytest -k "-slow -long" 

(Sử dụng tùy chọn --collect-only tăng tốc độ thử nghiệm)

+3

Có lẽ API đã thay đổi. Tôi đã thử 'pytest -k" -slow -long "' và nhận lại 'py.test: error: argument -k: dự kiến ​​một đối số' – DMfll

4

Cũng có thể xếp chồng trang trí điểm đánh dấu.

@pytest.mark.slow 
@pytest.mark.main 
def test_myfunction(): 
    pass 

Sau đó tôi gọi là py.test -m "slow and main" và chỉ thử nghiệm với cả hai trang trí được gọi.

py.test -m "not (slow and main)" dẫn đến các thử nghiệm khác chạy

Các vấn đề liên quan