Могу ли я объединить данные покрытия Emma из объектов и целевых тестов интеграции? - PullRequest
2 голосов
/ 16 декабря 2009

Наши сборки TeamCity настроены с использованием цепочки сборки, поэтому наши модульные тесты и интеграционные тесты могут запускаться параллельно при запуске с фиксацией:

  • Build Chain - зависит от:
    • Юнит-тесты
    • Интеграционные тесты

Я ищу способ, которым мы можем объединить / объединить данные покрытия, сгенерированные модульными и интеграционными тестами в цепочке сборки, чтобы мы могли получить лучшее представление о том, сколько фактический код покрыты двумя вместе взятыми.

Таким образом, план состоит в том, чтобы иметь возможность отслеживать изменения в охвате зафиксированного кода и, возможно, отказывать в сборках, если процент падает!

Ответы [ 3 ]

2 голосов
/ 16 декабря 2009

Я настроил цель 'build chain' так, чтобы ей были доступны файлы покрытия (* .em, * .ec) из устройства и цели интеграции.

Я создал файл сборки ant специально для цели цепочки сборки (с помощью emma doco!):

<project name="coverage-merge" basedir="." default="all">
    <!-- directory that contains emma.jar and emma_ant.jar: -->
    <property name="emma.dir" value="${basedir}/lib"/>
    <property name="coverage.dir" location="${basedir}/coverage"/>

    <path id="emma.lib">
        <pathelement location="${emma.dir}/emma-teamcity-3.1.1.jar"/>
        <pathelement location="${emma.dir}/emma_ant-2.0.5312.jar"/>
    </path>

    <taskdef resource="emma_ant.properties" classpathref="emma.lib"/>

    <target name="all" depends="-report"/>

    <target name="-report">
        <emma>
            <report sourcepath="${src.dir}" sort="+block,+name,+method,+class" 
                    metrics="method:70,block:80,line:80,class:100">
                <infileset dir="${coverage.dir}" includes="**/*.em, **/*.ec"/>

                <!-- for every type of report desired, configure a nested
                     element; various report parameters
                     can be inherited from the parent <report>
                     and individually overridden for each report type:
                -->
                <txt outfile="${coverage.dir}/coverage.txt" depth="package" 
                        columns="class,method,block,line,name"/>
                <xml outfile="${coverage.dir}/coverage.xml" depth="package"/>
                <html outfile="${coverage.dir}/coverage.html" depth="method" 
                        columns="name,class,method,block,line"/>
            </report>
        </emma>
    </target>
</project>

... который объединяет все файлы покрытия в один отчет!

Параметр metrics в report устанавливает порог выделения для отчета html, поэтому проценты по отношению к пакетам и файлам, которые ниже порога, выделяются красным.

Изменение вывода xml позволит мне использовать что-то вроде andariel , чтобы запустить xpath для результатов, а затем принудительно завершить сборку, если пороги не достигнуты!

1 голос
/ 20 октября 2014

За Документ Эммы ТК

Все файлы покрытия. * Удаляются в начале сборки, поэтому необходимо убедиться, что в сборке выполняется полная перекомпиляция источников, чтобы получить действительный файл cover.em.

Что я сделал, чтобы обойти это ниже:

  • Используйте -out emma.em в конфигурации шагов сборки teamcity и убедитесь, что для параметра merge установлено значение true для сохранения инструментированных данных.
  • На последнем шаге, когда создается отчет о покрытии, используйте задачу перемещения муравья <move file="$YOUR_PATH/emma.em" tofile="$YOUR_PATH/coverage.em"/> для переименования по умолчанию.
  • Отчет emma выберет файл em по умолчанию для создания отчета.

Надеюсь, это поможет тому, у кого есть накопленный отчет о покрытии Эммы.

0 голосов
/ 16 декабря 2009

Большинство инструментов покрытия кода, с которыми я сталкивался, похоже, не имеют возможности комбинировать результаты тестирования из разных или перекрывающихся подсистем. Как вы указали, это очень полезная способность.

Наши инструменты тестирования SD-карт do имеют эту возможность и доступны для Java, C, C ++, C #, PHP и COBOL. Фактически, инструменты покрытия тестами SD могут объединять данные покрытия тестов с разных языков в один монолитный результат, так что вы можете получить обзор покрытия тестов для ваших многоязычных приложений. Он может показать охват всех исходных языков, а также предоставить сводные отчеты.

...