当普罗米修斯端点正在调用时,MockMvc 收到 404

Posted

技术标签:

【中文标题】当普罗米修斯端点正在调用时,MockMvc 收到 404【英文标题】:MockMvc receive 404 when prometheus endpoint is calling 【发布时间】:2021-06-09 04:11:37 【问题描述】:

我想使用 MockMvc 类测试 Prometheus 指标端点。

一切正常,但昨天我将我的项目迁移到 Java 15SpringBoot 2.4.3SpringCloud 2020.0.1。现在,只有普罗米修斯测试不起作用,我收到 404 而不是预期的 200。我对build.gradle 有所有必要的依赖,例如:runtime("io.micrometer:micrometer-registry-prometheus")。在 application-test.yml 我有一个禁用安全配置、合同测试协议代理端点等。

我的测试:

@ExtendWith(SpringExtension.class, PostgresSpringDataSourceExtension.class)
@ActiveProfiles("test")
@SpringBootTest
@AutoConfigureMockMvc
public class PrometheusEndpointTest 

 @Autowired private MockMvc mockMvc;

 @Test
 public void metricsThroughPrometheusEndpoint() throws Exception 
  MvcResult result = 
  this.mockMvc.perform(get("/metrics")).andExpect(status().isOk()).andReturn();
 

application.yaml 配置的一部分:

management:
  endpoint:
    prometheus:
      enabled: true
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: 'prometheus'
      base-path: '/'
      path-mapping:
        prometheus: 'metrics'

【问题讨论】:

【参考方案1】:

解决方法:我们需要给测试注解或者application-test.yml添加属性:

@ExtendWith(SpringExtension.class)
@SpringBootTest(
  webEnvironment = RANDOM_PORT,
  properties = "management.metrics.export.prometheus.enabled")
@ActiveProfiles("test")
@AutoConfigureMockMvc

【讨论】:

以上是关于当普罗米修斯端点正在调用时,MockMvc 收到 404的主要内容,如果未能解决你的问题,请参考以下文章

Spring MockMvc 和异步控制器的 HTTP 状态码

调用不存在的端点时收到 403 而不是 404

Spring Boot WebFlux 测试未找到 MockMvc

当需要 ssl 为真时无法调用 EWS

MockMvc GET 请求失败,出现 404 但 URL 有效

GMail 停止发送推送通知