Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2020 20:31:20

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Вкл/Выкл vcrpy через переменныe окружения

Здравствуйте,

Есть некий сервис и набор тестов (почти интегрейшн), записаны кассеты с запросами/ответами вместо реальных http запросов. Используется библиотека pytest-recording, а та в свою очередь использует vcrpy.
Тесты, которые надо запускать с vcr, маркируются декоратором @pytest.mark.vcr. Реальные урлы и ключи можно передать через переменные окружения. А вот можно ли как-то выключать vcr через переменную окружения, чтобы выполнялись реальные запросы когда нужно? (при этом vcr не должен записывать новые кассеты, то есть как бы флаг для его отключения). Естественно, хочется сделать с минимальными изменениями кода тестов



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#2 Ноя. 18, 2020 23:56:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Вкл/Выкл vcrpy через переменныe окружения

Master_Sergius
Естественно, хочется сделать с минимальными изменениями кода тестов
С нулевыми изменениями кода тестов это можно сделать, создав дополнительную систему.

Чтобы выполнить запросы с кассетами, ты запускаешь обёртку, которая по умолчанию напрямую запускает эти тесты.
Чтобы выполнить запросы без кассет, ты запускаешь обёртку с параметром, которая из-за этого параметра запускает не эти тесты, а их копии с отключенным vcr.
А эти копии тестов генерируются из текущих тестов при каждом запуске обёртки с параметром.

То есть ты не меняешь тесты вообще, а запускаешь их через обёртку, которая при заданном параметре переключается на совершенно другую систему запуска совершенно других тестов, которые создаются из существующих тестов.



Офлайн

#3 Ноя. 19, 2020 22:40:59

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Вкл/Выкл vcrpy через переменныe окружения

Немного не понял: надо еще продублировать тесты? Чтобы были одна копия с этим маркером vcr, а другая - без? Или как?



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#4 Ноя. 19, 2020 23:39:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Вкл/Выкл vcrpy через переменныe окружения

Master_Sergius
Немного не понял: надо еще продублировать тесты? Чтобы были одна копия с этим маркером vcr, а другая - без?
Да. Только эти тесты с vcr ты сам пишешь руками, а клоны без vcr генерируются из исходных тестов сами через транслятор и кладутся рядом, а потом запускаются. При каждом запуске они будут создаваться (это чтобы они не устаревали). Транслятор ты создаёшь, естественно.

Можешь поискать опцию. Может быть, она там есть. Я посмотрел поверхностно доки, не нашёл ничего там на первый взгляд. Оно и так там на соплях всё сделано, а ты ещё хочешь полный набор опций.

Но общий подход такой.
Например, тебе нужна какая-то опция, а её там нет. Ты будешь сидеть без этой функциональности? Не, ты просто берёшь и делаешь это себе. Это и есть программирование - создание чего-то из ничего, из пустоты. Тулинг.

Естественно, то, что там уже есть, ты не трогаешь и не меняешь, тем более эту систему, которая предоставляет возможность записывать сетевые запросы. При обновлении самой системы у тебя просто всё, что ты наменяешь там, сотрётся. Поэтому ты делаешь стороннюю систему, которая прикрепляется сбоку к тому, что уже есть, и делает что-то допольнительное.



Отредактировано py.user.next (Ноя. 19, 2020 23:47:34)

Офлайн

#5 Ноя. 20, 2020 18:37:37

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Вкл/Выкл vcrpy через переменныe окружения

Ладно, допустим. А можно как-то отключить ту vcr fixture, ну вот она стоит autouse=True в самой библиотеке, которая ставится через pip и, соответственно, код библиотеки изменить я не могу?



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#6 Ноя. 23, 2020 18:32:01

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Вкл/Выкл vcrpy через переменныe окружения

Наверное, autouse fixture нельзя отключить, по крайне мере, я не нашел как. Зато нашел другое решение - использовать плагин pytest-vcr вместо pytest-recoding: фактически все то же самое, зато есть флаг –disable-vcr, делает то, что мне нужно. Вопрос можно считать закрытым. Спасибо.

И еще одно, оказывается, фикстуры можно переопределять )



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Ноя. 23, 2020 19:43:56)

Офлайн

#7 Окт. 27, 2023 12:05:26

kelseyradley
Зарегистрирован: 2023-08-29
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Вкл/Выкл vcrpy через переменныe окружения

По крайней мере, я не нашел способа отключить навесное, самодействующее устройство. Нашел альтернативное решение — использовать плагин pytest-vcr вместо pytest-recoding. На самом деле это то же самое, но есть флаг —disable-vcr, который выполняет мои требования. Проблема может быть решена. Спасибо.

Кроме того, оказывается, что фикстуры могут быть переопределены. 
tunnel rush 

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version