Можно ли комбинировать http / rest контракты с amqp? - PullRequest
0 голосов
/ 28 января 2019

В настоящее время у меня есть система с 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 Ответ

0 голосов
/ 28 января 2019

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

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

...