使用 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 的解决方案:
我有完美的 运行 模拟 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 的解决方案: