2015-08-27 33 views
0

我該如何標記pytest測試收集過程中跳過的測試。從pytest_collection_modifyitems跳過標記測試

什麼即時嘗試做的是pytest收集所有測試,然後使用pytest_collection_modifyitems鉤子標記一個特定的測試,因爲我從數據庫中獲得的條件跳過。

我發現我不喜歡一個解決方案,我想知道是否也許有一個更好的辦法。

def pytest_collection_modifyitems(items, config): 
    ... # get skip condition from database 
    for item in items: 
     if skip_condition == True: 
      item._request.applymarker(pytest.mark.skipif(True, reason='Put any reason here')) 

這種解決方案的問題是,我訪問類的保護成員(_request)..

感謝。

+0

爲什麼要嘗試這樣做? – jonrsharpe

+0

@jonrsharpe我們正在製作一個數據庫,以便從那裏跳過測試,而不必爲了測試通過而承諾跳過並等待每個開發人員重新掌握測試。 – Israhack

+1

但是,如果您在實際裝飾方法時將數據庫調用作爲「skipif」的一部分,那麼無需回溯applymarker即可實現同樣的功能。 – jonrsharpe

回答

0

您可以迭代測試用例(項目)並使用常用的夾具跳過它們。使用'autouse = True'時,您不應該在每個測試用例中將其作爲參數傳遞給它:

@pytest.fixture(scope='function', autouse=True) 
def my_common_fixture(request): 
    if True: 
     pytest.skip('Put any reason here')