多くの場合、すべてのメソッドでpytestフィクスチャを使用するテストクラスを記述します。ここに例があります。すべてのメソッドのシグネチャにフィクスチャ名を記述する必要を回避できるようにしたいのですが。 DRYではありません。これはどのように行うことができますか?
テストクラスの属性としてフィクスチャを指定することで、フィクスチャにアクセスできるようにしたいと思います。この例では、GoogleフィクスチャをTestGoogleの属性として表示します。これは可能ですか?
from bs4 import BeautifulSoup
import pytest
import requests
@pytest.fixture()
def google():
return requests.get("https://www.google.com")
class TestGoogle:
def test_alive(self, google):
assert google.status_code == 200
def test_html_title(self, google):
soup = BeautifulSoup(google.content, "html.parser")
assert soup.title.text.upper() == "GOOGLE"
もちろん、自動使用のフィクスチャを使用してください。 これはpytest
docsの関連するスポットです 。あなたの例では、変更は追加のフィクスチャを導入することになります(私は_request_google_page
という名前を付けました):
from bs4 import BeautifulSoup
import pytest
import requests
@pytest.fixture()
def google():
return requests.get("https://www.google.com")
class TestGoogle:
@pytest.fixture(autouse=True)
def _request_google_page(self, google):
self._response = google
def test_alive(self):
assert self._response.status_code == 200
def test_html_title(self):
soup = BeautifulSoup(self._response.content, "html.parser")
assert soup.title.text.upper() == "GOOGLE"
google
フィクスチャを完全に削除して、コードを_request_google_page
に移動することもできます。
@pytest.fixture(autouse=True)
def _request_google_page(self):
self._response = requests.get("https://www.google.com")
_request_google_page
はデフォルトでテストごとに1回呼び出されるため、各テストは新しい応答を受け取ることに注意してください。応答を一度初期化し、TestGoogle
クラスのすべてのテストで再利用する場合は、フィクスチャのスコープを調整します(scope='class'
for _request_google_page
and scope='module'
or scope='session'
for google
)。