Kotlin, Gradle и Allure2

zaz600
Kotlin Notes
Published in
4 min readFeb 9, 2019

В этой заметке разберёмся, как подключить отчёты Allure2 к тестам, написанным на Kotlin.

Что такое Allure?

Приведу цитату из статьи “Allure-framework. Часть 1

Allure Framework — популярный инструмент построения отчётов автотестов, упрощающий их анализ. Это гибкий и легкий инструмент, который позволяет получить не только краткую информацию о ходе выполнения тестов, но и предоставляет всем участникам производственного процесса максимум полезной информации из повседневного выполнения автоматизированных тестов.

Разработчикам и тестировщикам использование отчетов Allure позволяет сократить жизненный цикл дефекта: падения тестов могут быть разделены на дефекты продукта и дефекты самого теста, что сокращает затраты времени на анализ дефекта и его устранение. Также к отчету могут быть прикреплены логи, обозначены тестовые шаги, добавлены вложения с разнообразным контентом, получена информация о таймингах и времени выполнения тестов. Кроме того, Allure-отчеты поддерживают взаимодействие с системами непрерывной интеграции и баг-трекинговыми системами, что позволяет всегда держать под рукой нужную информацию о прохождении тестов и дефектах.

Тест-менеджерам Allure дает общее представление о работоспособности проекта, позволяет понять, какие фичи проекта покрыты тестами, как сгруппированы дефекты, каков общий тренд качества проекта.

На этом теория заканчивается.

Создаём новый проект

Создаем новый проект в IntelliJ Idea. New Project — Java — Kotlin (Java):

После нажатия на кнопку Finish надо дождаться, когда gradle скачает все зависимости.

Настраиваем зависимости

В build.gradle добавляем зависимости для работы с JUnit5 и Allure2.

def allureVersion = '2.9.0'
def junitVersion = '5.1.0'
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

// JUnit5
testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
testCompile('org.assertj:assertj-core:3.11.1')

// Allure
testRuntimeOnly("io.qameta.allure:allure-junit5:$allureVersion")
testCompile("io.qameta.allure:allure-java-commons:$allureVersion")
testCompile("io.qameta.allure:allure-attachments:$allureVersion")
testCompile("io.qameta.allure:allure-generator:$allureVersion")
testCompile("io.qameta.allure:allure-httpclient:$allureVersion")
}

Подключаем плагин для Allure и настраиваем его.

plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.11'
id 'io.qameta.allure' version '2.6.0'
}
...allure {
autoconfigure = true
version = '2.9.0'
clean = true
reportDir = file("$projectDir/build/allure-report")
resultsDir = file("$projectDir/build/allure-results")
downloadLinkFormat = 'https://dl.bintray.com/qameta/maven/io/qameta/allure/allure-commandline/%s/allure-commandline-%<s.zip'
}

Настраиваем JUnit.

test {
useJUnitPlatform()
systemProperty 'allure.results.directory', "$projectDir/build/allure-results"
testLogging {
events "PASSED", "FAILED", "SKIPPED", "STANDARD_OUT", "STANDARD_ERROR"
}
scanForTestClasses = false
testLogging.showStandardStreams = true
dependsOn 'cleanTest'
}

Пишем тесты

Создаём новый файл src/test/kotlin/TestCalc.kt

/**
* Калькулятор, который будем тестировать
*/
class Calc {
fun add(x: Int, y: Int) = x + y
fun div(x: Int, y:Int): Int = x / y
}
@DisplayName("Проверка калькулятора")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestCalc {
private val calc = Calc()
@Test
@DisplayName("Проверка сложения положительных чисел")
@Description("Описание теста")
@Feature("Сложение")
fun testAdd() {
assertThat(calc.add(1, 2)).isEqualTo(3)
}
@Test
@DisplayName("Проверка сложения отрицательных чисел")
@Feature("Сложение")
fun testAddBothNegative() {
assertThat(calc.add(-1, -2)).isEqualTo(-3)
}
@Test
@DisplayName("Проверка коммутативности")
@Feature("Сложение")
fun testAddCommutative() {
assertThat(calc.add(1, 2)).isEqualTo(calc.add(2, 1))
}
}

Аннотация @TestInstance(TestInstance.Lifecycle.PER_CLASS) необходима для того, чтобы была возможность использовать аннотации @AfterAll и @BeforeAll (подробнее тут)

Создаём новую конфигурацию запуска: Run — Edit Configurations… — + — Gradle. Gradle project = kotlinallure, Tasks = clean test allureReport

Запускаем тесты. В папке build/allure-report будет сформирован отчёт о тестировании. Открываем его на просмотр (allure-report/index.html):

Пишем ещё тесты

Напишем заведомо падающие тесты.

@Test
@DisplayName("Проверка деления на ноль")
@Feature("Деление")
fun testDivZero() {
assertThat(calc.div(5, 0))
}
@Test
@DisplayName("Проверка деления на отрицательное число")
@Feature("Деление")
fun testDivNegative() {
// тест падает
assertThat(calc.div(7, -2)).isEqualTo(-3.5)
}

Снова запускаем тесты и видим, что тестирование провалилось, а отчёт не сформировался.

Это произошло, потому что Gradle выполняет команды одну за одной (clean test allureReport) и останавливается, если какая-то из них завершилась ошибкой. В нашем случае провалилась команда test.

Чтобы сформировать отчёт, надо выполнить команду gradle allureReport в командной строке или запустить эту задачу из бокового меню Idea.

Результат:

Заключение

Подключить Allure легко, пользоваться тоже. У него есть модули для интеграции с Apache HttpClient-ом или OkHttp, в результате чего в отчёт автоматически будут сохраняться все исходящие и входящие http запросы, что пригодится при написании API тестов, также есть модуль для подключения к Selenide.

Подробнее про то, какие бывают аннотации и как ими пользоваться, можно прочитать в этой статье Allure-Framework. Работа с кодом.

Список литературы

--

--