问题标签 [spring-cloud-contract]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring Cloud Contract:从场景中的先前响应中获取参数
我在 Spring Cloud Contract 中编写了场景。在第一次请求时,我的应用程序返回令牌作为响应,第二个请求应包含此令牌。是否有可能将值从第一个响应传递到第二个请求?
现在我在测试中使用另一个令牌生成器实现,它返回预定义的令牌,但我想删除它并使用真正的令牌生成器。
场景示例:
1_getToken.groovy
2_addSmth.groovy
即我想将参数“token”从第一个响应传递到第二个请求。可能吗?
spring-cloud-contract - 如何验证地图的值不为空
假设我在 groovy 中指定了这样的合同:
}
现在我想测试映射是否包含字符串到字符串条目,其中值不能为空。地图本身可能是空的。
如何测试动态键名?
json - 如何检查每个数组项中是否存在该字段并且非空
假设我有这样的合同:
的测试"profile" : regex(nonEmpty())
仅检查是否存在至少一个具有profile
非空属性的数组条目。
我想测试所有条目都有一个非空的profile
.
我已经使用测试匹配器尝试过这个:
虽然这会检查每个profile
字段是否为非空,但它不会检查这样的字段是否确实存在。
如何测试profile
每个数组条目中是否存在一个字段并且每个字段都不为空?
spring-security - spring cloud 合约:用户注册测试
我正在为 BCryptPasswordEncoder 和 groovy 合约而苦苦挣扎
我有一个生产者和一个消费者服务,生产者发送一条带有用户注册信息的消息(即用户和密码(使用 BCryptPasswordEncoder(12) 编码)。测试是使用加密的密码创建消息,这没关系,但是我的问题是:1.是否可以加密合约中的密码?2.如何加密?3.如果可以,我该如何设置 BCryptPasswordEncoder(12)?
在从生产者运行测试(mvn clean install)时,验证失败,因为加密密码<>合约中定义的普通密码
谢谢!
更新 我已经将一个示例上传到 github https://github.com/dssantana/user-registration 如果您运行 mvn clean install,您会发现在某一时刻,其中一个测试失败并出现类似于以下的错误:
2017-12-18 11:55:36.056 INFO [user-client,,,] 5236 --- [main] .eucUserAccountRegistrationController : UserAccountRegistrationController - UserAccountRegister: AccountRegistration(firstName=Diego, lastName=Santana, email=dssantana@gmail.com , 手机号码=0452621048, ipAddress=127.0.0.1, 生日=1979-10-16, 密码=$2a$12$jm3YACnf72P3wKCmPLRXwufeXJx5lzibwLz3DzhCXft.XKW2bK1RC) [错误] 测试运行:2,失败:0,错误:2,跳过:0,经过时间:6.935 秒 <<< 失败!- 在 au.net.example.userclient.ContractVerifierTest [错误] validate_shouldSendAnAccountRegistrationMessageWithSpecialCharactersUsername(au.net.example.userclient.ContractVerifierTest) 经过时间:0.426 秒 <<< 错误!java.lang.IllegalStateException: 解析 JSON [{"firstName":"Joe","lastName":"Doe","email":"joe.doe+test@gmail.com","mobileNumber":"0452621048", "ipAddress":"127.0.0.1", "birthday":"1979-10-16", "password":"$2a$12$fZcEe6fUzmjHmItvsJ8MCOCOR.mnc2nbDqh/Ce1aYzUBRq5L8ywRm"}] 与 JSON 路径不匹配 [$[? (@.['password'] == 'Test01')]] 在 au.net.example.userclient.ContractVerifierTest.validate_shouldSendAnAccountRegistrationMessageWithSpecialCharactersUsername(ContractVerifierTest.java:49) [错误] validate_shouldSendAnAccountRegistrationMessage(au.net.example.userclient.ContractVerifierTest) 已用时间:0.323 s <<< 错误!java.lang.IllegalStateException: 解析 JSON [{"firstName":"Diego","lastName":"Santana","email":"dssantana@gmail.com","mobileNumber":"0452621048","ipAddress": "127.0.0.1", "birthday":"1979-10-16","password":"$2a$12$jm3YACnf72P3wKCmPLRXwufeXJx5lzibwLz3DzhCXft.XKW2bK1RC"}] 与 JSON 路径不匹配 [$[?(@.['password '] == 'Test01')]] 在 au.net.example.userclient。
加密的密码是Test01,应该与合约测试中的普通密码匹配,但是我不确定如何验证,这是一种加密方式,验证的方法是将合约数据与测试数据进行加密和匹配。
spring - 消费者端合约云测试配置困难
我正在尝试使用 spring cloud contract 来测试我的 REST API。我正在按照本教程https://cloud.spring.io/spring-cloud-contract/中描述的说明进行操作, 我正在使用 groovy 编写我的单个基础测试类。
我的休息控制器类:
我的合同存根
还有我的基类:
在构建之后,我得到了以下堆栈跟踪
我不知道无法识别这些端点的原因是什么。
编辑 我添加了生成的测试
spring-boot - Spring Cloud Contract - 没有名为“验证”的 bean 可用
我有一个运行 Spring Cloud 合约的 Spring Boot 应用程序
messageTest.groovy
我的测试失败了,当我查看构建文件夹中生成的测试时,
上面的这一行不断抛出异常
我究竟做错了什么?
它看起来像它的注射SpringIntegrationStubMessages
而不是StreamStubMessages
......
我使用 Spring Boot 1.5.8 和 spring cloud starter kafka
maven - Spring Cloud Contract 未部署到 Maven 多模块项目中的 Artifactory
我有一个多模块项目,其中每个模块都可以很好地部署到 Artifactory,直到我将 spring-cloud-contract-maven-plugin 添加到其中一个模块(服务,因为它是生产者 API)。
该项目具有以下结构:
未来我们想去掉client和common,在consumer中有Feign客户端来减少耦合,并且有一个没有内部模块的基本项目,但是现在我们必须保持这个结构。
我首先注意到存根没有被推送到 Artifactory,所以我最初的解决方法是将它添加到 Jenkins 管道中
它部署服务和存根,但我注意到执行此命令时没有部署任何模块:
这是输出的结尾:
我试图将所有 Maven 配置移动到父 POM 文件中,并将合同和基本测试类保留在服务模块中。我查看了解释如何配置插件的这个页面,我看到我可以使用contractsDirectory来指定合同文件的目录,gmavenplus-plugin来指定生成的测试的目录和packageWithBaseClasses来指定包基类。但是我看不到任何指定基类目录的方法。我无法将基本测试类移动到父类,因为它们使用服务模块的某些类来生成模拟。
有什么办法吗,或者我必须为合同创建一个单独的项目?
提前致谢
spring-cloud-contract - json 文件中的正则表达式作为响应正文提供
我想在一个单独的 json 文件中为我的合同指定响应正文,其中一个返回的字段包含一个生成的数据库 ID,每次运行单元测试时它都不同。我的想法是使用正则表达式来确保该字段存在并且该值是一个数字,但我没有找到一种方法,因此生成的合同测试会进行正则表达式匹配。
这是我对 Json 可能是什么样子的想法
定义合同时,有没有办法(语法)在 json 文件中提供正则表达式?
spring-cloud - 消息生产者的 Spring Cloud 合约
我正在使用 spring cloud contract 来获取消息,如中所述
一切都按照文档中的描述工作。
我有一种情况,我的triggerBy 方法在同一通道上引发了两条消息(例如,要发送给两个不同方的SMS)并且我无法正确断言这两条消息。消息以随机顺序接收,有时测试用例通过,有时失败。
我需要一种方法来正确断言这两个消息。
spring-cloud-contract - 升级到 Spring Cloud Contract 1.2.0 后基类不再工作
我正在升级到 Spring Cloud Edgware.RELEASE,我有一个关于如何正确设置 Spring Cloud Contract 测试的基类的问题。以下是我目前通过 Dalston.SR5 工作的基类:
升级到 Edgware.RELEASE 后,我的问题import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc;
不再解决,这令人困惑。Spring Cloud Contract 文档指出“默认情况下,Rest Assured 3.x 被添加到类路径中”(参见http://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.2.0.RELEASE /single/spring-cloud-contract.html#maven-rest-assured),并且给出的示例显示了如何将 Rest Assured 2.x 与<groupId>com.jayway.restassured</groupId>
依赖项一起使用。但是,<artifactId>spring-cloud-starter-contract-verifier</artifactId>
for 1.2.0.RELEASE 引入了<groupId>io.rest-assured</groupId>
依赖项。鉴于文档,我希望这些com.jayway...
罐子能够得到解决。
我的基类方法在升级到 1.2.0.RELEASE 后是否仍然有效,如果是,我是否需要将com.jayway...
依赖项显式添加到我的 pom.xml 文件中?如果是这样,如果文档说明了这一点,将会很有帮助。