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

问题描述

我们已经成功地使用空手道来自动化REST和SOAP Web服务的测试。此外,我们还有一些基于Hessian Web服务协议(http://hessian.caucho.com/)的旧版Web服务。

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

我的第一个尝试是使用Java Interop功能,因此将测试实现为Java代码,并在Feature文件调用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'

这种方法有效,但是我想知道是否还有一种更优雅的方法,该方法还可以使用空手道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'

有关如何实施这种方法的任何建议/提示

解决方法

我实际上认为您已经在使用Java互操作方法的正确道路上。在我看来,HTTP客户端只是Karate功能的一小部分子集,还有很多其他方面,例如断言,报告,并行执行,甚至是负载测试等。因此,我不必担心使用requestmethodstatus

也许OfferPurchaseClient.createOrder()可以返回JSON。

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

换句话说,我建议您围绕一些Java代码编写自己的微型框架和自定义DSL。如果您需要灵感和想法,请查看此讨论,它是围绕Karate构建CLI测试工具的示例:https://stackoverflow.com/a/62911366/143475