不知道我错过了什么。
我的Pojo-
@EqualsAndHashCode
@RequiredArgsConstructor
@Builder(toBuilder = true)
@JsonDeserialize(builder = DataModel.DataModelBuilder.class)
public class DataModel {
@JsonProperty("name")
private final String name;
@JsonProperty("price")
private final double price;
}
契约-
{
"provider": {
"name": "DataProvider"
},
"consumer": {
"name": "DataConsumer"
},
"interactions": [
{
"description": "a request for json data",
"request": {
"method": "GET",
"path": "/get/ice/2.0"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json; charset\u003dUTF-8"
},
"body": {
"price": 10,
"name": "some name"
},
"matchingRules": {
"header": {
"Content-Type": {
"matchers": [
{
"match": "regex",
"regex": "application/json(;\\s?charset\u003d[\\w\\-]+)?"
}
],
"combine": "AND"
}
}
},
"generators": {
"body": {
"$.name": {
"type": "ProviderState",
"expression": "\\${name}",
"dataType": "STRING"
},
"$.price": {
"type": "ProviderState",
"expression": "\\${price}",
"dataType": "FLOAT"
}
}
}
},
"providerStates": [
{
"name": "some state"
}
]
}
],
"metadata": {
"pactSpecification": {
"version": "3.0.0"
},
"pact-jvm": {
"version": "3.6.15"
}
}
}
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Provider("DataProvider")
@PactFolder(value = "pact")
public class ContractVerificationTest {
@TestTemplate
@ExtendWith(PactVerificationSpringProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context) {
context.verifyInteraction();
}
@State("some state")
void testPact() {
}
}
您没有在提供程序测试中从提供程序状态注释返回值(名称、价格)(当前没有执行任何操作),因此当Pact尝试在请求中动态替换值时,这些值是空的。
您实际上需要它们首先由提供者生成吗?
有关如何使用和修复的详细示例,请参见https://pactflow.io/blog/injecting-values-from-provider-states/。
.queryParameterFromProviderState("accountNumber", "\${accountNumber}", "100")
.valueFromProviderState("price", "\\${price}", 10.0)
我正在尝试使用pact jvm进行用户驱动合约测试,并且能够生成用户端合约文件。在提供者端验证过程中,如何提供公共API而不是localhost大多数示例只使用localhost作为提供者,请提供帮助
我试图将字符串时间戳转换为整数时间戳,并使用postgres作为数据库。
我是一个新的pact学习者,我想知道当提供程序验证时我应该输入什么 对于提供程序验证,我应该将提供的目标填充为本地主机,或者代替本地主机,我也可以输入实际环境的主机?哪种场景最适合合同测试?
我正在使用Pact进行消费者驱动的合同测试。在我的usecase中,我的消费者“some-market-service-consumer”正在使用提供者“market-service”。在某个市场服务消费者处“产生”的合同如下所示: 在provider-site上,我正在使用Pact-Provider-Verifier-Docker'。以下是我的测试结果: 看起来,好像测试工作良好-“电话”被测试
我们有一个提供程序测试,只是在Jenkins上失败了,这阻止了我的调试。 (有些省略……) 交互在pact文件中如下所示: 我的印象是名称应该匹配type而不是确切的值,而且在diff中似乎有一个“name”字段。