当前位置: 首页 > 知识库问答 >
问题:

如何以及是否使用Pact测试语法(错误请求)验证?

汪晟睿
2023-03-14

我开始使用契约(Java)进行合同测试。

我读过关于Pact最佳实践的合同测试与功能测试,但我有点困惑。

示例:一个简单的RESTendpoint,它创建了一个资源(POST),返回了一个在成功时创建的201和400个错误的语法验证请求。请求正文类似于:

{
    "firstname" : "Foo",
    "lastname" : "Bar"
}

firstnamelastname都不能为空。据我所知,我可以在这里编写3个场景,其中提供者应该返回400错误请求:

  1. lastname为空,lastname不为空

问题是,如果只定义了“快乐路径约定”,模拟服务器会返回500个内部服务器错误,如果我想让它返回400个错误请求,我必须编写所有可能的约定。此外,如果我添加具有相同验证规则的其他字段,则约定的数量会爆炸。

  • 首先,我应该在我的消费者身上测试这些场景吗

非常感谢。

共有2个答案

孔磊
2023-03-14

在您的案例中,功能与合约讨论的核心信息是:那些不愉快路径的排列属于您的提供者代码,因为这就是逻辑所在。

正如@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 
潘璞瑜
2023-03-14

当我为帖子建立合约时,我关心服务器接受有效输入以及服务器对错误输入的响应方式(通常为400)。没有必要为输入无效的所有可能方式签订合同,主要是因为这可能会由于无数的原因而发生。

因此,从消费者的角度来看,我通常只有一个无效输入的合同,除非我面临一个非常特殊的情况,服务器可能会根据故障原因做出不同的响应,并且我关心不同的响应。

针对您的具体情况,只为上述三种场景中的一种编写合同。

 类似资料:
  • 问题内容: 我正在使用Passport.js进行身份验证(本地策略),并通过Mocha和Supertest进行测试。 如何使用Supertest创建会话并发出经过身份验证的请求? 问题答案: 您应该为此使用超级代理。它是较低级别的模块,由。看一看持久代理: 现在,您可以用来发出经过身份验证的请求。

  • 问题内容: 我正在提出请求,然后在我中止之后。 问题在于它执行函数并返回空数据… (此处为示例) 是否有jQuery方法可以中止?或有没有办法检查是否被中止? 问题答案: 我发现这里的将状态恢复。似乎是jQuery 1.4+错误。从1.3开始,它称为错误处理程序。

  • 问题内容: 我正在尝试利用node-request模块,但是文档不是那么好。如果我请求有效资源并将其通过管道传输到可写流,则一切正常。但是,如果我向无效对象发出请求,则仍会创建可写流。例如,使用以下代码段: 如果服务器上存在foo.jpg资源,则将数据通过管道传输到流,并在服务器上创建文件。但是,如果服务器 上不 存在foo.jpg ,则仍将创建一个空白容器文件。似乎没有错误事件或可以用来确定请求

  • 我使用的是Laravel 5.4。我有一个自定义表单请求类,其中有我的验证规则和消息,我在控制器中使用它,如下所示: 我正在使用ajax发送请求,当出现任何验证错误时,Laravel会抛出一个带有422状态码的HTTP响应错误,其中包括验证错误的JSON表示。 但我不想那样。相反,在我的控制器的方法中,我想找出是否有任何验证错误,如果有,那么我想返回一个带有一些额外数据的响应以及验证消息,如下所示

  • 问题内容: 我想检查服务器端是否对我的php页面的请求是ajax请求。 我看到了两种方法可以做到这一点: 第一种方法:在请求中发送一个参数,该参数告诉页面这是AJAX请求(= ) mypage.php: 第二种方式:将标头设置为: 客户端js: mypage.php: 事实是,这两种方法很容易被黑,因此检查我是否收到这样的AJAX请求并不安全。 如何检查我是否收到AJAX请求? 问题答案: 没有确

  • 问题内容: 我正在用golang编写HTTP处理程序的单元测试。在查看代码覆盖率报告时,我遇到了以下问题:从请求中读取请求正文时,可能会返回我需要处理的错误。但是,当我为我的处理程序编写单元测试时,我不知道如何以触发该错误的方式将请求发送到我的处理程序(内容的结尾过早似乎不会产生这样的错误,但是会在解体身体)。这就是我想要做的: 我该如何为不存在的情况编写测试用例? 问题答案: 您可以创建和使用伪