2015-07-29 7 views
2

Я пытаюсь получить покрытие кода с помощью jenkins и jacoco-плагинов.Интеграция Jenkins jacoco

У меня есть банкомат агента jacoco на машине, где выполняется мое тестирование. Затем я извлекаю дамп и пытаюсь получить покрытие кода на jenkins.

Однако я получаю ошибку ниже,

[JaCoCo plugin] Collecting JaCoCo coverage data... 
[JaCoCo plugin] \**/coverage/jacoco.exec;\**/coverage/classes-cov;\**/application/; locations are configured 
[JaCoCo plugin] Number of found exec files for pattern \**/coverage/jacoco.exec: 1 
[JaCoCo plugin] Saving matched execfiles: /home/ec2-user/slave/workspace/Automation_Code_Coverage_POMS/coverage/jacoco.exec 
[JaCoCo plugin] Saving matched class directories for class-pattern: \**/coverage/classes-cov: /home/ec2-user/slave/workspace/Automation_Code_Coverage_POMS/coverage/classes-cov 
[JaCoCo plugin] Saving matched source directories for source-pattern: \**/application/: 
[JaCoCo plugin] Loading inclusions files.. 
[JaCoCo plugin] inclusions: [\**/com/test/poms/\**] 
[JaCoCo plugin] exclusions: [\**/poms/convertors/\**:\**/poms/scheduler/\**] 
ERROR: Publisher 'Record JaCoCo coverage report' aborted due to exception: 
java.io.IOException: Error while analyzing class /home/ec2-user/.jenkins/jobs/Automation_Code_Coverage_POMS/builds/43/jacoco/classes/com/test/poms/convertors/DtoToSroConverter.83f57acb46d004b5.class. 
    at org.jacoco.core.analysis.Analyzer.analyzerError(Analyzer.java:150) 
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:144) 
    at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:175) 
    at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:208) 
    at hudson.plugins.jacoco.ExecutionFileLoader.analyzeStructure(ExecutionFileLoader.java:126) 
    at hudson.plugins.jacoco.ExecutionFileLoader.loadBundleCoverage(ExecutionFileLoader.java:133) 
    at hudson.plugins.jacoco.JacocoReportDir.parse(JacocoReportDir.java:102) 
    at hudson.plugins.jacoco.JacocoBuildAction.loadRatios(JacocoBuildAction.java:291) 
    at hudson.plugins.jacoco.JacocoBuildAction.load(JacocoBuildAction.java:273) 
    at hudson.plugins.jacoco.JacocoPublisher.perform(JacocoPublisher.java:371) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:726) 
    at hudson.model.Build$BuildExecution.post2(Build.java:185) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:671) 
    at hudson.model.Run.execute(Run.java:1769) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
    at hudson.model.ResourceController.execute(ResourceController.java:98) 
    at hudson.model.Executor.run(Executor.java:374) 
    Caused by: java.lang.IllegalStateException: Can't add different class with same name: com/test/poms/convertors/DtoToSroConverter 
    at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:106) 
    at org.jacoco.core.analysis.Analyzer$1.visitEnd(Analyzer.java:92) 
    at org.objectweb.asm.ClassVisitor.visitEnd(ClassVisitor.java:317) 
    at org.jacoco.core.internal.flow.ClassProbesAdapter.visitEnd(ClassProbesAdapter.java:98) 
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:697) 
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:506) 
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:107) 
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:142) 
    ... 17 more 
Notifying upstream projects of job completion 

JaCoCo Can't add different class with same name: org/hamcrest/BaseDescription выше ссылки предлагает исключить файлы, но если вы посмотрите на вышеуказанных журналах, они уже исключены, но я все еще вижу этот вопрос ,

+0

Можете ли вы вставить моментальный снимок конфигурации плагина в задание Дженкинса. Почему есть обратная косая черта \ перед ** –

+0

, которая используется с использованием 2 *, создаст смелый шаблон в обмене стеками, и я должен был преодолеть его. –

ответ

1

В моем случае см. Это: 12:35:12 [JaCoCo plugin] exclusions: [**/*koba*.class] в журналах Дженкинса, в то время как плагин Jenkins Jacoco выполняет анализ. Нет никаких обратных косых черт по сравнению с тем, что вы получаете.

Во-вторых, ошибка, которую вы получаете из-за любой из 2 причинам:

  1. Вы .java/.groovy файлы и после компиляции, вы создаете файлы .class. Кажется, что есть файл класса (например: abc.java или com/test/poms/convertors/DtoToSroConverter в вашем случае), который присутствует в исходной папке, указанной в поле «источник» плагина.

  2. Если вы создаете файлы классов (для которых у вас нет файла .java/.groovy в источнике (src/main/java или src/main/groovy или src/test/java, src/test/groovy, src/xxx/java или src/xxx/groovy), тогда анализ jacoco будет выходить с ошибкой с той же ошибкой, т. е. он не сможет найти соответствующий исходный файл (.java/.groovy) для .class файл это анализ

Проверьте, сколько файлов есть с именем, начинающимся с:.. DtoToSroConverter в проекте

Затем убедитесь, что значения, которые вы упоминаете в Jacoco плагин в Jenki ns выглядит так. ПРИМЕЧАНИЕ. Исходный код НЕ должен содержать любые тестовые (единичные/неэлементные тестовые источники) папки.

enter image description here

В моем случае, я говорю, обрабатывать все .exec файлы (в любом месте рабочего пространства моего проекта после сборки/испытания/процесс jacoco завершения), т.е. ****/*. * Exec *

Затем в каталогах «Путь к классу» всегда следует указывать только файлы исходного файла MAIN (не тестировать классы типа единицы/не единицы), т. Е. Я использовал только «build/classes/main», поскольку эти классы сгенерированный против основного кода исходного кода (src/main/java OR src/java). Это значение - это папка, которая содержит только ваши основные классы исходного кода.

Поле пути к исходным каталогам должно всегда содержать папку, в которой существует фактический основной исходный код (вместо того, чтобы включать любой исходный код теста), то есть я использовал «src/java». Я мог бы использовать «src/main/java», который представляет собой стандартную структуру папок Gradle/Maven для основного исходного кода. В моем случае основной исходный код находится в папке src/java.

Проверьте правильность установки поля «Путь к исходным каталогам» и «Путь к классу»?Если да, существует ли более одного файла с именем: DtoToSroConverter

+0

Я попытался правильно настроить настройки. –

+0

Теперь я не вижу эту ошибку, о которой я упомянул, но я не вижу никаких линий, которые будут покрыты во время выполнения. Я уверен, что у меня правильные тесты. Я вижу, что jacoco.exec 0 в размере –

+0

, потому что вы не можете прикреплять jacocoagent.jar к целевой JVM (Tomcat's JVM) во время выполнения ваших тестов без модуля. Выполняются ли модульные тесты или не-модульные тесты (т. Е. Тесты интеграции, приемки, тесты на основе селена на основе и т. Д.). Вот что я делаю. См. Пару моих сообщений о Jacoco или см. Jacoco docs о том, как подключить jacocoagent.jar (destfile = ....), а затем установить для этого значения переменную TOMCAT_EXTRA_OPTS = .... Теперь используйте эту переменную во время запуска Tomcat. Запустите tomcat, запустите свои тесты, остановите tomcat (важно). В это время у вас будет действительный файл jacocoIT.exec. –