我有以下spring cloud合同:
package contracts.teams
import org.springframework.cloud.contract.spec.Contract
Contract.make {
name"d Find team roles by filters"
description "Find team roles by filters"
request {
method "POST"
url "api/team/findTeamRolesByFilters"
headers {
contentType applicationJson()
accept applicationJson()
header"Authorization", execute('bearerOfAccessToken()')
}
body execute('getRequestForFindTeamRolesByFilters()')
}
response {
status OK()
headers {
contentType applicationJson()
}
body execute('getResponseForFindTeamRolesByFilters()')
}
}
为了从服务器生成动态响应,我在响应处调用get响应。例如,原因可能是来自数据库的自动生成的id。从get响应ForFindTeamRletByFilters()生成的字符串是一个有效的JSON,不幸的是,它被忽略,并且在测试运行时返回始终为true。
当我用如下静态响应替换execute方法时,我注意到了这一点:
"""
{
"success": "false"
}
"""
在这种情况下,响应被正确验证,如果不匹配,则测试失败。我所说的正被测试生成的代码所证实,如图所示:
// then:
assertThat(response.statusCode()).isEqualTo(200);
assertThat(response.header("Content-Type")).matches("application/json.*");
// and:
DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
getResponseForFindTeamRolesByFilters();
正如你所见,没有断言。它只调用生成json的方法。
我该如何让测试检查动态json响应?谢谢!
为了从服务器生成动态响应,我在响应处调用get响应。
您不应该这样做。合同测试不应该访问数据库。
对于消费者,你应该这样做
request {
method "POST"
url "api/team/findTeamRolesByFilters"
headers {
contentType applicationJson()
accept applicationJson()
header"Authorization", execute('bearerOfAccessToken()')
}
body $(producer(execute('getRequestForFindTeamRolesByFilters()')), consumer("some value to be put on the consumer side"))
}
对于制片人来说
response {
status OK()
headers {
contentType applicationJson()
}
body $(producer(execute('getResponseForFindTeamRolesByFilters()')), consumer("something in the stub"))
}
关于本话题请先参考验证契约一节的介绍。 使用rake pact:verify 使用pact:verify任务是最常见的验证契约的方式。这也是配置你的服务提供者应遵守的契约的默认集之处。 在Rakefile中引入'pact/tasks'就可以使用了。 # In Rakefile require 'pact/tasks' # Remember to add it to your default Ra
“验证契约”是Pact测试过程中的第二步。契约文件中的每个请求会在提供者上进行重放,所返回的响应将会被用于与契约文件中的期望响应进行对比,如果两者匹配,我们就可以确信消费者和提供者能够保持兼容。 要验证契约,应该这样做: 配置待验证契约的位置。可以是一个HTTP URL,也可以是一个本地文件系统路径。 在提供者状态中预置数据。 (可选项)对将被用于播放请求的服务提供者应用进行配置。 关于如何在代码
每个人 因此,我有一个SpringBoot应用程序,它带有一个控制器,该控制器有几种方法,将以下POJO作为参数: 对于其中一个控制器endpoint,我想应用额外的验证逻辑,因此在我添加了以下内容: 是我想要应用的约束注释。 我的问题是,只有在中定义的检查成功通过时,才会调用此附加约束。如果为空,约束将被忽略,客户端将收到不完整的验证结果。我错过了什么?
使用方法创建新资源时,将新资源的位置添加到响应中,作为标头。 如何创建一个spring云契约YML来验证响应是否包含头,并将有效的作为其值? 我试过下面的YAML,但它不工作。 生成测试代码 生成的代码不包含任何头验证。
我知道rest assure中有很多关于验证的信息,但不幸的是,我无法找到我的问题的确切解决方案。 我正在训练以验证以下JSON的响应: 具有以下代码: 期望值返回 g1 和 g2 的列表。 我得到的错误是: 我怎样才能做到这一点?
我已经在一个Spring Boot项目中创建了一个Spring云契约存根()。希望调用此存根的客户机不是Spring项目,也不可能是Spring项目。如果我在客户端中运行以下命令: 然后我得到一个错误 显然,我没有,因为这不是一个Spring Boot项目。 这里有什么变通办法?