2015-12-01 113 views
1

我有一個函數,我不想每次運行我的Flask-RESTFul API中的測試時都運行。這是設置的例子:使用pytest.fixture退出函數

class function(Resource): 
    def post(self): 
     print 'test' 
     do_action() 
     return {'success':True} 
在我的測試

我要運行這個功能,卻忽略do_action()。我將如何使用pytest做到這一點?

+0

您是否想在某些運行中完全跳過測試。或者你是否希望通過使用'do_action()'運行,然後在沒有運行的情況下運行此測試? – shuttle87

+0

我希望它完全跳過測試。 – Rob

+0

這樣的事情:import pytest @ pytest.fixture(scope =「function」,autouse = True) – Rob

回答

1

這似乎是一個很好的機會,mark測試

@pytest.mark.foo_test 
class function(Resource): 
    def post(self): 
     print 'test' 
     do_action() 
     return {'success':True} 

然後,如果你有

py.test -v -m foo_test 

它只能運行這些測試標有「foo_test」

如果你打電話叫與

py.test -v -m "not foo_test" 

它將運行沒有標記爲「foo_test」

+0

我想運行測試,我只是不想做do_action(),這很有趣。 – Rob

+0

@Rob每次運行測試套件時,您是否都想用'do_action()'和沒有'do_action()'運行測試用例?或者如果根據調用測試套件的方式調用'do_action()',是否要切換? – shuttle87

+0

切換如何調用它。 – Rob

1

您可以在您的測試嘲笑do_action所有測試:

def test_post(resource, mocker): 
    m = mocker.patch.object(module_with_do_action, 'do_action') 
    resource.post() 
    assert m.call_count == 1 

所以實際的功能不會在這個測試中被調用,用額外的好處 你可以檢查post實現是否正在調用該函數。

這需要安裝(無恥插頭)pytest-mocker至 。