使用 Java 处理自定义逻辑的代码模拟服务器

Mock server with Java Code for handling custom logic

我有完美的 运行 模拟 API 基于空手道的服务器。当场景匹配时,我还想执行一些自定义 Java 代码。

如下使用 jar 执行 Mock

java -jar karate-0.9.0.jar -m ./src/test/java/Mymock.feature -p 9000

Mymock.feature 有如下内容


  Scenario: pathMatches('/')
    * def Signature = Java.type('Signature')
    * def sign = Signature.calculate('382700b563f4', {'userId':'399645532', 'os':'android', 'client_key':'3c2cd3f3', 'token':'141a649988c946ae9b5356049c316c5d-838424771', 'token_client_salt':'d340a54c43d5642e21289f7ede858995'})
    * print sign.sig
    * print sign.__NStokensig

上面的代码在通过功能文件直接执行时工作正常。

但是正如预期的那样,如果将其嵌入到 Mocks 中调用,则会出错。

Mymock.feature:70 - javascript evaluation failed: Java.type('Signature'), java.lang.ClassNotFoundException: Signature

如何执行嵌入在模拟中的 Java 代码? 我不依赖 jar 来执行 Mocks,因此可以轻松尝试新的方法来通过任何其他方法在 Mocks 中执行 Java 代码。

由于您使用的是 Java,我建议您通过 Java API(嵌入)启动模拟服务器。这是大多数团队所做的:https://github.com/intuit/karate/tree/master/karate-netty#embedding

然后类路径将自动包含您需要的所有内容,例如 Signature

但只要稍加努力,您就可以做您想做的事。发生的事情是 Signature 不在 classpath 上。既然你知道 Java,你应该做的是 a) 使 Signature 在某处作为已编译的 *.class 文件或 *.jar 文件可用,然后 b) 将其添加到 Java 类路径。

编辑:参考其他 post 的解决方案: