Как бы я подготовил протокол испытаний JUnit для заводных тестов, пригодных для употребления Jenkins / Hudson? - PullRequest
7 голосов
/ 16 февраля 2012

Я написал несколько тестов XMLUnit (которые вписываются в инфраструктуру JUnit) в groovy и могу легко выполнить их в командной строке согласно groovy doco , но я не совсем понимаю, что еще Я должен сделать для этого вывод xml, который необходим Дженкинсу / Хадсону (или другому) для отображения результатов прохождения / неудачи (например, this ) и подробного отчета об ошибках и т. Д. (Например, это ). (извинения владельцам изображений)

В настоящее время мой стартовый скрипт выглядит так:

def allSuite = new TestSuite('The XSL Tests')

//looking in package xsltests.rail.*
allSuite.addTest(AllTestSuite.suite("xsltests/rail", "*Tests.groovy")) 

junit.textui.TestRunner.run(allSuite)

и получается примерно так:

Running all XSL Tests...
....
Time: 4.141

OK (4 tests)

Как я могу создать XML-файл отчета о тестировании JUnit, подходящий для чтения Jenkins / Hudson?

Нужно ли начинать тесты с другим бегуном JUnit?

Я видел этот ответ, но хотел бы не писать свой собственный отчет о тестировании.

Ответы [ 4 ]

4 голосов
/ 24 февраля 2012

После небольшого взлома я принял предложение Эрика Венделина и пошел с Градлом.

Для этого я переместил свои модульные тесты groovy в необходимую структуру каталогов src / test / groovy /, а вспомогательные ресурсы (входные и ожидаемые файлы вывода XML) помещаются в каталог / src / test / resources /.

Все необходимые библиотеки были настроены в файле build.gradle, как описано (полностью) здесь:

apply plugin: 'groovy'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.+'

    groovy module('org.codehaus.groovy:groovy:1.8.2') {
        dependency('asm:asm:3.3.1')
        dependency('antlr:antlr:2.7.7')
        dependency('xmlunit:xmlunit:1.3')
        dependency('xalan:serializer:2.7.1')
        dependency('xalan:xalan:2.7.1')
        dependency('org.bluestemsoftware.open.maven.tparty:xerces-impl:2.9.0')
        dependency('xml-apis:xml-apis:2.0.2')
    }
}

test {
    jvmArgs '-Xms64m', '-Xmx512m', '-XX:MaxPermSize=128m'

    testLogging.showStandardStreams = true //not sure about this one, was in official user guide

    outputs.upToDateWhen { false } //makes it run every time even when Gradle thinks it is "Up-To-Date"
}

Это применяет плагин Groovy, настраивает использование maven для захвата указанных зависимостей, а затем добавляет некоторые дополнительные значения к встроенной «тестовой» задаче.

Еще одна вещь - последняя строка, которая заставляет Gradle запускать все мои тесты каждый раз, а не только те, которые он считает новыми / измененными, это заставляет Дженкинса играть хорошо.

Я также создал файл gradle.properties для прохождения через корпоративный прокси / брандмауэр и т. Д .:

systemProp.http.proxyHost=10.xxx.xxx.xxx
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=username
systemProp.http.proxyPassword=passwd

Таким образом, я создал проект в свободном стиле в Jenkins, который периодически опрашивает наше репозиторий Mercurial, и всякий раз, когда кто-либо передает обновленный XSL в репо, все тесты будут запускаться.

Одной из моих первоначальных целей была возможность создавать стандартную графику Jenkins / Hudson pass / fail и отчеты JUnit, что является успехом: Pass / Fail с JUnit Reports .

Надеюсь, это поможет кому-то еще с такими же требованиями.

2 голосов
/ 19 февраля 2012

Я считаю, что самый быстрый способ загрузить этот материал - Gradle :

# build.gradle
apply plugin: 'groovy'

task initProjectStructure () << {
    project.sourceSets.all*.allSource.sourceTrees.srcDirs.flatten().each { dir ->
        dir.mkdirs()
    }
}

Затем запустите gradle initProjectStructure и переместите ваш источник в src/main/groovy, а тесты в test/main/groovy.

Кажется, это много (на самом деле это <5 минут работы), но вы получаете много вещей бесплатно. Теперь вы можете запустить <code>gradle test, и он запустит ваши тесты и выдаст JUnit XML, который вы можете использовать в build/test-reports в каталоге вашего проекта.

0 голосов
/ 19 февраля 2012

Вы можете написать свой собственный RunListener (или SuiteRunListener ). Он все еще требует от вас написания кода, но он намного чище, чем скрипт, на который вы указали ссылку. Если хотите, я могу отправить вам код репортера JUnit, который я написал на JavaScript для Jasmine , и вы можете «перевести» его на Groovy.

0 голосов
/ 16 февраля 2012

Поскольку вы спрашиваете о целях предоставления отчета Дженкинсу / Хадсону, я предполагаю, что у вас есть сборка Maven / Ant / etc, которую вы можете запустить.Если это правда, решение простое.

Прежде всего, между тестами Groovy и Java JUnit практически нет различий.Итак, все, что вам нужно сделать, это добавить плагин задачи / плагина Junit Ant / Maven в вашу сборку и заставить его выполнять ваши тесты Groity junit (так же, как если бы они были написаны на Java).Это выполнение создаст отчеты об испытаниях.Оттуда вы можете просто настроить сборку Hudson / Jenkins для просмотра каталога, в котором создаются отчеты о тестировании в процессе сборки.

...