Пакт-python: не выполняются соглашения с потребителями для вызовов POST

#python-3.x #pact #pact-python

#python-3.x #пакт #пакт-python

Вопрос:

Я пытаюсь создать пакты на стороне потребителя для конечной точки POST, используя библиотеку pact-python. Но он терпит неудачу с ошибкой «Пропущенные запросы».

Здесь нет клиентского кода, который вызывает POST API

 def create_user(request):
     return requests.post("http://localhost:1234/user", data=request).json()
 

Вот мой тестовый класс, который создает потребительские соглашения.

 class TestUserConsumer(unittest.TestCase):

def test_user_creation(self):
    request = {
        "name": "Micky",
        "age": 0
    }
    response = {
        "id": 1232,
        "name": "Micky",
        "age": 0
    }
    pact = Consumer("user_client").has_pact_with(Provider("user_server"))
    pact.start_service()
    pact.with_request(
        method='post',
        path='/user',
        body=request
    ).will_respond_with(status=200, body=response)
    with pact:
        create_user(request)
        pact.verify()

    pact.stop_service()
 

Тест не удался со следующей ошибкой.

 line 268, in verify
assert resp.status_code == 200, resp.text
AssertionError: Actual interactions do not match expected interactions for mock MockService.

Missing requests:
   POST /user
 

create_user (запрос) выполняется, но взаимодействия по-прежнему не записываются на макет сервера pact.

Примечание: Создание пактов GET API работает. Только сообщения терпят неудачу.

Ценю помощь.

Ответ №1:

Я понял проблему. Я не преобразовывал свой словарь в json перед отправкой запроса. Следовательно, формат тела запроса был неправильно отправлен. Это вызвало сбой на макетном сервере при проверке соглашения.

Я также заметил, что журналы изначально не создавались. Это было связано с моими утверждениями, добавленными перед остановкой сервера. Поскольку утверждения завершились неудачей, макет сервера pact не был остановлен. Следовательно, журналы вообще не генерируются. Как только я остановил сервер, были добавлены журналы, и это помогло мне определить проблему.