Главное изменение в v3 — переезд с Ruby-бинарников на Rust FFI. Раньше библиотека тащила за собой Ruby-обёртки, теперь всё работает через нативную Rust-библиотеку, скомпилированную под разные платформы. Это дало поддержку Pact Specification v3/v4, нормальные мэтчеры и генераторы данных, async message testing для событийных архитектур.
Что появилось в API:
🔘Мэтчеры:
like(), each_like(), regex(), uuid(), each_key(), each_value()🔘Генераторы тестовых данных
🔘Асинхронные сообщения для Kafka/RabbitMQ и подобных
🔘Улучшенные ошибки при несовпадении контрактов
Пример как может выглядеть код:
from pact.v3 import Pact
pact = Pact("consumer", "provider")
(pact
.upon_receiving("a request for users")
.with_request("GET", "/users")
.will_respond_with(200)
.with_body({"users": like([{"id": 1, "name": "Alice"}])}))
Миграция с v2 потребует изменений — переименовали
set_state в state_handler, поменяли сигнатуры message handler'ов. Python 3.8 больше не поддерживается.Код в репо, документация на офф. сайте, установка как обычно
pip install pact-python.@zen_of_python