Cucumber默认发布地址是什么?开启publish后Jenkins报ConnectException
Cucumber-jvm 发布报告连接超时问题解答
问题背景
使用Cucumber-jvm 6.11.0生成测试报告,本地写入如下junit-platform.properties配置运行正常:
cucumber.publish.enabled=true cucumber.plugin=pretty, json:build/reports/cucumber/report.json cucumber.junit-platform.naming-strategy=long
相同配置在Jenkins运行时抛出如下连接超时异常:
java.lang.RuntimeException: java.net.ConnectException: Connection timed out (Connection timed out) at io.cucumber.core.plugin.MessageFormatter.writeMessage(MessageFormatter.java:36) at io.cucumber.core.eventbus.AbstractEventPublisher.send(AbstractEventPublisher.java:51) at io.cucumber.core.eventbus.AbstractEventBus.send(AbstractEventBus.java:12) at io.cucumber.core.runtime.SynchronizedEventBus.send(SynchronizedEventBus.java:47) at io.cucumber.core.runtime.CucumberExecutionContext.emitTestRunFinished(CucumberExecutionContext.java:102) at io.cucumber.core.runtime.CucumberExecutionContext.finishTestRun(CucumberExecutionContext.java:74) at io.cucumber.junit.platform.engine.CucumberEngineExecutionContext.finishTestRun(CucumberEngineExecutionContext.java:98) at io.cucumber.junit.platform.engine.CucumberEngineDescriptor.after(CucumberEngineDescriptor.java:37) at io.cucumber.junit.platform.engine.CucumberEngineDescriptor.after(CucumberEngineDescriptor.java:10) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:149) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:149) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ... Caused by: java.net.ConnectException: Connection timed out (Connection timed out) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1963) at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1958) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1957) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1525) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509) at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:329) at io.cucumber.core.plugin.UrlOutputStream.getResponseBody(UrlOutputStream.java:111) at io.cucumber.core.plugin.UrlOutputStream.sendRequest(UrlOutputStream.java:83)
经测试只要开启cucumber.publish.enabled=true就会触发该问题,下面针对相关疑问解答:
问题解答
1. 发布功能的默认上传地址
开启cucumber.publish.enabled=true后,Cucumber默认会将测试报告上传到官方的公开报告托管平台,确实会通过HTTPS发起HTTP请求上传报告数据。你本地配置了代理可以正常访问公网所以运行正常,Jenkins环境一般处于内网,没有配置公网出口代理,因此会触发连接超时,你的推测完全正确。
2. 仅生成本地报告仍触发超时的原因
发布功能是独立的开关逻辑,和本地报告生成配置互不干扰。只要你显式开启了cucumber.publish.enabled=true,不管有没有配置cucumber.plugin生成本地json、html报告,Cucumber都会在测试运行结束后自动触发报告上传逻辑,因此即使你只需要本地报告,只要开了这个开关就会发起公网请求,自然会出现连接超时错误。
解决方案
如果不需要将报告上传到官方公开平台,直接将配置修改为cucumber.publish.enabled=false即可,该配置不会影响本地报告的正常生成,Jenkins上也不会再出现连接超时报错。
内容的提问来源于stack exchange,提问作者Vincent F
相关产品推荐
相关产品推荐

