2016-09-18 24 views
0

私は、各テストのためにwebdriverをインスタンスを作成します。このautouse器具を持っている:pytest - autouse fixtureを無視する方法はありますか?

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

しかし、我々のテストのいくつかは、私たちのAPIのいずれかにバグが原因PhantomJS上で実行することはできません。これらのテストはChromeのみ(またはFirefox)で実行することができますので、私はChromeを使ってwebdriverをインスタンスのための別の方法を作成しました:私はそれらのテストに使用する予定の

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

が、私は上記のautouse器具の周りに取得することはできません。

いくつかのテストでは、オートセットアップのフィクスチャをオーバーライドする方法はありますか?私はそれぞれのテストのためにpytest.mark.usefixturesを使用しようとしましたが、それぞれのすべてのテストにそのデコレータを置くのは理想的ではないようです。誰かがメタクラスを使用して言及しましたが、私は彼らがまだどのように動作しているか完全に理解していないので、私は逃したかもしれない別の方法があるかどうか疑問に思っていました。

+0

のようなテストをマークしたがあまりにも反復的で、各テストごとにフィクスチャーを置く必要はありません。 – banx

答えて

1

これは多くの方法で実現できますが、1つの方法はpytestマークの修正と一緒にリクエストフィクスチャを使用することです。 あなたがする必要があるすべては、あなたが以下の言ったようにbaid @saurabhおかげで、私はオンデマンドでの固定具を使用してみましたが

@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

ありがとう!このabitを変更し、それが動作するかどうかをお知らせします – 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): 
... 
... 
関連する問題