使用 Karate 测试 Hessian RPC 请求的最佳实践

Best practices to test Hessian RPC requests with Karate

我们成功地使用 Karate 对 REST 和 SOAP 网络服务进行自动化测试。此外,我们还有一些基于 Hessian Web 服务协议 (http://hessian.caucho.com/) 的遗留 Web 服务。

Hessian 调用也是 HTTP 请求,因此我们想将它们添加到我们的空手道测试套件中。

我的第一次尝试是使用 Java Interop 功能,因此测试是作为 Java 代码实现的,并且 Java 类 在功能中被调用文件。

示例:

Scenario: Test offer purchase order
  * def OfferPurchaseClient = Java.type('com.xyz.OfferPurchaseClient')
  * def orderId = OfferPurchaseClient.createOrder('12345', 'xyz', 'max.mustermann@test.de')
  * match orderId == '#number'

这种方法很有效,但我想知道是否有更优雅的方法也可以使用 Karate DSL 的更多功能。

我正在考虑这样的事情(虚拟代码):

Scenario: Test offer purchase order
  Given url orderManagementEndpoint
  And path offerPurchase
  And request serializeHessian(offerPurchase.json)
  When method post
  Then status 200
  And match deserializeHessian(response).orderId == '#number'

任何关于如何实施这种方法的recommendations/tips?

我实际上认为您已经在使用 Java 互操作方法的正确轨道上。在我看来,HTTP 客户端只是 Karate 功能的一小部分 sub-set,还有很多其他方面,例如断言、报告、parallel-execution,甚至 load-testing 等。所以我不用担心不使用 requestmethodstatus

也许OfferPurchaseClient.createOrder()可以return一个JSON。

或者我会做的是考虑像 OfferPurchaseClient.request(Map<String, Object> payload) 这样的方法 - 其中 payload 可以包含所有参数,包括路径和预期的响应代码等。

换句话说,我建议您围绕一些 Java 代码编写自己的 mini-framework 和自定义 DSL。如果你想要灵感和想法,请看这个讨论,它是一个围绕空手道构建 CLI 测试工具的例子: