Приспособление Pytest для класса через себя, а не как аргумент метода - PullRequest
0 голосов
/ 02 мая 2018

Часто я пишу тестовый класс, который использует приспособление pytest в каждом методе. Вот пример. Я хотел бы иметь возможность избежать записи имени прибора в подписи каждого метода. Это не СУХОЙ. Как это может быть сделано?

Я хотел бы иметь возможность получить доступ к устройству, указав его в качестве атрибута тестового класса. В этом примере я хотел бы видеть приспособление 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"

1 Ответ

0 голосов
/ 02 мая 2018

Конечно, просто используйте автоматическое устройство. Вот соответствующее место в pytest документах . В вашем примере изменение представило бы дополнительный прибор (я назвал его _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 будет вызываться один раз для каждого теста, поэтому каждый тест получит новый ответ. Если вы хотите, чтобы ответ инициализировался один раз и использовался повторно во всех тестах в классе TestGoogle, отрегулируйте области действия прибора (scope='class' для _request_google_page и scope='module' или scope='session' для google).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...