我正在研究Spring Cloud Contract,并且有一个用例,当缺少一些查询参数时,我希望响应为BAD_REQUEST,而当所有必需查询参数都存在时,我希望响应为OK。为了实现这一点,我有不同的合同(常规文件)来满足每个这样的请求/响应。但是,当我从使用者(带有/不带有查询参数)进行测试时,无论是否存在查询参数,所有这些都仅匹配1个合约。
下面列出的合同
两个查询参数都不存在
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')
}
}
}
查询参数B不存在
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')
}
}
}
问题:
我所有的测试用例都与第一种情况相匹配两个查询参数都不存在,而不是与具体情况相匹配。请让我知道我在想什么。
有人可以指向满足上述要求的有关查询参数的spring-cloud-contract文档。找到了这个http://cloud.spring.io/spring-cloud-contract/1.0.x/#_passing_optional_parameters,但是我需要上述要求的更多信息。
答案 0 :(得分:0)
您的合同正在彼此延长。每个都比另一个更具体。您必须使用priority()
方法来说明哪个比另一个更具体。例如。最不具体的应该具有最高的优先级-priority(100)
。最多-priority(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')
}
}
}
查询参数B不存在
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')
}
}
}