2016-09-18 7 views
0

나는 각 시험에 대한 webdriver 인스턴스를 생성합니다이 autouse기구가 있습니다. 이 테스트는 크롬 (또는 Firefox)에서 실행할 수있는, 그래서 크롬을 사용하여 webdriver 인스턴스에 대해 다른 방법을 만들어 : 그 테스트에 사용할 계획pytest - autouse fixture를 무시할 수있는 방법이 있습니까? 때문에 우리의 API 중 하나 버그에</p> <pre><code>@pytest.fixture(autouse=True) def use_phantomjs(self): self.wd = webdriver.PhantomJS() yield self.close_wd() </code></pre> <p>그러나, 우리의 테스트 중 일부는 PhantomJS에서 실행할 수 없습니다 :

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

하지만 위의 autouse기구 주위에 얻을 수 없습니다.

테스트 중 일부에 대해 오토 우스터 픽스쳐를 무시하는 방법이 있습니까? 나는 각각의 테스트에 대해 pytest.mark.usefixtures을 사용해 보았지만 각각의 모든 테스트에 그 데코레이터를 두는 것이 이상적이지는 않다. 누군가 메타 클래스를 사용하여 언급했지만 아직 작동 방식을 완전히 이해하지 못했기 때문에 내가 놓친 다른 방법이 있는지 궁금해하고있었습니다.

+0

덕분에 같은 테스트를 표시하기 만하면, 난 당신이 아래 말했다 수요에 고정을 사용하여 시도했지만 그것은 너무 반복적이고 불필요한 것으로 보입니다. 덕분에 – 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 

을 만들고 대머리 @saurabh이

@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): 
... 
...