我正在使用Pact进行消费者驱动的合同测试。在我的usecase中,我的消费者“some-market-service-consumer”正在使用提供者“market-service”。在某个市场服务消费者处“产生”的合同如下所示:
{
"provider": {
"name": "market-service"
},
"consumer": {
"name": "some-market-service-consumer"
},
"interactions": [
{
"description": "Get all markets",
"request": {
"method": "GET",
"path": "/markets"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json; charset=utf-8"
},
"body": {
"markets": [
{
"phone": "HBiQOAeQegaWtbcHfAro"
}
]
},
"matchingRules": {
"$.headers.Content-Type": {
"regex": "application/json; charset=utf-8"
},
"$.body.markets[*].phone": {
"match": "type"
},
"$.body.markets": {
"min": 1,
"match": "type"
}
}
}
}
],
"metadata": {
"pact-specification": {
"version": "2.0.0"
},
"pact-jvm": {
"version": "3.3.6"
}
}
在provider-site上,我正在使用Pact-Provider-Verifier-Docker'。以下是我的测试结果:
WARN: Ignoring unsupported matching rules {"min"=>1} for path $['body']['markets']
.....
@@ -1,7 +1,7 @@
{
"markets": [
... ,
- Pact::UnexpectedIndex,
+ Hash,
]
}
Key: - means "expected, but was not found".
+ means "actual, should not be found".
Values where the expected matches the actual are not shown.
看起来,好像测试工作良好-“电话”被测试有效。但在这一点上,我不知道(预期的)“pact::undexpectedindex”是什么意思,以及它为什么会失败。这种预期从何而来,如何修复?
特别是我自己的版本,它使用了最近的外部依赖。
正如您在这个测试用例中看到的,这里使用pact::UndepretedIndex来指示数组是否比预期的长。我想它想说的是在数组的末尾有一个额外的散列。(我同意这一点并不清楚!这段代码是我写的,所以我为它的混乱性质道歉。原来编写pact代码最难的部分是编写有帮助的diff输出。)
该错误令人困惑的是,它应该允许您拥有额外的元素,因为您已经指定$.body.markets
的最小长度为1。也许docker验证器正在使用版本1匹配而不是版本2?
我用Spring创建了一个REST服务。现在我想使用pact和JUnit5来测试消费者-提供者-通信。我已经有一个正在运行的pact-broker(来自https://github.com/jaimeniswonger/pact-broker-openshift)。消费者测试工作良好,并公布了协议。provider-test加载这些并尝试验证它们。但测试仅在验证成功时才上载结果。我尝试用suref
我正在尝试使用pact jvm进行用户驱动合约测试,并且能够生成用户端合约文件。在提供者端验证过程中,如何提供公共API而不是localhost大多数示例只使用localhost作为提供者,请提供帮助
关于测试提供程序,我有几个问题: 在进行测试之前,是否需要启动提供程序服务?我应该在测试中到达实际的提供者endpoint吗?例如,假设我的提供者代码库上有一个GET/dogsendpoint。运行测试时,是否需要在本地启动服务,点击/dogsendpoint,然后用pact文件验证为该endpoint返回的响应? 如果我想将其作为配置项管道的一部分运行(我使用的是Circloci),那么有哪些最
我是新手。我的应用程序是一个spring boot应用程序。消费者在协议代理中创建了协议。现在我正在尝试从providers端运行测试,我正在使用gradle插件来运行测试。我有几个问题: > 使用者发布 协议没有指定任何状态。这意味着我不需要在提供者端使用任何stateChangeUrl? 我想实现的是:当我说pactVerify 服务器启动,我的Spring Boot应用程序应该在localh
使用pact-jvm-consumer-junit主体可以具有 从而生成合同文件: 使用pact-net或pact-provider-verifier验证合同显示以下消息:warn:忽略路径$['body']['x']的不受支持的匹配规则{“match”=>“integer”} 当前的pact-provider-verifier是否能够读取包含“match”:“integer”的契约。pact-p
我正在尝试在一个POST API(微服务)上应用契约测试。我已经编写了消费者端的测试用例,并且生成了协议,现在我正在尝试使用pact-python在提供者端验证协议。但我看不出有任何选项可以为API的POST调用输入输入体负载。到目前为止我有这个