2011-09-13 67 views
35

隨着pytest,可以使用裝飾Pytest:取消選擇測試

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

然後,在命令行標記檢測,一看就知道pytest跳過測試標記爲「慢」

pytest -k-slow 

如果我有一個額外的標籤:

@pytest.mark.long 
def some_long_test() 
    pass 

我希望能夠跳過長和慢的測試。我已經試過這樣:

pytest -k-slow -k-long 

這:

pytest -k-slow,long 

而且既不似乎工作。

在命令行中,我該如何告訴pytest跳過慢速測試和長時間測試?

回答

40

另外,最近新增加的「-m」命令行選項,你應該能夠編寫:

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

督察,在「-m」選項接受可以使用標記作爲布爾值的表達式(如果標記不存在於測試函數中,則其值爲假,如果存在,則爲真)。

10

通過pytest代碼(mark.py)和進一步的實驗展望顯示以下似乎工作:

pytest -k "-slow -long" 

(使用--collect-only選項加速試驗)

+3

也許API已經改變了其他測試。我嘗試了'pytest -k「-slow -long」'並返回了'py.test:error:argument -k:expected one argument' – DMfll

4

也可以堆棧標記裝飾器。

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

然後我調用py.test -m "slow and main",只調用了兩個裝飾器的測試。

py.test -m "not (slow and main)"導致運行