Можно ли комбинировать 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, определенном в вопросе (например, вы можете передать имя, описание, запрос из параметров).

Вот несколько примеров.

Другие вопросы по тегам