Код Senior pytest и фикстуры обновлено
Порядок setup фикстур
Условие
Упрощённая модель pytest. fixtures: словарь имя → {"scope": ..., "deps": [...]}, скоупы session, package, module, class, function. requested: фикстуры, которые запросил тест, по порядку аргументов. Напишите setup_order(fixtures, requested):
- Если какая-то фикстура из словаря зависит от фикстуры с более узким скоупом, вернуть
["ScopeMismatch: <фикстура> -> <зависимость>"]для первой такой пары (фикстуры в порядке словаря, зависимости по порядку). - Иначе стабильно отсортировать
requestedпо скоупу от широкого к узкому и для каждой обойти в глубину: сначала зависимости по порядку, затем сама фикстура. Каждая фикстура один раз. Вернуть порядок setup.
Примеры
setup_order({"page":{"scope":"function","deps":["browser"]},"browser":{"scope":"session","deps":[]},"api":{"scope":"session","deps":[]}}, ["page", "api"]) // ["api", "browser", "page"]
setup_order({"user":{"scope":"function","deps":["api"]},"api":{"scope":"session","deps":["config"]},"config":{"scope":"session","deps":[]}}, ["user"]) // ["config", "api", "user"]
setup_order({"db":{"scope":"session","deps":["tmp_user"]},"tmp_user":{"scope":"function","deps":[]}}, ["db"]) // ["ScopeMismatch: db -> tmp_user"]
Как подойти
Подсказки: 2
- Сначала проверка скоупов по всем фикстурам словаря.
- sorted в Python стабилен: одинаковые скоупы сохранят порядок аргументов.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.