spring - SpringBootTest 与 Zuul 代理 - 空响应
问题描述
简介:
我目前正在使用 SpringBootTest 为我的带有 Zuul 代理的 API 网关编写集成测试。我已经在8089
返回一些 json 数据的端口上创建了一个有效的模拟微服务,网关应用程序应该将传入的请求转发到该端口。
问题: Zuul 设法正确匹配路由,但是它以某种方式无法转发请求,因为响应始终是空的 HTTP 200,而它应该包含模拟微服务返回的 json 数据。此问题仅在 test 中出现。它在生产中运行良好。
最近的观察:在调试时我发现在测试中,FilterLoader
不提供任何类型的过滤器route
,而在生产中它提供了三个过滤器的列表,然后route()
由ZuulServlet
. 处理该route()
方法后,将使用从微服务获得的数据填充响应。它不会在测试中发生。
我还尝试用真实的服务器替换模拟服务器 - 结果完全相同。
问题: 我将不胜感激有关此问题的任何建议;)
祖尔配置:
logging:
level:
org:
springframework:
cloud:
netflix: trace
ribbon:
eureka:
enabled: false
eureka:
client:
enabled: false
zuul:
routes:
restuarant:
path: /restaurant/**
url: http://localhost:8089
spring:
cloud:
discovery:
enabled: false
...
测试类注释:
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
@AutoConfigureWebTestClient(timeout = "30000")
调用测试的端点
//the mocked microservice has an endpoint http://localhost:8089/restaurants
private WebTestClient.ResponseSpec getResource(String accessToken) {
return webClient.get()
.uri("/restaurant/restaurants")
.accept(MediaType.APPLICATION_JSON)
.header(HttpHeaders.AUTHORIZATION, TokenType.BEARER.getValue() + " " + accessToken)
.exchange();
}
解决方案
推荐阅读
- git - 在主项目中同时管理多个 repos 的最佳实践是什么?
- rest - WSO2IS REST API 用于更改用户密码
- machine-learning - 将 MobileNet 从 Keras 转换为 Tensorflow Lite
- go - 尝试生成唯一 int64 时生成负数的代码
- python - 让学生参加 django 课程
- android-emulator - 上 Appium 时出错,无法将元素设置为“值”。您是否与正确的元素交互?
- python - 访问列表中的字典(Python)
- bash - 解析标志内的 bash 参数
- scala - 请求模式的请求响应
- c++ - 绝对值 abs(x) 使用按位运算符和布尔逻辑