---
title: Основы CI и AQA
seo:
  title: Основы CI и AQA — QA
  description: Тема «Основы CI и AQA» для собеседования QA. Что такое CI? Как автоматическое тестирование интегрируется в CI?
---

[Все темы QA](/qa)

## <strong>Что такое CI?</strong> [#q-14bee738d69b815eb98ce298e257646c]

<strong>CI</strong> или <strong>Непрерывная интеграция</strong> (Continuous
Integration) — это практика в разработке программного обеспечения, при которой
разработчики регулярно, часто несколько раз в день, интегрируют свои изменения в
общий репозиторий проекта. После каждой интеграции автоматически выполняются
различные тесты и процессы для проверки нового кода. Вот ключевые аспекты
CI&#58;

{/* prettier-ignore */}
1. <strong>Автоматическое тестирование</strong>&#58;

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

1. <strong>Быстрая обратная связь</strong>&#58;

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

1. <strong>Уменьшение риска</strong>&#58;

    - Частая интеграция сокращает риски, связанные с объединением больших объемов изменений, упрощает устранение конфликтов и предотвращает "эффект дрейфа кода".

1. <strong>Улучшение производительности процесса разработки</strong>&#58;

    - Помогает поддерживать высокую производительность процесса разработки благодаря автоматизации рутинных задач и раннему выявлению проблем.

1. <strong>Интеграция с инструментами</strong>&#58;

    - CI обычно интегрируется с другими инструментами, такими как системы управления версиями, инструменты непрерывной доставки (CD), системы мониторинга и т.д.

Популярные инструменты для непрерывной интеграции включают Jenkins, Travis CI, GitLab CI, CircleCI и другие. Эти инструменты помогают автоматизировать процесс CI, делая его более эффективным и менее подверженным ошибкам, которые могут возникнуть при ручном выполнении процессов.

:::note[Ссылки для изучения]

1. [Что такое CI](https://habr.com/ru/articles/508216/)
   :::

---

## <strong>Как автоматическое тестирование интегрируется в CI?</strong> [#q-14bee738d69b8139b796dc9c2bb43427]

Автоматическое тестирование играет ключевую роль в процессе непрерывной интеграции (CI), обеспечивая быструю и надежную проверку кода, который разработчики регулярно сливают в общий репозиторий. Вот как автоматическое тестирование интегрируется в процесс CI&#58;

{/* prettier-ignore */}
1. <strong>Интеграция с системой контроля версий</strong>&#58;

    - Процесс CI начинается с того, что система контроля версий (например, Git) оповещает CI-сервер (например, Jenkins, GitLab CI) о новом коммите в репозитории.

1. <strong>Автоматический запуск тестов</strong>&#58;

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

1. <strong>Использование тестовых сценариев</strong>&#58;

    - Тестовые сценарии, написанные на таких инструментах, как Selenium, JUnit, TestNG и другие, выполняются для проверки функциональности и производительности приложения.

1. <strong>Отчеты и уведомления</strong>&#58;

    - После выполнения тестов CI-система генерирует отчеты о результатах тестирования, которые могут включать информацию об ошибках, проблемах с производительностью и других потенциальных проблемах. В случае обнаружения ошибок разработчики получают уведомления.

1. <strong>Фиксация ошибок</strong>&#58;

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

1. <strong>Регрессионное тестирование</strong>&#58;

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

Автотесты в CI дают быструю обратную связь и уменьшают риск регрессий. Для доверия к результату нужны подходящие проверки, стабильное окружение и анализ падений; зелёный статус не доказывает отсутствие всех ошибок.

:::note[Ссылки для изучения]

1. [Интеграция AQA в CI](https://kaze.gitbook.io/qa-theory/ci/kak-avtomaticheskoe-testirovanie-integriruetsya-v-ci)
   :::

---

## <strong>Как настроить</strong> <code>Job</code> <strong>или</strong> <code>Pipeline</code> <strong>на знакомом вам CI-инструменте?</strong> [#q-14bee738d69b81b0b9e2c03b6dcf1f1f]

Для настройки <code>Job</code> или <code>Pipeline</code> на одном из самых популярных CI-инструментов — Jenkins — можно следовать следующему пошаговому процессу. Jenkins предоставляет гибкие возможности для настройки заданий (jobs) и пайплайнов (pipelines), позволяя автоматизировать широкий спектр задач, от сборки проектов до их тестирования и развертывания.

#### Настройка <code>Job</code> в <code>Jenkins</code>&#58;

{/* prettier-ignore */}
1. <strong>Установка и запуск</strong> <code>Jenkins</code>&#58;

    - Сначала необходимо установить Jenkins на сервер или локальную машину. После установки Jenkins будет доступен через веб-интерфейс, обычно на порту 8080.

1. <strong>Создание нового</strong> <code>Job</code>&#58;

    - В веб-интерфейсе Jenkins перейдите в "New Item" на главной панели.

    - Введите имя для новой задачи (job) и выберите тип задачи, например, "Freestyle project" для простой задачи или "Pipeline" для более сложных сценариев.

1. <strong>Конфигурация</strong> <code>Job</code>&#58;

    - <strong>Source Code Management</strong>&#58; Настройте доступ к репозиторию, указав URL и метод аутентификации для Git или других систем контроля версий.

    - <strong>Build Triggers</strong>&#58; Определите, когда должна запускаться сборка — например, при каждом коммите в репозиторий или по расписанию (cron syntax).

    - <strong>Build Environment</strong>&#58; Настройте окружение, например, определите переменные окружения.

    - <strong>Build Steps</strong>&#58; Добавьте шаги сборки, такие как сборка проекта с помощью Maven, выполнение скриптов shell или запуск тестов.

1. <strong>Сохранение и запуск</strong>&#58;

    - Сохраните настройки и запустите задачу вручную, нажав "Build Now", или дождитесь, пока триггер автоматически инициирует сборку.

#### Настройка <code>Pipeline</code> в <code>Jenkins</code>&#58;

{/* prettier-ignore */}
1. <strong>Создание</strong> <code>Pipeline</code>&#58;

    - Также начните с "New Item", но выберите "Pipeline" в качестве типа проекта.

1. <strong>Конфигурация</strong> <code>Pipeline</code>&#58;

    - <strong>Pipeline Definition</strong>&#58; Вы можете настроить пайплайн напрямую в Jenkins через "Pipeline script" или "Pipeline script from SCM", что позволяет управлять скриптом пайплайна через систему контроля версий.

    - Введите скрипт Pipeline, используя язык описания пайплайна Groovy. Пример простого скрипта&#58;

        ```groovy
        pipeline {
            agent any
            stages {
                stage('Build') {
                    steps {
                        echo 'Building..'
                        // команды сборки
                    }
                }
                stage('Test') {
                    steps {
                        echo 'Testing..'
                        // команды тестирования
                    }
                }
                stage('Deploy') {
                    steps {
                        echo 'Deploying..'
                        // команды развертывания
                    }
                }
            }
        }
        ```

1. <strong>Сохранение и выполнение</strong>&#58;

    - Сохраните настройки и запустите Pipeline, используя "Build Now" или дождитесь автоматического запуска.

Эти шаги предоставляют основу для настройки автоматизированных задач в Jenkins, позволяя эффективно интегрировать CI в процессы разработки и развертывания программного обеспечения.

:::note[Ссылки для изучения]

1. [Настройка Job/Pipeline в CI](https://kaze.gitbook.io/qa-theory/ci/kak-nastroit-job-ili-pipeline-na-znakomom-vam-ci-instrumente)
   :::

---

## <strong>Какие инструменты для генерации репорта после выполнения автоматических тестов вы знаете?</strong> [#q-14bee738d69b819fb7b3f060671a3897]

Генерация отчётов о результатах тестирования является ключевым аспектом автоматизации тестов, поскольку она обеспечивает обратную связь, необходимую для оценки качества ПО. Вот несколько популярных инструментов для генерации отчётов после выполнения автоматических тестов&#58;

{/* prettier-ignore */}
1. <code>Allure Framework</code>&#58;

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

1. <code>Extent Reports</code>&#58;

    - Расширяемый генератор отчетов, который может быть интегрирован с фреймворками, такими как TestNG и JUnit. Extent Reports предоставляет интерактивные отчёты с графиками, логами и скриншотами.

1. <code>ReportPortal</code>&#58;

    - Открытый и масштабируемый инструмент управления результатами тестирования с AI-поддержкой для анализа результатов. ReportPortal собирает данные из разных источников и предоставляет аналитику в режиме реального времени.

1. <code>Serenity</code> <strong>(ранее Thucydides)</strong>&#58;

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

1. <code>TestNG Reports</code>&#58;

    - Встроенная функциональность в TestNG, которая автоматически генерирует HTML-отчёты о результатах тестов. Отчёты включают информацию о пройденных, проваленных и пропущенных тестах.

1. <code>JUnit Reports</code>&#58;

    - JUnit может генерировать XML-отчёты, которые затем можно визуализировать с помощью других инструментов, таких как Jenkins, для просмотра результатов тестирования.

1. <code>Cucumber Reports</code>&#58;

    - Cucumber поддерживает создание отчётов в форматах JSON, HTML, и XML. Эти отчёты могут быть дополнительно обработаны для получения более детализированных визуальных представлений.

1. <code>Jest</code>&#58;

    - Для JavaScript и React-приложений Jest может генерировать покрытие кода и результаты тестирования в удобочитаемых форматах.

Эти инструменты помогают организациям улучшать качество ПО, предоставляя детальное понимание результатов тестирования и помогая определять тренды и паттерны в рамках процесса разработки.

:::note[Ссылки для изучения]

1. [Тест-репортеры нового поколения](https://habr.com/ru/companies/jugru/articles/337386/)
   :::

---

## <strong>Какую информацию должен содержать отчет о выполнении автоматических тестов?</strong> [#q-14bee738d69b816aab1ddfed516eaf77]

Отчёт о выполнении автоматических тестов должен предоставлять подробную и легко интерпретируемую информацию, которая помогает командам быстро оценить состояние тестируемого ПО. Вот основные элементы, которые должны быть включены в такой отчёт&#58;

{/* prettier-ignore */}
1. <strong>Общая статистика</strong>&#58;

    - Количество выполненных тестов.

    - Количество успешных (пройденных) тестов.

    - Количество неудачных (проваленных) тестов.

    - Количество пропущенных тестов.

1. <strong>Детализация по каждому тесту</strong>&#58;

    - Название теста и краткое описание его цели.

    - Результат выполнения теста (успешно, не успешно, пропущено).

    - Время запуска и продолжительность теста.

1. <strong>Сообщения об ошибках и исключениях</strong>&#58;

    - Подробные сообщения об ошибках для проваленных тестов.

    - Стек вызовов (stack trace), если это применимо.

1. <strong>Скриншоты и логи</strong>&#58;

    - Скриншоты интерфейса в момент провала теста, если это применимо.

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

1. <strong>Метрики покрытия кода</strong>&#58;

    - Статистика покрытия кода тестами, указывающая процентные соотношения покрытия различных участков кода.

1. <strong>Информация о тестовом окружении</strong>&#58;

    - Версии операционной системы, браузеров, и другого ПО, используемого в тестах.

    - Конфигурация тестового стенда или параметры среды.

1. <strong>Исторические данные и тенденции</strong>&#58;

    - Сравнение текущих результатов с предыдущими запусками для отслеживания прогресса и выявления тенденций.

1. <strong>Рекомендации и действия</strong>&#58;

    - Предложения по исправлению ошибок и улучшению качества кода на основе результатов тестов.

    - Планы на дальнейшие тесты или испытания.

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

:::note[Ссылки для изучения]

1. [Отчёт о выполнении AQA](https://kaze.gitbook.io/qa-theory/ci/kakuyu-informaciyu-dolzhen-soderzhat-otchet-o-vypolnenii-avtomaticheskikh-testov)
   :::
