Создание тикетов в Jira

В процессе тестирования веб-приложений с использованием WebdriverIO часто возникает необходимость в автоматическом создании тикетов для отслеживания найденных дефектов или багов. В этом разделе рассмотрим, как можно интегрировать WebdriverIO с Jira для автоматического создания тикетов при выявлении ошибок.

Зачем нужна интеграция с Jira?

Jira является одним из самых популярных инструментов для управления проектами и отслеживания багов. Интеграция WebdriverIO с Jira помогает разработчикам и тестировщикам быстро и эффективно создавать тикеты прямо из тестов, тем самым автоматизируя процесс управления дефектами.

Прямое создание тикетов из тестов позволяет:

  • Ускорить процесс фиксации багов.
  • Минимизировать ошибки, связанные с вручную созданными тикетами.
  • Снизить время между обнаружением проблемы и её фиксацией.

Подготовка

Для интеграции WebdriverIO с Jira потребуется несколько вещей:

  1. Доступ к Jira API — необходимо получить API ключ для авторизации.
  2. WebdriverIO проект — базовая настройка проекта WebdriverIO.
  3. Node.js пакет для работы с Jira API — один из популярных пакетов — jira-client.

Установка необходимых пакетов

Для начала необходимо установить пакет для взаимодействия с Jira API. Для этого в корневой директории проекта выполните команду:

npm install jira-client --save

Данный пакет позволяет взаимодействовать с Jira, создавая тикеты и выполняя другие действия через API.

Настройка клиента Jira

Чтобы настроить взаимодействие с Jira, нужно создать объект клиента, используя ваш API ключ, логин и URL вашей Jira инстанции. Для этого создадим файл jiraClient.js:

const JiraClient = require('jira-client');

const jira = new JiraClient({
  protocol: 'https',
  host: 'your-jira-domain.atlassian.net',
  username: 'your-email@example.com',
  password: 'your-jira-api-token',
  apiVersion: '2',
  strictSSL: true
});

module.exports = jira;

В этом примере:

  • protocol — используется HTTPS для безопасности.
  • host — URL вашей Jira инстанции.
  • username и password — ваш email и API токен для авторизации.
  • apiVersion — версия API Jira, по умолчанию используется версия 2.

Создание тикетов в Jira

Теперь можно перейти к созданию тикетов в Jira. Для этого нужно будет вызвать метод addNewIssue() из клиента Jira. В тестах WebdriverIO это можно делать в блоках обработки ошибок, например, в случае, если тест не проходит.

Пример создания тикета:

const jira = require('./jiraClient');

function createJiraTicket(errorMessage) {
  const issue = {
    fields: {
      project: {
        key: 'PROJ'  // Код вашего проекта в Jira
      },
      summary: `Ошибка в тесте: ${errorMessage}`,
      description: `Подробности: ${errorMessage}`,
      issuetype: {
        name: 'Bug'  // Тип тикета, например Bug
      }
    }
  };

  jira.addNewIssue(issue)
    .then(issue => {
      console.log(`Тикет создан: ${issue.key}`);
    })
    .catch(err => {
      console.error('Не удалось создать тикет в Jira:', err);
    });
}

Этот код создает тикет с типом Bug и передает в него описание ошибки. В случае успешного создания тикета выводится его ключ, который можно использовать для дальнейшего отслеживания.

Интеграция с тестами WebdriverIO

Теперь давайте интегрируем создание тикетов с тестами WebdriverIO. Для этого можно использовать обработчики ошибок в тестах. Пример:

describe('Тестирование авторизации', () => {
  it('Должна быть возможность войти в систему с правильными данными', () => {
    browser.url('/login');
    $('#username').setValue('user');
    $('#password').setValue('password');
    $('#loginButton').click();

    const errorMessage = $('.error').getText();

    if (errorMessage) {
      createJiraTicket(errorMessage);
      throw new Error(`Тест не прошел: ${errorMessage}`);
    }

    expect(browser).toHaveUrl('/dashboard');
  });
});

В этом примере, если на странице появляется сообщение об ошибке, создается тикет в Jira с описанием ошибки. В случае, если тест не проходит, выбрасывается исключение, чтобы тест не продолжался, а тикет был зафиксирован.

Добавление метаданных в тикет

Важным моментом является возможность добавить дополнительные метаданные в тикет для упрощения его обработки. Например, можно передавать информацию о версии приложения, в котором была найдена ошибка, или ссылку на коммит, который вызвал проблему.

Пример добавления метаданных:

function createJiraTicket(errorMessage, browserVersion, commitHash) {
  const issue = {
    fields: {
      project: {
        key: 'PROJ'
      },
      summary: `Ошибка в тесте: ${errorMessage}`,
      description: `Подробности: ${errorMessage}\nВерсия браузера: ${browserVersion}\nКоммит: ${commitHash}`,
      issuetype: {
        name: 'Bug'
      }
    }
  };

  jira.addNewIssue(issue)
    .then(issue => {
      console.log(`Тикет создан: ${issue.key}`);
    })
    .catch(err => {
      console.error('Не удалось создать тикет в Jira:', err);
    });
}

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

Обработка успешных и неуспешных тестов

Важно не только создавать тикеты для багов, но и иметь возможность отслеживать успешные тесты. Это можно делать с помощью WebdriverIO событий.

afterTest: function(test) {
  if (test.passed) {
    console.log(`Тест ${test.title} прошел успешно.`);
  } else {
    createJiraTicket(test.error.message, browser.version, process.env.GIT_COMMIT);
  }
}

Этот код срабатывает после каждого теста и проверяет его результат. Если тест не прошел, создается тикет в Jira.

Заключение

Интеграция WebdriverIO с Jira позволяет существенно улучшить процесс тестирования, автоматизируя создание тикетов для найденных дефектов. Важно не только передавать минимальную информацию об ошибке, но и обогатить тикет дополнительными данными, такими как версия браузера, коммит или другие контексты. Это ускоряет процесс решения проблем и делает командную работу более слаженной.