Test impact analysis или как наколхозить кавередж

Здарова. Давненько я ничего не писал на страницах этого блога. Решил тряхнуть стариной и написать о некоторых своих наработках по части test impact анализа и измерения кавереджа.

В один прекрасный момент на одном из проектов, которые мы тестировали, я начал чувствовать, что чего-то не хватает. Тесты у нас покрывают аксептанс критерии, багов критических нет, но как-то внятного понимания, что и насколько хорошо мы тестируем, не было. Хотелось иметь возможность запустить автотесты и посмотреть, что и как мы там, на бекенде, зацепили. Я начал копать в эту сторону. Для джавы есть такая библиотека - Jacoco. С помощью нее можно измерить кавередж вашего кода.

Качаем jacocoagent.jar и подключаем к вашему проекту. Сделать это можно через переменную JAVA_TOOL_OPTIONS:

Пример для докера:

JAVA_TOOL_OPTIONS='-javaagent:/jacoco/jacocoagent.jar=port=36321,output=tcpserver,address=0.0.0.0'

Здесь важно задать порт и указать address=0.0.0.0, иначе в докере оно работать не будет. В момент старта контейнера не забудьте открыть порт 36321.

Теперь после запуска вышего приложения с подключенным агентом вы можете запускать свои автотесты либо же тестировать руками.

В момент, когда вам стало скучно или вы решили закончить тестировать, вы можете легко сдампать результат кавереджа.

Для этого вам понадобится jacococli.jar. Скачиваем его и выполняем команду:

java -jar jacoco/jacococli.jar dump --port=36322 --address=localhost --destfile=cov/result.exec

Теперь вы можете взять файл result.exec и посмотреть кавередж в Idea. Открываем код сервиса, который вы тестировали, и в идеа идем в меню Analyze → Show coverage data. Вуаля - вы получаете подсвеченными строки, которые вы потрогали своими тестами.

Вы можете легко дампать кавередж после каждого автотеста и смотреть результаты в гранулярном масштабе. Уважаемые SDET специалисты могут попробовать наколхозить вокруг этого какую-то интересную аналитику. Я в своем проекте для подкаста делал так, чтобы рядом с моими контейнерами бежал сайдкар, который умеет дампить кавередж:

gateway:
    image: gateway:latest
    container_name: timecoder-gateway
    depends_on:
      - mysql
    ports:
      - 8086:5000
    links:
      - timecoder-api
  inspector:
    image: spirogov/inspector:latest
    container_name: inspector
    ports:
      - 8088:8080
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - HOSTS=timecoder-api:36321, timecoder-gateway:36321
      - DEST_FOLDER=coverage
    volumes:
      - "/gateway/coverage:/coverage"

Инспектор в моем случае позволял сдампить кавередж со всех серверов при помощи одного REST запроса.

Вот так достаточно просто вы можете понять качество ваших тестов. Дерзайте!

Подписывайтесь на телеграмм канал, чтобы получать самые свежие новости https://t.me/automation_remarks