Size: a a a

testing_in_python

2019 January 15

СС

Сказочный Сникерс in testing_in_python
у тебя в self добавляется аттрибут с именем фикстуры, значение аттрибута - результат фикстуры
источник

СС

Сказочный Сникерс in testing_in_python
чем плох вариант выше - на каждый класс тебе надо будет лепить декоратор) а можно сделать через метаклассы в твоем самом базовом классе, верятно что все тесты он него наследуются (ну должны по крайней мере)
источник

b

betzy in testing_in_python
@pytest.fixture(scope="function")
   def register_new_user(self):
       return self.faker.first_name()


представь что такая фикстура
источник

b

betzy in testing_in_python
вот там до ретурна идет процесс регистрации юзверя
источник

b

betzy in testing_in_python
и при успехе нужно вернуть мыло на который регалось
источник

b

betzy in testing_in_python
Сказочный Сникерс
могу из своего опыта дать вариант с метаклассом
давай еще позырю этот вариант
источник

СС

Сказочный Сникерс in testing_in_python
возвращай весь объект целиком, где будет весь юзер
источник

СС

Сказочный Сникерс in testing_in_python
и мыло и имя и прочяя инфа
источник

СС

Сказочный Сникерс in testing_in_python
либо если уж не охота перелопачивать проставляй в self.email аттрибут мыло
источник

СС

Сказочный Сникерс in testing_in_python
хотя такой вариант мне меньше нравится
источник

b

betzy in testing_in_python
Сказочный Сникерс
возвращай весь объект целиком, где будет весь юзер
ну вот я возвращаю, но привызове этой фикстуры в тесте нифига не происходит чето
источник

b

betzy in testing_in_python
скинь еще варик с метаклассами
источник

СС

Сказочный Сникерс in testing_in_python
betzy
скинь еще варик с метаклассами
ща упрощу его, а то там наверчено)
источник

СС

Сказочный Сникерс in testing_in_python
источник

СС

Сказочный Сникерс in testing_in_python
в двух словах:
1.если у тестового класса или у родителя, от которого отнаследовались есть аттрибут daemon_name, то мы проставляем такому тесту @pytest.mark.<daemon_name>

Так мы не маркаем каждый тест, а только разово выставляем атрибут в базовом классе для этих тестов

2. Если в тестовом классе или в родителе, от которого отнаследовались есть метод setup, то мы проставляем такому тесту @pytest.mark.usefixtures(’setup’)

Так мы не делаем каждому тесту def test(setup):
источник

СС

Сказочный Сникерс in testing_in_python
конкретно в моем случае метод setup наполняет контекст
источник

СС

Сказочный Сникерс in testing_in_python
то есть потом я обращаюсь к нужным сущностям через self.ctx.ATTR
источник

b

betzy in testing_in_python
круто! ща буду ковырять
источник

b

betzy in testing_in_python
спасибо
источник

СС

Сказочный Сникерс in testing_in_python
при этом еще у каждого теста есть метод prepare() который выполняется сильно до того как стартуют тесты, еще на этапе pytest_configure и pytest_configure_node (для многопоточного режима), где собираются все prepare всех тестов и выполняются параллельно, заполняя контекст (словарь с ключом - имя теста, значение - сгенеренный контекст). Далее каждый тест через фикстуру setup идет в этот сериализованный контекст и забирает свои данные)
источник