具有Java代码的模拟服务器,用于处理自定义逻辑

时间:2019-01-15 14:34:46

标签: karate

我已经完美地运行了基于空手道的Mock API服务器。匹配场景时,我还想执行一些自定义Java代码。

使用jar执行模拟,如下所示

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代码的新方法。

1 个答案:

答案 0 :(得分:1)

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

然后发生的是,类路径将自动包含您需要的所有内容,例如mvn -B -DskipTests org.jacoco:jacoco-maven-plugin:0.7.9:report -Djacoco.dataFile="<..>\target\jacoco-merged.exec"

但是只要稍作努力,您就应该能够做自己想做的事。发生的情况是Signature不在Signature上。由于您知道Java,因此应该做的是 a)使classpath作为已编译的Signature文件或*.class文件在某处可用,然后 b )将其添加到Java类路径中。下面没有经过测试,但是您知道了:

*.jar

或者也许

java -cp myutils.jar -jar karate-0.9.0.jar

java -cp some/folder -jar karate-0.9.0.jar 文件在*.class中的位置。