12. Что такое фикстура?
любой объект с тремя стадиями:
инициализация
участие в исполнении теста
удаление
def test_ok(fixture1, fixture2):
...
f1 = fixture1()
f2 = fixture1()
test_ok(f1, f2)
del f1
del f2
разный срок жизни
функция
модуль
сеанс
13. Преимущества
тест – это функция
однозначная зависимость от фикстур:
def test_buy(user, goods, cache, auth)
def test_auth_failture(user, auth)
независимость тестов
настоящее переиспользование кода
14. REST-микросервис
Фикстура – сервис авторизации
не надо мокать, все запросы уходят в localhost
app = Flask(__name__)
@app.route("/user/auth")
def endpoint_auth(requrest):
return jsonify({
'user': {'name': 'User Name', 'status': 'active'}
})
@pytest.yield_fixture(scope="session")
def fix_auth():
from multiprocess import Process
p = Process(app.run, "127.0.0.1", 9001, True)
p.start()
yield app
p.terminate()
15. Изображения
Фикстура для подготовки изображений
@pytest.yield_fixture(scope="functions")
def fix_avatar():
path = "~/some/path/avatar.png"
avatar = PIL.Image(path)
yield avatar
os.unlink(path)
17. Параметрические
фикстуры
заменяют циклы
легко добавить еще один случай
справится ли приложение с аватарой 1x1, 128x1,
5000x5000?
@pytest.fixture(scope="function",
params=[(1, 1), (128, 1), (5000, 5000)])
def fix_avatar((w, h)):
path = "~/some/path/avatar.png"
avatar = PIL.Image(path, (w, h))
...
18. Выводы
писать и поддерживать тесты стало легче
меньше копипасты
на борту фреймворка много других фишек
слова коллеги, который с давно питоном: "не думал,
что Пайтест меня так удивит"