2016-09-18 36 views
0

我有這個autouse夾具,將每個測試創建一個實例的webdriver:pytest - 有沒有辦法忽略一個autouse fixture?

@pytest.fixture(autouse=True) 
def use_phantomjs(self): 
    self.wd = webdriver.PhantomJS() 
    yield 
    self.close_wd() 

然而,我們的一些測試不能PhantomJS運行,由於使用我們的API的一個錯誤。這些測試只能在Chrome瀏覽器(或Firefox)中運行,所以我創造了另一個方法適用於使用Chrome一個webdriver的實例:

def use_chrome(self): 
    self.wd = webdriver.Chrome() 

,我打算在這些測試中使用,但我不能圍繞autouse燈具得到以上。

有沒有辦法以某種方式覆蓋我們的一些測試autouse夾具?我已經嘗試過爲每個測試使用pytest.mark.usefixtures,但是在每個測試中都必須放置這個裝飾器似乎並不理想。有人提到使用元類,但我還沒有完全理解它們是如何工作的,所以我想知道是否有其他方法可能會錯過。

+0

感謝@saurabh baid一樣,我一直在使用夾具上的需求作爲你下面說嘗試,但它似乎太重複,並且不必在每次測試中都放置燈具。 – banx

回答

1

您可以通過多種方式實現此目的,一種方法是使用請求夾具和pytest標記修復。 所有你需要做的是,創造一個新的通用夾具

@pytest.fixture(autouse=True) 
def browser(request): 
    _browser = request.node.get_marker('browser') 
    if _browser: 
     if _browser.kwargs.get("use") == "chrome" : 
      # Do chrome related setup 
     elif _browser.kwargs.get("use") == "phantom" : 
      # Do Phantom.js related setup 
    else: 
     # No mark up ,use default setup 

,並標記你的測試此

@pytest.mark.browser(use="chrome") 
def test_some_chrome_test(): 
    # browser here would return chrome driver 

@pytest.mark.browser(use="phantom") 
def test_some_phantomjs_test(): 
    # browser here would return phantom driver 
+0

謝謝!將修改此升技,然後會讓你知道它是否有效 – banx

+0

它的工作!感謝您的幫助 – banx

+0

感謝您的幫助。 – Sanju

0

有沒有辦法使用這些功能按需使用usefixtures修飾器如下。 如果您已經使用autouse=True,那麼它會根據其範圍自動調用,我不認爲有任何方法可以在任何測試中跳過該方法。

@pytest.fixture(autouse=False) 
def use_phantomjs(self): 
    self.wd = webdriver.PhantomJS() 
    yield 
    self.close_wd() 

def test_my_test(use_phantomjs): 
... 
... 
相關問題