Как реализовать тест, чтобы проверить, существуют ли метрики привода? 404 для /actuator/prometheus в тестах

У меня есть приложение для весенней загрузки (версия 3.0.4):

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.4</version>
    <relativePath/>
</parent>

В application.yaml приложения (src/main/resources) у меня есть следующая конфигурация:

   ....
    management:
      server:
        port: 8081
      endpoints:
        web:
          exposure:
            include: health,prometheus,info
      endpoint:
        info:
          enabled: true
        health:
          enabled: true
          probes:
            enabled: true
          show-details: always
        prometheus:
          enabled: true
      ...

Когда я запускаю приложение и получаю доступ к URL-адресу localhost:8081/actuator/prometheus в своем браузере, я вижу длинный список метрик, и это ожидаемо.

Теперь я хочу реализовать тест, чтобы убедиться, что метрики prometheus доступны:

@Slf4j
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class ActuatorTests {
    @Autowired
    protected TestRestTemplate testRestTemplate;

    @LocalManagementPort
    private int managementPort;

    @Test
    public void test1() {
        ResponseEntity<String> forEntity = testRestTemplate.getForEntity("/actuator/prometheus", String.class);
        assertEquals(HttpStatus.OK, forEntity.getStatusCode());

    }

    @Test
    public void test2() {
        ResponseEntity<String> actuatorResponse = testRestTemplate.getForEntity("http://localhost:" + managementPort + "/actuator/prometheus", String.class);
        assertEquals(HttpStatus.OK, actuatorResponse.getStatusCode());
    }
}

Оба теста провалены с одной и той же ошибкой:

org.opentest4j.AssertionFailedError: 
Expected :200 OK
Actual   :404 NOT_FOUND

Как я могу это исправить?

P.S.

ТАКЖЕ я попытался скопировать этот тест как есть: https://stackoverflow.com/a/75334796/2674303

но результат:

org.springframework.web.client.HttpClientErrorException$NotFound: 404 : "{"timestamp":"2023-05-31T22:09:49.535+00:00","status":404,"error":"Not Found","path":"/actuator/metrics"}"
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта конфигурация в тестовой конфигурации устраняет проблему:

management:
  prometheus:
    metrics.export.enabled: true

Хитрость в том, что эта опция не нужна в приложении (поскольку значение по умолчанию равно true).

package org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus;
...
@ConfigurationProperties(prefix = "management.prometheus.metrics.export")
public class PrometheusProperties {

    /**
     * Whether exporting of metrics to this backend is enabled.
     */
    private boolean enabled = true;     
    ...

Я не смог найти место, но похоже, что какой-то стартовый тест весенней загрузки перезаписывает это значение по умолчанию. Не уверен, что этот тест имеет значение в случае, когда мне нужно изменить конфигурацию, чтобы он заработал.

Другие вопросы по теме