如何以及是否使用 Pact 测试句法(错误请求)验证?
How and if test syntactic (bad request) validation with Pact?
我开始使用 Pact(在 Java)进行合同测试。
我已阅读 Contract Tests vs Functional Tests Pact 最佳实践,但我有点困惑。
示例:创建资源的简单 REST 端点 (POST),returning 201 Created on success 和 400 Bad Request for syntactic验证错误。
请求正文类似于:
{
"firstname" : "Foo",
"lastname" : "Bar"
}
firstname
和lastname
都不能为空。据我所知,我可以在这里写 3 个场景,其中提供者应该 return 400 Bad Request:
firstname
是空白,lastname
不是空白
firstname
不是空白,lastname
是空白
firstname
和 lastname
都是 空白
问题是模拟服务器 return 是一个 500 内部服务器错误,如果只定义了 "happy path pact",如果我想让它 return 400 错误请求我有写下所有可能的契约。此外,如果我添加另一个具有相同验证规则的字段,协议数量就会激增。
- 首先,我应该在我的消费者身上测试那个场景吗?
- 如果是,是否存在使用 Pact DSL 实现它的巧妙方法?
谢谢。
当我为 POST 建立合同时,我关心服务器接受有效输入以及服务器对错误输入的响应方式(通常为 400)。没有必要为输入可能无效的所有可能方式制定合同,主要是因为无数种原因都会导致这种情况发生。
所以,从消费者的角度来看,我通常只有一个无效输入的合同,除非我面临一个非常特殊的情况,即服务器可能会根据失败的原因做出不同的响应,并且我关心不同的反应。
根据您的具体情况,只为上述三种情况中的一种写一份合同。
在您的案例中,功能与契约讨论的核心信息是:那些不愉快路径的排列属于您的提供者代码,因为那是逻辑所在。
正如@fabricio-lemos 所说,您只需要封装一个 400 错误请求的示例来证明您的代码可以处理这种情况。
至于 500 错误,这可能是因为您没有为每个测试设置一个预期的交互(通过 Pact DSL)。如果您在注册预期交互之前访问 Pact 模拟服务器,您将获得 500。
在伪代码中,您的测试结构可能类似于
Describe "User API"
BeforeAll
setup Pact mock server
AfterEach
verify and clear interactions
With valid request
setup 201 interaction
run tests
With invalid request
setup 400 interaction
run tests
我开始使用 Pact(在 Java)进行合同测试。
我已阅读 Contract Tests vs Functional Tests Pact 最佳实践,但我有点困惑。
示例:创建资源的简单 REST 端点 (POST),returning 201 Created on success 和 400 Bad Request for syntactic验证错误。 请求正文类似于:
{
"firstname" : "Foo",
"lastname" : "Bar"
}
firstname
和lastname
都不能为空。据我所知,我可以在这里写 3 个场景,其中提供者应该 return 400 Bad Request:
firstname
是空白,lastname
不是空白firstname
不是空白,lastname
是空白firstname
和lastname
都是 空白
问题是模拟服务器 return 是一个 500 内部服务器错误,如果只定义了 "happy path pact",如果我想让它 return 400 错误请求我有写下所有可能的契约。此外,如果我添加另一个具有相同验证规则的字段,协议数量就会激增。
- 首先,我应该在我的消费者身上测试那个场景吗?
- 如果是,是否存在使用 Pact DSL 实现它的巧妙方法?
谢谢。
当我为 POST 建立合同时,我关心服务器接受有效输入以及服务器对错误输入的响应方式(通常为 400)。没有必要为输入可能无效的所有可能方式制定合同,主要是因为无数种原因都会导致这种情况发生。
所以,从消费者的角度来看,我通常只有一个无效输入的合同,除非我面临一个非常特殊的情况,即服务器可能会根据失败的原因做出不同的响应,并且我关心不同的反应。
根据您的具体情况,只为上述三种情况中的一种写一份合同。
在您的案例中,功能与契约讨论的核心信息是:那些不愉快路径的排列属于您的提供者代码,因为那是逻辑所在。
正如@fabricio-lemos 所说,您只需要封装一个 400 错误请求的示例来证明您的代码可以处理这种情况。
至于 500 错误,这可能是因为您没有为每个测试设置一个预期的交互(通过 Pact DSL)。如果您在注册预期交互之前访问 Pact 模拟服务器,您将获得 500。
在伪代码中,您的测试结构可能类似于
Describe "User API"
BeforeAll
setup Pact mock server
AfterEach
verify and clear interactions
With valid request
setup 201 interaction
run tests
With invalid request
setup 400 interaction
run tests