- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个 Spring Boot 2.2.0.RELEASE 应用程序,我们正在使用 WireMock 使用 JUnit 5 测试类对其进行测试。测试在本地运行良好,但在我们的 Jenkins 上,在测试成功运行后,它失败并显示“地址已在使用中”消息。
这是来自 pom.xml
的 spring 依赖项:
<properties>
<java.version>11</java.version>
<spring-cloud.version>Hoxton.RC2</spring-cloud.version>
<spring-cloud-stream.version>3.0.0.RC2</spring-cloud-stream.version>
<openapi.codegen.maven.plugin.version>4.1.2</openapi.codegen.maven.plugin.version>
<jacoco-maven-plugin.version>0.8.4</jacoco-maven-plugin.version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<!-- Utils -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId>
<version>${openapi.codegen.maven.plugin.version}</version>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-wiremock</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
<version>${spring-cloud-stream.version}</version>
<type>test-jar</type>
<scope>test</scope>
<classifier>test-binder</classifier>
</dependency>
</dependencies>
所以我们的测试非常简单,如下所示:
@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles("test")
@AutoConfigureWireMock(port = 0)
@Import(TestChannelBinderConfiguration.class)
class OurTestClass {
@Autowired
private OurDataCache cache;
@Autowired
private InputDestination source;
@Autowired
private OutputDestination target;
@BeforeEach
void setupApi() throws IOException, URISyntaxException {
stubFor(get("/endpoint")
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE)
.withBody(data())
)
);
}
@Test
void sampleTest() {
String messageContent = loadResourceFileAsMessage("messageIn.json");
String expectedOutMessage = loadResourceFileAsMessage("messageOut.json");
Message<byte[]> message = new GenericMessage<>(messageContent.getBytes());
source.send(message);
Message<byte[]> received = target.receive();
assertThat(received, notNullValue());
assertThat(new String(received.getPayload()), equalTo(expectedOutMessage.replace(" ", "")));
}
}
同样,这在本地运行良好,并且在 Jenkins 上,实际测试用例通过了,但随后我们收到错误:
10:29:40 2019-11-25 09:29:40.683 WARN 414 --- [ main] o.s.test.context.TestContextManager : Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.cloud.contract.wiremock.WireMockTestExecutionListener@2b68c59b] for test class [class our.test.Class]
10:29:40
10:29:40 com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:12193
10:29:40 at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:148) ~[wiremock-jre8-standalone-2.25.1.jar:na]
10:29:40 at org.springframework.cloud.contract.wiremock.WireMockConfiguration.reRegisterServer(WireMockConfiguration.java:137) ~[spring-cloud-contract-wiremock-2.2.0.RC2.jar:2.2.0.RC2]
10:29:40 at org.springframework.cloud.contract.wiremock.WireMockConfiguration.resetMappings(WireMockConfiguration.java:150) ~[spring-cloud-contract-wiremock-2.2.0.RC2.jar:2.2.0.RC2]
10:29:40 at org.springframework.cloud.contract.wiremock.WireMockTestExecutionListener.afterTestClass(WireMockTestExecutionListener.java:76) ~[spring-cloud-contract-wiremock-2.2.0.RC2.jar:2.2.0.RC2]
10:29:40 at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:488) ~[spring-test-5.2.0.RELEASE.jar:5.2.0.RELEASE]
10:29:40 at org.springframework.test.context.junit.jupiter.SpringExtension.afterAll(SpringExtension.java:86) ~[spring-test-5.2.0.RELEASE.jar:5.2.0.RELEASE]
10:29:40 at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$13(ClassBasedTestDescriptor.java:421) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
10:29:40 at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
10:29:40 at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$14(ClassBasedTestDescriptor.java:421) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
10:29:40 at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) ~[na:na]
10:29:40 at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeAfterAllCallbacks(ClassBasedTestDescriptor.java:421) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
[...]
10:29:40 at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126) ~[surefire-booter-2.22.2.jar:2.22.2]
10:29:40 at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418) ~[surefire-booter-2.22.2.jar:2.22.2]
10:29:40 Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:12193
10:29:40 at com.github.tomakehurst.wiremock.jetty9.JettyHttpServer.start(JettyHttpServer.java:184) ~[wiremock-jre8-standalone-2.25.1.jar:na]
10:29:40 at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:146) ~[wiremock-jre8-standalone-2.25.1.jar:na]
10:29:40 ... 44 common frames omitted
10:29:40 Caused by: java.io.IOException: Failed to bind to /0.0.0.0:12193
10:29:40 at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:346) ~[wiremock-jre8-standalone-2.25.1.jar:na]
[...]
10:29:40 at com.github.tomakehurst.wiremock.jetty9.JettyHttpServer.start(JettyHttpServer.java:182) ~[wiremock-jre8-standalone-2.25.1.jar:na]
10:29:40 ... 45 common frames omitted
10:29:40 Caused by: java.net.BindException: Address already in use
10:29:40 at java.base/sun.nio.ch.Net.bind0(Native Method) ~[na:na]
10:29:40 at java.base/sun.nio.ch.Net.bind(Net.java:461) ~[na:na]
10:29:40 at java.base/sun.nio.ch.Net.bind(Net.java:453) ~[na:na]
10:29:40 at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227) ~[na:na]
10:29:40 at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80) ~[na:na]
10:29:40 at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342) ~[wiremock-jre8-standalone-2.25.1.jar:na]
10:29:40 ... 52 common frames omitted
10:29:40
10:29:40 [ERROR] [1;31mTests [0;1mrun: [0;1m2[m, Failures: 0, [1;31mErrors: [0;1;31m1[m, Skipped: 0, Time elapsed: 15.925 s[1;31m <<< FAILURE!
10:29:40 [ERROR] our.test.Class Time elapsed: 1.843 s <<< ERROR!
10:29:40 com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:12193
10:29:40 Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:12193
10:29:40 Caused by: java.io.IOException: Failed to bind to /0.0.0.0:12193
10:29:40 Caused by: java.net.BindException: Address already in use
我还为 Spring WireMockConfiguration
启用了 DEBUG 日志记录,有趣的是,构建成功了。它确实提到“为下一个测试重置映射以重新启动它们。在测试后与在随机端口上运行的新服务器重用相同的上下文时,这是必要的”。
这让我觉得这可能是某种竞争条件,但我不能说我完全掌握了整体设置。
任何指示都会有帮助。
最佳答案
这是一个已知问题:https://github.com/spring-cloud/spring-cloud-contract/issues/665
您必须在使用 WireMock 的所有测试中使用 @DirtiesContext
或在 src/test/中设置 spring.test.context.cache.maxSize=1
resources/spring.properties (https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-caching)
关于spring-boot - 带 Spring Boot JUnit 5 测试的 Wiremock : Address in Use after test run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59029274/
我想使用 HTTP 客户端测试我们的应用大量的数据。是否可以创建无限长或几千兆字节的长度使用 WireMock 输出而不分配字节数组或具有该大小的字符串? 据我所知ResponseDefinition
我正在尝试使用以下 stub 命中 WireMock,但似乎查询参数没有匹配。这是回应: Request
我正在尝试测试我的代码,该代码具有对 HTTP 服务器的底层 GET 调用。 我正在尝试使用 WireMock ,并基于“入门”我有以下代码: @Rule public WireMockRule wi
我是 wiremock 的新手,想创建永久的自定义 stub 。我能够通过运行独立的 wiremock 实例并使用 curl 命令发送发布请求来创建 stub 来创建 stub 。这工作正常,但只要我
我正在使用 wiremock-jre8-standalone-2.27.0 jar 来模拟 API。我的映射 json 看起来像: { "request": { "url": "/sam
我已经实现了一个带有示例 REST/HTTP 请求模拟的基本 WireMock。服务器代码实现如下。 使用此代码,当我从 Postman 发出 GET 请求(即 GET http://127.0.0.
我使用 asp.net core 2.0 + wiremock.net 开发了一个项目。目前,我只能处理“__admin/mappings”目录下的 json 文件。但是,我有几个 json 文件,因
我正在尝试使用 WireMock 创建动态模拟。我有一种情况,如果我指定 URL 如下: http://localhost:8089/api/account/abc@abc.com 那么我应该收到如下
我在wiremock中定义了一个https stub ,如下所示:- public class HttpsMockMain { public static void main(String[]
假设我有端点:/url?number="321"&name="TEST",但是当我们匹配一个与请求匹配的请求时,我们要如何忽略查询参数的顺序(忽略查询参数的顺序) 在这种情况下,如果在查询参数标签中传
我正在使用 wiremock 来模拟 http 服务器,我正在返回来自 json 文件的响应(使用 withBodyFile 方法)。 现在我想根据请求参数选择并返回响应json文件。对于下面的示例,
我看到有关于在以独立方式运行wiremock时启用详细日志记录的说明,网址为http://wiremock.org/running-standalone.html (请参阅--verbose)。 从
我有一个运行良好的模拟 stubFor(WireMock.get("/varela/offerszones?channel=123").willReturn(aResponse()
我尝试使用以下 json,但 wiremock 无法识别我的更改。我看了wiremock的文档,看到他们说:JSON相等匹配是基于JsonUnit的,因此支持占位符。我也尝试使用 JDK 8 和 JD
我正在尝试使用以下要求比较Soap UI和Wiremock的功能(对于我的项目中的大多数情况来说,这是很现实的)。 目标是为货币价格服务创建一个模拟。要求: 在以下位置可访问 mytesthost/p
在特定数量的先前响应之后,是否可以配置 wiremock 以在相同的 URL 和相同的请求上发送不同的响应? For example: 1st request -> 503 response 2nd
在大多数集成测试中,我使用 spring-boot-test(2.1.9.RELEASE) 和 spring-cloud-contract-wiremock(2.0.2.RELEASE)。该测试基于以
我想为以下 e2e 场景添加一个测试: 我的应用程序正在通过内部代理服务器向外部服务发出 Web 请求,代理服务器操作请求正文,将请求转发到目标主机并返回返回的响应。 比如说 我向 external.
在旧版本的 Wiremock 中,我们可以将 te queryString 附加到匹配的 url,如下所示: wireMockRule.stubFor(get(urlPathEqualTo("/res
我正在尝试使用 Wiremock 2.24.1 根据请求路径动态返回不同的主体文件,如果在本地找不到,我想调用外部资源(作为代理)。 我正在使用这个映射文件: { "priority": 1,
我是一名优秀的程序员,十分优秀!