Size: a a a

testing_in_python

2021 June 17

АК

Александр Кот... in testing_in_python
Тут скорее вопрос могут ли функции использовать дефолтные фикстуры pytest без явной передачи их в функцию, @twistedsonnet верно понял вопрос?
источник

BS

BLVCK SONNET in testing_in_python
именно
источник

BS

BLVCK SONNET in testing_in_python
есть ли такой механизм в pytest?
источник

АК

Александр Кот... in testing_in_python
Да, и пример кода привели какой был, какой станет. Я не знаю ответа, подпишусь на тред. :)
источник

BS

BLVCK SONNET in testing_in_python
Пока у меня одна идея, сущность Suite(например) с синглтоном под капотом, фикстура поднимающая инстанс перед сессией, все остальные фикстуры будут общаться с этим инстансом. Таким образом мы получим то, что хотели, но механизм пишем сами) Типо того:

async def send_request(data, method):
   url = Suite().testing_service_base_url
   # do some trash
источник

АК

Александр Кот... in testing_in_python
Можно сделать еще более явно: переопределить класс Session() и посоздавать фикстуры с разными base_url и базовыми хедерами/параметрами при необходимости
Получится что-то вроде service_name.get(‘/endpoint’) вместо requests.get(‘https://base_url/endpoint’)
источник

BS

BLVCK SONNET in testing_in_python
да, но как достучаться до фикстуры или до переопределённой сессии без бередачи объектов в вспомогательную функцию?
источник

АК

Александр Кот... in testing_in_python
так если вместо send_request() у вас уже будет готовая фикстура-сессия со всеми нужными параметрами - то вам почти не придется ее никуда внутрь передавать, все обращения будут уже к your_service.post(), your_service.get()
источник

АК

Александр Кот... in testing_in_python
передавать ее придется только в сам тест
def test(your_service):
источник

АК

Александр Кот... in testing_in_python
Но сам вопрос безусловно хороший. И хочется тоже на него узнать ответ :) Потому что такой сессии как я описал - не всегда хватает)
источник

СС

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

АК

Александр Кот... in testing_in_python
но тогда надо передавать request :)
источник

СС

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

АК

Александр Кот... in testing_in_python
пришла идея: можно создать сессионные фикстуры и записать в них глобальную переменную, вызывая ее локально в тестах и в функциях - но это совсем не по канонам
источник

BS

BLVCK SONNET in testing_in_python
всё, я снаркоманился

import inspect

def get_fixture_by_name(name: str):
   for frame in inspect.stack():
       if frame.function.startswith('test_'):
           if name in frame[0].f_locals:
               return frame[0].f_locals[name]
           else:
               raise UserWarning(
                   f'{frame.function} has no argument named {name}')
   raise UserWarning('No one test-case found in stack')


def some_shit_without_fixture_passing():
   service = get_fixture_by_name('service')
   # do it
источник

T

Tishka17 in testing_in_python
почему бы не сделать класс?
источник

T

Tishka17 in testing_in_python
и уже экземпляр этого класса пусть инициализируется фикстурами
источник

BS

BLVCK SONNET in testing_in_python
не вижу необходимости, учитывая то, как я буду это использовать
источник

T

Tishka17 in testing_in_python
ну тогда partial
источник

T

Tishka17 in testing_in_python
боюсь представить как
источник