Несколько совпадений для тела запроса в wiremock

#java #spring #dropwizard #wiremock

Вопрос:

Недавно узнал о сопоставлении запросов в wiremock (http://wiremock.org/docs/request-matching/). Любопытно, что происходит, когда тело запроса совпадает с несколькими сопоставлениями (определено для одного и того же URL-адреса с разными условиями и возвращает другой ответ json)?

Ответ №1:

Технически, WireMock никогда не будет совпадать дважды-как только он найдет единственное совпадение, он вернет это совпадение. Основываясь на моем собственном тестировании с использованием отдельных файлов сопоставления, это обычно самое последнее добавленное сопоставление (я не знаю, как это работает с программным созданием заглушек, но я предполагаю, что последний добавленный заглушка будет сопоставлен и возвращен).

Чтобы избежать такого рода двусмысленности, есть несколько стратегий, которые вы можете использовать, но мой личный фаворит-использовать priority поле вместе с конкретным и общим отображением.

 {
  "priority": 1,
  "request": {
    "url": "/test",
    "queryParameters": {
      "search_term": {
        "equalTo": "WireMock"
      }
    }
  },
  "response": {
    "status": 201
  }
}
 
 {
  "priority": 10,
  "request": {
    "url": "/test",
    "queryParameters": {
      "search_term": {
        "matches": "*"
      }
    }
  },
  "response": {
    "status": 204
  }
}
 

Более подробную информацию о приоритете можно найти здесь.

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