如何用空手道保持网络连接的生命力

问题描述 投票:1回答:2

这是我尝试打开websocket连接的方法,运行测试后,连接立即关闭。问题在于,即使在测试用例中,在异步上下文中,我也希望能够等待来自后端的异步响应。

我的实现:

Feature: websocket testing

 Scenario: only listening to websocket messages
    * def demoBaseUrl = 'wss://bla bla bla/subscription'
    * def handler = function(msg){ karate.signal(msg) }
    * def socket = karate.webSocket(demoBaseUrl, handler)
    * def txt = '{"type": "connection_init", "payload": {}}'
    * socket.send(txt)
    * def result = karate.listen(10000)
    * print 'response:', result

运行测试后的日志:

    Testing started at 09:44 ...
/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java -Dorg.jetbrains.run.directory=/Users/wzhmiur/Desktop/karate/src/test/java/examples/users "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=55472:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/tools.jar:/Users/wzhmiur/Desktop/karate/build/classes/java/test:/Users/wzhmiur/Desktop/karate/build/resources/test:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.intuit.karate/karate-junit5/0.9.4/6e4231fc7c7cc40d151d9c2b1c16141f4943ffca/karate-junit5-0.9.4.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.intuit.karate/karate-apache/0.9.4/3a4d731189822c0fdafe4abed6dc44c3dd28acdd/karate-apache-0.9.4.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/net.masterthought/cucumber-reporting/3.8.0/3412fc79e6e48ca0c961180a302020e36aaea71a/cucumber-reporting-3.8.0.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.intuit.karate/karate-core/0.9.4/7f698c207be627e3818ff932984afa9d366efbc7/karate-core-0.9.4.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-api/5.4.0/1a09f25a160f71c267f9ebe3b229b17805c683e9/junit-jupiter-api-5.4.0.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpmime/4.5.5/8281b24b8a493374cd2aa8a90c4156588f7dbcb6/httpmime-4.5.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.5.5/1603dfd56ebcd583ccdf337b6c3984ac55d89e58/httpclient-4.5.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.slf4j/jcl-over-slf4j/1.7.25/f8c32b13ff142a513eeb5b6330b1588dcb2c0461/jcl-over-slf4j-1.7.25.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.3/7c4f3c474fb2c041d8028740440937705ebb473a/logback-classic-1.2.3.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.6/a7cb258b9c36f49c148834a3a35b53fe73c28777/log4j-core-2.6.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.6/1300b198716dccca49d1740cf6a737d083be0d06/log4j-api-2.6.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.8.5/b3035f37e674c04dafe36a660c3815cc59f764e2/jackson-databind-2.8.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apache.velocity/velocity/1.7/2ceb567b8f3f21118ecdec129fe1271dbc09aa7a/velocity-1.7.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/velocity-tools/velocity-tools/1.4/4e1f4d507030a00959f4c0c7fcc60b3565617d08/velocity-tools-1.4.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.9.6/e370a92153bf66da17549ecc78c69ec6c6ec9f41/joda-time-2.9.6.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.5/6c6c702c89bfff3cd9e80b04d668c5e190d588c6/commons-lang3-3.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.5/2852e6e05fbb95076fc091f6d1780f1f8fe35e0f/commons-io-2.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/net.lingala.zip4j/zip4j/1.3.2/4ba84e98ee017b74cb52f45962f929a221f3074c/zip4j-1.3.2.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.codehaus.plexus/plexus-utils/3.0.24/b4ac9780b37cb1b736eae9fbcef27609b7c911ef/plexus-utils-3.0.24.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.jsoup/jsoup/1.10.1/645f1ad2f6f4cbad1cde4c483eae71e4051be6ef/jsoup-1.10.1.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.googlecode.owasp-java-html-sanitizer/owasp-java-html-sanitizer/20160924.1/f025ce55755bcdb1cf049e4c271d193c5610e182/owasp-java-html-sanitizer-20160924.1.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/20.0/89507701249388e1ed5ddcf8c41f4ce1be7831ef/guava-20.0.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.jayway.jsonpath/json-path/2.1.0/397bd8076ff9581ad2ebad787da45ba76ee39112/json-path-2.1.0.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/info.cukes/cucumber-java/1.2.5/2197dfa9cd7899ddce136a356994ac21f438f80/cucumber-java-1.2.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.24/13a9c0d6776483c3876e3ff9384f9bb55b17001b/snakeyaml-1.24.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/de.siegmar/fastcsv/1.0.3/356512f93d0ef5e682ccfac3608864686b45c11b/fastcsv-1.0.3.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/info.picocli/picocli/3.0.1/ed22a0e26d214540b4e189c58696f8b1ca409a1f/picocli-3.0.1.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-commons/1.4.0/e0b2ed8fac32ad6469d75d034e759f1969db8dda/junit-platform-commons-1.4.0.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apiguardian/apiguardian-api/1.0.0/3ef5276905e36f4d8055fe3cb0bdcc7503ffc85d/apiguardian-api-1.0.0.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.opentest4j/opentest4j/1.1.1/efd9f971e91074491ea55b19f67b13470cf4fcdd/opentest4j-1.1.1.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.4.9/a86ce739e5a7175b4b234c290a00a5fdb80957a0/httpcore-4.4.9.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.10/4b95f4897fa13f2cd904aee711aeafc0c5295cd8/commons-codec-1.10.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.25/da76ca59f6a57ee3102f8f9bd9cee742973efa8a/slf4j-api-1.7.25.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-core/1.2.3/864344400c3d4d92dfeb0a305dc87d953677c03c/logback-core-1.2.3.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.8.0/45b426f7796b741035581a176744d91090e2e6fb/jackson-annotations-2.8.0.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.8.5/60d059f5d2930ccd1ef03535b713fd9f933d1ba7/jackson-core-2.8.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/commons-collections/commons-collections/3.2.1/761ea405b9b37ced573d2df0d1e3a4e0f9edc668/commons-collections-3.2.1.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/commons-lang/commons-lang/2.4/16313e02a793435009f1e458fa4af5d879f6fb11/commons-lang-2.4.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/net.minidev/json-smart/2.2/53200a9d80fff3106dc435de1350cdd20b757819/json-smart-2.2.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/info.cukes/cucumber-core/1.2.5/7255a9d8e0c3b0f9e3cd80503c91c2b088b3d9b5/cucumber-core-1.2.5.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/net.minidev/accessors-smart/1.1/a527213f2fea112a04c9bdf0ec0264e34104cd08/accessors-smart-1.1.jar:/Users/wzhmiur/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.0.3/dcc2193db20e19e1feca8b1240dbbc4e190824fa/asm-5.0.3.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/junit/lib/junit-rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/cucumber-java/lib/cucumber-jvmFormatter.jar" cucumber.api.cli.Main --plugin org.jetbrains.plugins.cucumber.java.run.CucumberJvmSMFormatter --monochrome --glue com.intuit.karate /Users/wzhmiur/Desktop/karate/src/test/java/examples/users/apollo_subs.feature
command: cucumber.api.cli.Main --plugin org.jetbrains.plugins.cucumber.java.run.CucumberJvmSMFormatter --monochrome --glue com.intuit.karate /Users/wzhmiur/Desktop/karate/src/test/java/examples/users/apollo_subs.feature
09:44:15.522 [main] INFO  com.intuit.karate - karate.env system property was: null 
09:44:16.549 [nioEventLoopGroup-2-1] DEBUG c.i.k.netty.WebSocketClientHandler - websocket client connected
09:44:16.591 [nioEventLoopGroup-2-1] ERROR c.i.k.netty.WebSocketClientHandler - websocket exception: jdk.nashorn.internal.runtime.Undefined cannot be cast to java.lang.Boolean
09:44:16.595 [main] INFO  com.intuit.karate - [print] response: {"type":"connection_ack","id":"c3c41faf-bfa9-4e35-a639-46b4382bf452"}
09:44:16.595 [nioEventLoopGroup-2-1] DEBUG c.i.k.netty.WebSocketClientHandler - websocket client disconnected
HTML report: (paste into browser to view) | Karate version: 0.9.4
file:/Users/wzhmiur/Desktop/karate/target/surefire-reports/src.test.java.examples.users.apollo_subs.html
---------------------------------------------------------


Process finished with exit code 0

请让我知道是否可行,应该正确完成。

graphql karate
2个回答
0
投票

然后,我不明白您如何发送消息,打开websocket连接并给我帐户...这可能以后会来自微服务?您如何发送消息?

  Scenario: only listening to websocket messages
    * def demoBaseUrl = 'websocket/subscription'
    * def handler = function(msg){ karate.signal(msg) }
    * def socket = karate.webSocket(demoBaseUrl, handler)
    * def txt = '{"type": "connection_init", "payload": {}}'
    * socket.send(txt)
    * def result = karate.listen(5000)
    * def subscribe = 'subscription { showTime(howManyTimes: 4){ now }'
    * socket.send(subscribe)
    * def result = karate.listen(5000)
    * print 'response:', result
    * def message = '{"type": "start", "id":"3", "payload": {"query": "query myQuery { pings { id } }", "operationName": "myQuery"}}'
    * socket.send(message)
    * def result = karate.listen(5000)
    * print 'response:', result

log:

Testing started at 11:26 ...
--glue com.intuit.karate /Users/wzhmiur/Desktop/karate/src/test/java/examples/users/apollo_subs.feature
command: cucumber.api.cli.Main --plugin org.jetbrains.plugins.cucumber.java.run.CucumberJvmSMFormatter --monochrome --glue com.intuit.karate /Users/wzhmiur/Desktop/karate/src/test/java/examples/users/apollo_subs.feature
11:26:24.779 [main] INFO  com.intuit.karate - karate.env system property was: null 
11:26:26.020 [nioEventLoopGroup-2-1] DEBUG c.i.k.netty.WebSocketClientHandler - websocket client connected
11:26:26.211 [nioEventLoopGroup-2-1] ERROR c.i.k.netty.WebSocketClientHandler - websocket exception: jdk.nashorn.internal.runtime.Undefined cannot be cast to java.lang.Boolean
11:26:26.218 [nioEventLoopGroup-2-1] DEBUG c.i.k.netty.WebSocketClientHandler - websocket client disconnected
11:26:31.226 [main] INFO  com.intuit.karate - [print] response: 
11:26:36.233 [main] INFO  com.intuit.karate - [print] response: 
HTML report: (paste into browser to view) | Karate version: 0.9.4
file:/Users/wzhmiur/Desktop/karate/target/surefire-reports/src.test.java.examples.users.apollo_subs.html
---------------------------------------------------------
Process finished with exit code 0

0
投票

此示例对我来说很好,所以我不知道您的情况有什么不同:

* def socket = karate.webSocket('ws://echo.websocket.org')
* socket.send('hello world!')
* def result = socket.listen(5000)
* match result == 'hello world!'

* socket.send('another message')
* def result = socket.listen(5000)
* match result == 'another message'

因此,如果您仍然遇到问题,请按照以下过程操作:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

© www.soinside.com 2019 - 2024. All rights reserved.