Поговорим о том, как делать интеграционные тесты для Atlassian Jira Server. Для этих целей будем использовать библиотеки, которые предоставляет Atlassian: jira-func-test-plugin и jira-testkit-plugin.
Интеграционные тесты позволяют проверить работу плагинов Jira через экспортируемые плагином сервисы и пользовательский интерфейс Jira. Конечно, можно просто взять Selenium WebDriver и написать код для тестирования пользовательского интерфейса Jira. Однако в этом случае придется самому прописывать всю логику. Например, вход пользователя, ввод JQL-запроса, создание проекта, проверку элементов в форме создания задачи, управление разрешениями проекта и так далее. А библиотеки Atlassian предоставляют уже готовые для этого методы. Причем ваш код не нужно изменять при переходе на новую версию Jira, достаточно взять библиотеки Atlassian, подходящие для этой версии.
Есть три способа написать интеграционные тесты для Atlassian Jira, которые предоставляет Atlassian:
- Wired-тесты позволяют протестировать сервисы, которые ваш плагин экспортирует вовне. Пример такого теста здесь.
- Интеграционные тесты требуют для запуска плагины jira-func-test-plugin и jira-testkit-plugin. Эти тесты проверяют корректность работы пользовательского интерфейса Jira с помощью HTTP-запросов и ответов. Пример такого теста здесь.
- Page objects-тесты тоже проверяют пользовательский интерфейс Jira, но они работают через Selenium WebDriver.
Atlassian пишет, что тестирование пользовательского интерфейса через Page objects-тесты является более предпочтительным, чем тестирование через jira-func-test-plugin. Но в этой статье мы научимся писать интеграционные тесты с использованием этого плагина.
Исходный код разработанного в статье плагина с интеграционными тестами можно посмотреть здесь.
Что такое интеграционные тесты
Основное отличие интеграционных тестов от модульных в том, что модульные тесты не требуют наличие работающего экземпляра Jira, в отличие от интеграционных тестов. Поэтому необходимо, чтобы во время интеграционного тестирования был поднят экземпляр Jira. Тестирование может проходить как на локальном экземпляре (Jira, поднятая из нашего плагина с интеграционными тестами), так и на удалённом.
Давайте сначала напишем тесты для локального экземпляра, а затем я расскажу, как запустить эти же тесты на удалённом экземпляре.
Создаем Jira plugin
Плагин создается с помощью команды atlas-create-jira-plugin.
Добавляем зависимости к нашему плагину
В файл pom.xml нашего плагина необходимо добавить следующие зависимости:
<dependency>
<groupId>com.atlassian.jira.tests</groupId>
<artifactId>jira-testkit-client</artifactId>
<version>${jira.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-func-tests</artifactId>
<version>${jira.version}</version>
<scope>test</scope>
</dependency>
Эти зависимости позволят нам разрабатывать интеграционные тесты.
Устанавливаем необходимые плагины на локальный инстанс Jira
Для работы интеграционных тестов нам необходимо сделать так, чтобы при старте нашего локального экземпляра Jira на нём были бы установлены плагины jira-func-test-plugin и jira-testkit-plugin.
Для этого нужно в pom.xml в конфигурацию плагина maven-jira-plugin добавить следующие строчки:
<pluginArtifacts>
<pluginArtifact>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-func-test-plugin</artifactId>
<version>${jira.version}</version>
</pluginArtifact>
<pluginArtifact>
<groupId>com.atlassian.jira.tests</groupId>
<artifactId>jira-testkit-plugin</artifactId>
<version>7.12.3</version>
</pluginArtifact>
</pluginArtifacts>
Пишем тест
Создаем файл src/test/java/it/ru/matveev/alexey/jira/integrationtests/selenium/ExampleTest.java:
package it.ru.matveev.alexey.jira.integrationtests.selenium;
import com.atlassian.jira.functest.framework.BaseJiraFuncTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class ExampleTest extends BaseJiraFuncTest {
@Before
public void setup() {
backdoor.project().addProject("testproject", "TP", "admin");
backdoor.issues().createIssue("TP", "test issue");
}
@Test
public void goToIssueNavigator() {
navigation.login("admin");
navigation.issueNavigator().createSearch("project = TP");
tester.assertTextPresent("TP-1");
}
@After
public void cleanup() {
backdoor.project().deleteProject("TP");
}
По умолчанию у всех тестов должен быть суффикс
Test
, чтобы выполнились файлы с интеграционными тестами. Это можно переопределить с помощью параметра functionalTestPattern
в конфигурации плагина maven-jira-plugin.В вышеприведённом тесте мы проверяем работу поиска по запросу в Issue Navigator. В методе
setup
создаем проект с задачей, потом пишем запрос, который получает эту задачу, и проверяем, что мы действительно смогли её выбрать. Затем в методе cleanup
мы удаляем созданный проект.Запускаем тест
Тест запускается с помощью команды
atlas-integration-test
. По этой команде поднимается локальная Jira и на ней выполняются интеграционные тесты.Структура теста
Существует несколько классов, от которых можно наследовать при написании интеграционных тестов:
BaseJiraEmailTest
, BaseJiraFuncTest
, BaseJiraRestTest
.Самым используемым классом является
BaseJiraFuncTest
. Он позволяет протестировать всю необходимую функциональность.В этом классе существуют такие переменные класса:
backdoor
: позволяет выполнять административные функции, такие как управление проектами, индексами, схемами разрешений проектов, пользователями, и так далее.navigation
: позволяет перемещаться в пользовательском интерфейсе. Также позволяет входить и выходить из Jira под желаемым пользователем.tester
: позволяет работать со страницами: устанавливать значения полей, нажимать на кнопки, проверять, существует ли поле в форме, и так далее.
Интеграционные тесты обращаются к Jira под пользователем
admin
с паролем admin
, поэтому для работы интеграционных тестов в Jira должен быть этот пользователь с таким паролем.При использовании команды
navigation.login("username")
пароль пользователя, под которым вы входите в Jira, должен совпадать с именем пользователя.Запуск интеграционных тестов на удаленном экземпляре
Чтобы интеграционные тесты запустились на удаленном экземпляре, на нём должны быть установлены плагины jira-func-test-plugin и jira-testkit-plugin.
Кроме того, в плагине с интеграционными тестами необходимо внести изменения в файл src/test/resources/localtest.properties:
jira.protocol = http
jira.host = remote-instance
jira.port = 2991
jira.context = /jira
jira.edition = all
jira.xml.data.location = src/test/xml
Теперь после запуска команды
atlas-integration-test
тесты будут запущены на удаленном экземпляре.Примеры тестов
Хорошая новость в том, что разработчики пакета jira-func-tests включили в этот пакет большое количество примеров с тестами на все случаи жизни. Они находятся в пакете webtests.
Удачи с тестированием Jira!
insomnia77
А зачем тестировать плагины Jira? Это же задача разработчиков плагинов. Или речь идёт о том, когда ты сам написал плагин и нужно его протестировать?
aleme Автор
Речь идет о своих доработках и кастомизациях
FoterIS
Довольно много функционала для Jira разрабатывается внутреней командой разработки.