Spring boot Spring Cloud Contract-查询参数Contract始终与同一个Contract匹配
我正在处理SpringCloudContract,有一个用例,我希望在缺少几个查询参数时响应为BAD_请求,在所有必需的查询参数都存在时响应为OK。为了实现这一点,我有不同的合同(groovy文件)来满足每一个这样的请求/响应。但是,当我从消费者(带/不带查询参数)进行测试时,无论查询参数是否存在,所有这些都只与1个契约匹配 以下列出的合同 两个查询参数都不存在Spring boot Spring Cloud Contract-查询参数Contract始终与同一个Contract匹配,spring-boot,groovy,spring-boot-test,wiremock,spring-cloud-contract,Spring Boot,Groovy,Spring Boot Test,Wiremock,Spring Cloud Contract,我正在处理SpringCloudContract,有一个用例,我希望在缺少几个查询参数时响应为BAD_请求,在所有必需的查询参数都存在时响应为OK。为了实现这一点,我有不同的合同(groovy文件)来满足每一个这样的请求/响应。但是,当我从消费者(带/不带查询参数)进行测试时,无论查询参数是否存在,所有这些都只与1个契约匹配 以下列出的合同 两个查询参数都不存在 Contract.make { description("Test to see if authorisation works
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数B不存在
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数存在且响应正常
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath('/check/validate') {
queryParameters {
parameter 'a' : equalTo("AUTHORISED")
parameter 'b' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(200)
"body" "shouldReturn200OkValidRequest"
headers {
contentType('application/json')
}
}
}
问题:
你们的合同正在互相延长。每一个都比另一个更具体。您必须使用
priority()
方法来说明哪一个更具体。例如,最小的混凝土应具有最高的值优先级-优先级(100)
。最高优先级(1)
两个查询参数都不存在
Contract.make {
priority(100)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
}
Contract.make {
priority(50)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数B不存在
Contract.make {
priority(100)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
}
Contract.make {
priority(50)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数存在且响应正常
Contract.make {
priority(10)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath('/check/validate') {
queryParameters {
parameter 'a' : equalTo("AUTHORISED")
parameter 'b' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(200)
"body" "shouldReturn200OkValidRequest"
headers {
contentType('application/json')
}
}
}
+1感谢您的超级快速回复Marcin。我已经探索了这个使用优先级的选项,但希望确保它是为我的用例推荐的实现方式