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

如何测试RESTendpoint时使用JAVA回调?

商璞
2023-03-14

我想针对使用回调参数的RESTendpoint编写一些测试。可能听起来很困惑,所以这里有一个解释:

>

{“callbackURL”:http://localhost:609/test“}

服务器回复200和一些json

服务器向http://localhost:609/test/status(基于提供的回调URL),带有一些json负载

我使用TestNG和Rest assured(非强制性)构建了一个测试。我的问题是如何验证初始回复和在回调URL处接收的消息。我首先想到的一种(可能是幼稚的)方法是实现一个HTTP服务器,它侦听http://localhost:609/test/status,当有东西出现时,它会写入一个同步对象,测试从中读取并验证。但是,这听起来有点棘手(测试本地服务器将使用内部类等),而且很脆弱。有人能想出更好的办法吗?

共有2个答案

林富
2023-03-14

使用空手道。免责声明:我是开发者。

下面是一个示例(带有到源代码的链接),说明如何实现这一点:https://twitter.com/KarateDSL/status/1417023536082812935

我将试着用一种简单的方式解释这个图表。

  • 测试开始时,Test创建一个模拟HTTP服务器。这里的端口是动态的,但是如果客户端是远程的,您可以很好地将其硬编码为例如8080。因此客户端可以调用http://hostname/8080/send
别兴国
2023-03-14

从测试代码中启动本地HTTP服务器是一种简单的方法。有很多库可以做到这一点,例如WireMock:

http://wiremock.org/index.html

https://github.com/karatelabs/karate(空手道见“彼得·托马斯”的答案)

它在开发过程中工作得很好,但在现实世界中非常有限。测试管道通常无法从外部获得。它不能听什么。测试开发人员在NAT/防火墙后面的本地网络中工作。他将无法侦听来自临时或生产环境(在DMZ或云中运行)的请求。

更好的解决方案是使用模拟服务器。它必须侦听请求并记录此事件。测试将在下一步中向模拟服务器询问事件并对其进行验证。

可以使用基于云的模拟服务器,例如Postman或MockLab:

https://www.mocklab.io/docs/stubbing/

https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/setting-up-mock/

对于简单的用例,可以使用任何公共云提供商(如AWS)手动开发模拟服务器。测试必须部署一个小型Lambda函数,该函数侦听请求并将其放在S3存储中进行验证。AWS很可能不会为此用例向您收费。每月100万次请求是免费的:

https://aws.amazon.com/lambda/pricing/

或者可以将此逻辑作为正在测试的服务器的一部分来实现。

 类似资料:
  • 我的测试 在这个测试中,encrypt方法被命中两次。 尝试创建Expect时 在webclient.getwebrourge(transactionId)内部 不同之处在于当使用这两次时,它返回两个不同的值,测试失败。但是当使用时(没有IV),它两次返回相同的值。 我的问题是如何使用“AES/GCM/Nopadding”测试这个RESTendpoint?

  • 我不知道如何用ApacheCamel 3测试endpointrest。你能帮助我吗? 这是我的代码。散集一个xml到pojo,然后pojo到json并将其发送到外部服务“my.applications.url”。我需要模拟外部响应。我该怎么做?

  • 问题内容: 我正在使用JavaScript测试运行程序“摩卡”。 我的测试失败了,因此我将使用进行调试。 但是运行测试时,没有输出(仅来自Mocha的测试结果)。看来Mocha已捕获并抑制了我的输出! 如何让Mocha显示输出?(对于失败的测试)? 编辑: 抱歉!- 在测试期间可以正常工作!我肯定一直期望它抑制输出,而且我没有正确检查自己的代码。感谢您的回应。所以…话虽如此…也许抑制通过测试的输出

  • Karate对验证给出json响应的rest API非常有帮助。现在我们有了以avro格式给出响应的API。可能还需要以avro格式发送有效载荷。如何使用空手道测试以AVRO格式给出响应的restendpoint?有没有什么简单的方法我可以调整一下然后完成它。谢谢!

  • 我正在使用Spring的“Spring test mvc”库来测试web控制器。我有一个非常简单的控制器,它返回一个JSON数组。那么在我的测试中我有: 上述测试返回: 为了快速检查我实际得到了什么,我运行了以下测试: 并在 我不确定为什么无法在JSON数组中看到。

  • 问题内容: 我期望使用扫描仪进行输入,直到没有任何输入为止(即,当用户输入空白行时)。我该如何实现? 我试过了: 但这会让我陷入困境 问题答案: 这是一种方法: