问题描述
我们已经成功地使用空手道来自动化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功能的一小部分子集,还有很多其他方面,例如断言,报告,并行执行,甚至是负载测试等。因此,我不必担心使用request
,method
,status
等
也许OfferPurchaseClient.createOrder()
可以返回JSON。
或者我会考虑使用OfferPurchaseClient.request(Map<String,Object> payload)
之类的方法-其中payload
可以包含所有参数,包括路径和预期的响应代码等。
换句话说,我建议您围绕一些Java代码编写自己的微型框架和自定义DSL。如果您需要灵感和想法,请查看此讨论,它是围绕Karate构建CLI测试工具的示例:https://stackoverflow.com/a/62911366/143475