Arhn - архитектура программирования

агрегирование результатов многопроектного теста Gradle с использованием TestReport

У меня есть структура проекта, которая выглядит следующим образом. Я хочу использовать функцию TestReport в Gradle для объединить все результаты теста в один каталог. Затем я могу получить доступ ко всем результатам теста через один файл index.html для ВСЕХ подпроектов. Как я могу это сделать?

.
|--ProjectA
  |--src/test/...
  |--build
    |--reports
      |--tests
        |--index.html (testresults)
        |--..
        |--..
|--ProjectB
    |--src/test/...
      |--build
        |--reports
          |--tests
            |--index.html (testresults)
            |--..
            |--..

Ответы:


1

Из Примера 4. Создание отчета о модульном тестировании для подпроектов в разделе Руководство пользователя Gradle:

subprojects {
    apply plugin: 'java'

    // Disable the test report for the individual test task
    test {
        reports.html.enabled = false
    }
}

task testReport(type: TestReport) {
    destinationDir = file("$buildDir/reports/allTests")
    // Include the results from the `test` task in all subprojects
    reportOn subprojects*.test
}

Полностью рабочий образец доступен на samples/testing/testReport в полном дистрибутиве Gradle.

04.06.2013
  • Эй, Пит, мне нужно направление. В моем случае у меня есть только один проект, т. е. ProjectA, и после интеграции с градацией чистой сборки я вижу build/jacoco/test.exec и build/jacoco/integrationTest.exec. В разделе build/reports/tests/xxxxxx я вижу либо index.html для модульных тестов, либо только интеграционные тесты, т. е. если я запускаю gradle clean build, я вижу модульные тесты index.html, и если я запускаю gradle clean build IntegrationTest, то он перезаписывает данные в build/reports/tests/xxx и получает новые данные для задачи IntegrationTest в той же папке (build/reports/tests). 17.09.2013
  • Точно так же, когда я запускаю sonar-runner, я вижу, что оба файла .exec выбираются во время JacocoSensor, и я также вижу, что общий .exec jacoco создается в рабочей области в папке .sonar и в папке build/reports/jacoco. sonar-runner завершается успешно, но я не вижу результатов на панели управления проекта в Sonar, хотя у меня установлены оба виджета для отображения модульных тестов/покрытия и интеграционных тестов. Посоветуйте, что мне может не хватать. 17.09.2013
  • Вам необходимо установить отдельный каталог отчетов для интеграционных тестов (см. Справочник по языку сборки Gradle). Не уверен насчет Сонара. 18.09.2013
  • testReport устарел в Gradle 1.9 и больше не должен использоваться. 23.11.2013
  • Устарело только свойство test.testReport. Как говорится в сообщении об устаревании, вам просто нужно заменить его на test.reports.html.enabled = false. 23.11.2013
  • Я просто говорю :) кроме того, это не работает, если (как спросил вопрошающий) оба проекта не находятся в подкаталогах; У меня был родительский проект в корневом каталоге, но безрезультатно. 24.11.2013
  • Вопрос заключается в объединении отчетов об испытаниях всех подпроектов. Ответ работает независимо от макета каталога. 24.11.2013
  • Я обнаружил, что если один тест завершается неудачно, отчет о задаче не завершается — остальные тесты не выполняются, поэтому необходимо добавить ignoreFailures к test задаче (source). 26.07.2016
  • Как мне нравится, когда люди указывают на /current/ url в документации, как будто эта глава будет там вечно. 10.10.2019
  • docs.gradle.org/5.6.2/userguide/ 10.10.2019
  • Не удалось получить неизвестное свойство «тест» для проекта «: мой-подпроект» типа org.gradle.api.Project. 07.04.2020
  • Лучше использовать reportOn getTasksByName("test", true), так как это сработает, если в некоторых подпроектах нет тестовых задач. 26.05.2020

  • 2

    В дополнение к блоку subprojects и задаче testReport, предложенным https://stackoverflow.com/users/84889/peter-niederwieser выше, я бы добавил еще одну строку в сборку ниже тех:

    tasks('test').finalizedBy(testReport)
    

    Таким образом, если вы запустите gradle test (или даже gradle build), задача testReport запустится после завершения тестов подпроекта. Обратите внимание, что вы должны использовать tasks('test'), а не просто test.finalizedBy(...), потому что задача test не существует в корневом проекте.

    11.09.2019
  • Мне пришлось сделать следующее для Gradle 5.6.2: rootProject.getTasksByName('test', true).each { it.finalizedBy(testReport) } 21.11.2019

  • 3

    Если вы используете kotlin Gradle DSL

    val testReport = tasks.register<TestReport>("testReport") {
        destinationDir = file("$buildDir/reports/tests/test")
        reportOn(subprojects.map { it.tasks.findByPath("test") })
    
    subprojects {
        tasks.withType<Test> {
            useJUnitPlatform()
            finalizedBy(testReport)
            ignoreFailures = true
            testLogging {
                events("passed", "skipped", "failed")
            }
        }
    }
    

    И выполнить gradle testReport. Источник Как создать сводный отчет о тестировании для всех подпроектов Gradle

    24.11.2020

    4

    Для подключенных тестов Android существует подход, опубликованный Google.(https://developer.android.com/studio/test/command-line.html#RunTestsDevice (раздел Многомодульные отчеты))

    1. Добавьте плагин android-reporting в свои проекты build.gradle.

      apply plugin: 'android-reporting'

    2. Выполните тесты Android с дополнительным аргументом «mergeAndroidReports». Он объединит все результаты тестирования модулей проекта в один отчет.

      ./gradlew connectedAndroidTest mergeAndroidReports

    12.04.2017
  • Хотя в документе говорится, что он также может объединять модульные тесты, выполнение этой задачи зависит от тестов эспрессо, на что я не надеялся. 04.08.2017

  • 5

    К вашему сведению, я решил эту проблему, используя следующую конфигурацию subprojects в файле build.gradle моего корневого проекта. Таким образом, никаких дополнительных задач не требуется.

    Примечание. Это помещает выходные данные каждого модуля в свою собственную папку reports/<module_name>, поэтому сборки подпроектов не перезаписывают результаты друг друга.

    subprojects {
     // Combine all build results
      java {
        reporting.baseDir = "${rootProject.buildDir.path}/reports/${project.name}"
      }
    }
    

    Для проекта Gradle по умолчанию это приведет к такой структуре папок, как

    build/reports/module_a/tests/test/index.html
    build/reports/module_b/tests/test/index.html
    build/reports/module_c/tests/test/index.html
    
    08.03.2020
  • Я не понимаю, как это действительно отвечает на вопрос. Вопрос касается ОДНОГО index.html с накопленными результатами. 25.02.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..