Можно ли комбинировать http/rest контракты с amqp?
В настоящее время у меня есть система с REST API, но она также публикует сообщения rabbitmq в другую систему.
В настоящее время у меня есть отдельные файлы groovy с контрактами для http и amqp, но я хочу сделать это в одном файле. То есть я могу проверить, что http запрос / ответ на API работает нормально, но я не могу проверить, было ли опубликовано сообщение amqp. Я должен создать дополнительный Groovy-файл с контрактом, который отправляет данные в контроллер с тем же вводом, что и в предыдущем тесте, и проверяет, действительно ли сообщение опубликовано.
Так что в настоящее время у меня есть один Groovy файл, как это для части REST:
Contract.make {
name("http_event_with_valid_token")
description ('A event is received with a valid token.')
request {
method 'POST'
url '/events/token'
headers {
contentType(applicationJson())
}
body("""
{
"parameter": "value"
}
""")
}
response {
status 202
}
}
И еще одна часть для AMQP:
Contract.make {
name("amqp_event_with_valid_token")
description( "A event is received with a valid token.")
input {
triggeredBy('controller.event("token", "{\\"parameter\\":\\"value\\"}")')
}
outputMessage {
sentTo 'exchange.events.events'
body("""
{
"parameter": "value"
}
""")
headers {
header('token': 'token')
}
}
}
Я хотел бы сделать обе проверки в одном файле Groovy, не создавая два отдельных теста. Это возможно?
1 ответ
Если вы хотите использовать один тест / набор тестов с параметрами, то я бы порекомендовал прочитать [Spock Framework][1]
, Это позволяет выполнить один и тот же тест с несколькими аргументами (ieparameters).
Возможно, вам придется немного изменить свой код для этого, но пример будет выглядеть так:
class HelloSpockSpec extends Specification {
def "length of Spock's and his friends' names"() {
expect:
name.size() == length
where:
name | length
"Spock" | 5
"Kirk" | 4
"Scotty" | 6
}
}
Вы можете определить несколько элементов контрактов, сохранить структуру и проверить статус ответа в вашем файле groovy, определенном в вопросе (например, вы можете передать имя, описание, запрос из параметров).
Вот несколько примеров.