Системы управления тестированием (TMS) позволяют тестировать микросервисы (изоляция, взаимодействие, стабильность); мобильные приложения (UI-тесты, совместимость, производительность); инфраструктуру (нагрузочное тестирование, устойчивость, виртуализация); безопасность (анализ уязвимостей, защита от атак); документацию и артефакты (трассировка тестов, хранение документации, формирование отчетов).
Хорошо, если управление тестами, анализ результатов, запуск автотестов на CI/CD, багрепорт организованы в едином конвейере, что позволит не только видеть полную картину качества продукта, но и управлять ей.
Интеграция с AI в TMS позволяет генерировать тесты на основе требований, сэкономить время, сформировать корнер-кейсы, сократить time-to-market.
Технологии TMS позволяют снижать риски, повышать качество, экономить ресурсы, сокращать время вывода продукта на рынок и увеличивать удовлетворенность клиентов. Подробности — далее в этой статье.
- Инфраструктурное тестирование и DevOps
- Как тестировать
- Что проверяется
- Типы тестов
- Разделение по слоям
- Возможные проблемы
- Тестирование микросервисов
- Проверка отдельных сервисов и их взаимодействий
- Работа с независимыми CI-пайплайнами
- Маппинг переменных окружения
- Маппинг тестов на конкретные микросервисы
- Изоляция результатов тестов
- Триггеры и запуск тестов в независимых сервисах
- Покрытия по каждому микросервису
- Тестирование API
- Резюме
- Тестирование мобильных приложений
- Сложности тестирования мобильных приложений
- Инструменты автоматизации тестирования
- Матрица окружений
- Кэш зависимостей
- Использование эмуляторов и облачных платформ (Device Farms)
- Резюме
- Тестирование производительности
- Инструменты для тестирования производительности
- Диаграммы флакеров (Flaker Diagrams)
- Динамика длительности тестов от раза к разу
- Резюме
- Тестирование безопасности
- Уникальность ниши ИБ
- Интеграция с корпоративными системами аутентификации
- Ссылки на CVE и статусы исправления
- Отслеживание и мониторинг уязвимостей
- Резюме
- Тестирование юзабилити (UI, удобство интерфейса)
- Как тестировать
- a11y (Accessibility)
- Принципы WCAG
- Автоматизация и управление параметрами запуска
- Заключение
Инфраструктурное тестирование и DevOps
Инфраструктурное тестирование — это проверка и верификация работоспособности и стабильности инфраструктуры, на которой размещено приложение. При этом применяются различные виды тестирования.
Цель — убедиться, что инфраструктура способна выдержать планируемую нагрузку, соответствует требованиям безопасности и доступна круглосуточно. В рамках DevOps (Development & Operations) тестируются как сами приложения, так и окружающая их инфраструктура.
Как тестировать
Весь код (Terraform, Ansible, CloudFormation и т.д.) должен храниться в системе контроля версий (например, Git).
На каждое изменение в коде (merge/pull request) должен автоматически запускаться пайплайн (в GitLab CI/CD, GitHub Actions, Jenkins и т.п.).
Федор Алексеев, владелец продукта Сфера.Функциональное тестирование:
Проверяйте инфраструктуру в «песочнице», максимально похожей на боевую/продуктивную среду, и устраивайте ей «стресс-тесты».
Современная инфраструктура управляется через код (Terraform, Ansible и т. п.). Хорошая практика — поднимать временную тестовую среду при каждом изменении и проверять:
- корректность настроек безопасности,
- возможность быстрого восстановления после сбоев,
- соответствие корпоративным правилам.
Дальше можно включить «хаос-тестирование» — искусственно выключать сервер или замедлять сеть и смотреть, как система реагирует. Цель — убедиться, что сервисы сами восстанавливаются или быстро переключаются на резерв.
Пример: если при падении одного дата-центра приложение продолжает работать из другого, значит инфраструктура настроена правильно.
Пайплайн должен дестроить и заново создавать тестовую среду. Это проверяет, что ваш код способен создать инфраструктуру с нуля, а не только дополнить существующую.
Каждая тестовая среда должна быть изолирована, чтобы не мешать другим разработчикам или процессам. Используйте уникальные идентификаторы (имена проектов, теги, неймспейсы).
Что проверяется
- Конфигурация серверов и сетей.
- Версии и совместимость используемых компонентов.
- Установка и обновление пакетов и зависимостей.
- Скриптинг и автоматизация деплоймента.
- Доступность и производительность систем.
- Работа системы при отключении ЦОД
Типы тестов
- Тестирование конфигурации: проверка правильности установленных параметров и настроек (например, портов, SSL/TLS сертификатов, DNS-записей).
- Нагрузочное тестирование: проверка инфраструктуры на предмет способности выдерживать запланированную нагрузку.
- Тестирование безопасности: проверка уязвимостей и соответствий требованиям безопасности (например, с использованием scanners).
- Integration Tests: проверка совместимости и интеграции между компонентами инфраструктуры (например, микросервисами).
- Тест на отказоустойчивость: проверка работы системы при отсутствии связи с одним из ЦОД.
- Хаос-тест: отключение и/или замедление серверов; отслеживание переключения на резерв.
Разделение по слоям
- Infrastructure layer: проверка физической инфраструктуры (серверы, сети, VPN).
- API layer: проверка API-ответов и взаимодействия между сервисами.
- UI layer: проверка пользовательского интерфейса и взаимодействия с ним.
Возможные проблемы
- Неинициализированная переменная среды: отсутствие переменной окружения, необходимой для работы приложения.
- Нестыковка микросервисов: несоответствие между версиями микросервисов, что приводит к конфликтам API.
- Несоответствие требованиям безопасности: нарушение политик безопасности и стандартов.
Инфраструктурное тестирование помогает обеспечить стабильную и безопасную работу инфраструктуры, поддерживающей приложение.
Тестирование микросервисов
Микросервисная архитектура усложняет процесс тестирования, так как приложение делится на множество маленьких независимых сервисов, работающих совместно. Главные особенности:
- Независимая природа сервисов: Каждый микросервис имеет собственную инфраструктуру, технологию и базу данных, что создает сложности при взаимодействии и совместном тестировании.
- Возрастающее количество зависимостей: Возникает необходимость проверки взаимодействия между сервисами, так как изменение одного может повлиять на работу других.
- Повышенный риск сбоев: Из-за большого количества связей между сервисами возрастает вероятность ошибок, вызванных несогласованными действиями или некорректными контрактами API.
Проверка отдельных сервисов и их взаимодействий
Один из способов тестирования микросервисов — раздельное тестирование каждого сервиса и проверка их взаимодействий:
- Тестирование отдельного сервиса: Тестируются индивидуальные сервисы в изоляции, что позволяет выявить проблемы внутри конкретного компонента.
- Интеграционное тестирование: Проверяется взаимодействие между несколькими микросервисами. Например, если один сервис отвечает за вычисления, а другой за сохранение данных, проверяется корректность их взаимодействия.
Федор Алексеев, владелец продукта Сфера.Функциональное тестирование:
Совет: проверяйте работу микросервисов через «контракты» между ними.
Микросервисы редко работают в одиночку — обычно они обмениваются данными с другими сервисами. Чтобы избежать сюрпризов, для каждого взаимодействия стоит описывать «контракт» — правила обмена данными (например, в формате OpenAPI). Далее тесты должны проверять: если один сервис меняется, не ломает ли он работу других. Это называется consumer-driven contract testing. Таким образом, вы ловите ошибки ещё на этапе сборки кода, а не после релиза.
Пример: сервис «Заказ» ждёт от сервиса «Оплата» определённый ответ. Если разработчик изменил формат ответа, тесты тут же покажут проблему, и релиз не попадёт в продакшн с багом.
Самая большая опасность в микросервисной архитектуре — не падение одного сервиса, а незаметный разрыв связей между ними. Изменение в одном сервисе может быть корректным само по себе, но «ломать» всех его потребителей.
Работа с независимыми CI-пайплайнами
Для тестирования микросервисов важно организовать независимые пайплайны CI/CD (continuous integration/continuous delivery), чтобы каждый сервис мог проходить тесты и разворачиваться отдельно от других. Это помогает избежать зависимостей и позволяет локализовать ошибки.
Методология Consumer-Driven Contract (CDC) Testing позволяет находить проблемы на самых ранних этапах — еще на этапе сборки кода, а не после развертывания в продакшен. Это радикально снижает стоимость исправления ошибок и ускоряет разработку.
CDC-тестирование — это не единичный тест, а непрерывный процесс:
-
Потребитель определяет и публикует контракт своих ожиданий.
-
Поставщик в своем CI-пайплайне постоянно проверяет, что его изменения не нарушают контракты всех его известных потребителей.
-
Если контракт нарушен, пайплайн поставщика немедленно падает, не давая выпустить ломающее изменение.
Маппинг переменных окружения
Каждая служба может требовать уникальной конфигурации и переменных окружения. Необходимо четко регулировать и настраивать переменные, чтобы тесты проходили одинаково и предсказуемо на любых окружениях (локальных, staging, production).
Маппинг тестов на конкретные микросервисы
Важна правильная привязка тестов к конкретным микросервисам. Это позволяет сократить время на диагностику ошибок и повышает прозрачность процесса тестирования. Определите, какие тесты касаются какого сервиса, чтобы минимизировать пересекающиеся и дублирующие тесты.
Изоляция результатов тестов
Каждое тестирование микросервиса должно проводиться изолированно, чтобы не допустить влияния одного сервиса на другой. Используйте mock-обработки или заглушки, чтобы смоделировать зависимые сервисы и изолировать их от тестов.
Триггеры и запуск тестов в независимых сервисах
Автономные триггеры тестов позволяют инициировать запуск тестов при изменениях в любом микросервисе. Независимо от размера системы, любое изменение должно незамедлительно запускать тестирование соответствующего сервиса.
Покрытия по каждому микросервису
Оценка покрытия тестов по каждому отдельному микросервису — необходимое условие для гарантирования качества. Желательно стремиться к достижению высокого уровня покрытия кода и функционала каждым сервисом индивидуально.
Тестирование API
Так как большинство взаимодействий между микросервисами осуществляются через API, особое внимание следует уделить тестированию API каждого сервиса. Проверяйте корректность ответов, время отклика, валидность данных и совместимость контрактов API.
Резюме
Микросервисы требуют особого подхода к тестированию из-за своей природы: каждый сервис автономен, но тесно связан с остальными. Тестирование микросервисов требует глубокого анализа зависимостей, точной настройки CI/CD-пайплайнов, изоляции тестов и качественного покрытия каждого компонента.
Тестирование мобильных приложений
Тестирование мобильных приложений отличается от тестирования обычных веб-приложений и настольных программ. Основные отличия заключаются в большем разнообразии аппаратных платформ, операционных систем, экранных разрешений и вариантов использования устройств. Кроме того, необходимо учитывать низкое качество мобильного интернета, разряд батареи, переключение между Wi-Fi и мобильной сетью, push-уведомления и многое другое.
Сложности тестирования мобильных приложений
- Огромное разнообразие устройств и платформ: Существует тысячи моделей смартфонов и планшетов с разными размерами экрана, плотностью пикселей, процессорами и памятью.
- Разница в версиях операционной системы: Одну и ту же версию Android или iOS могут воспринимать по-разному на разных устройствах.
- Внешние зависимости: Технологии Bluetooth, NFC, GPS, камера, микрофон и сенсорные экраны могут давать непредсказуемые результаты.
- Аппаратные ограничения: Разряд аккумулятора, нехватка оперативной памяти, перегрев устройства.
- Скорость и стабильность сети: Неустойчивое соединение, низкая скорость Интернета или отключение сигнала могут повлиять на поведение приложения.
Инструменты автоматизации тестирования
Существует множество инструментов для автоматизации тестирования мобильных приложений:
- Appium: Открытый фреймворк для автоматизации тестирования нативных, гибридных и веб-приложений на Android и iOS.
- Espresso: Официальный инструмент Google для тестирования Android-приложений.
- XCUITest: Инструмент Apple для автоматизации тестирования iOS-приложений.
- Calabash: Инструмент для автоматизации нативных и гибридных приложений на обеих платформах.
- Robot Framework Mobile Library: Библиотека для Python, позволяющая писать автотесты для мобильных приложений.
Матрица окружений
Матрица окружений — это таблица, которая показывает, на каких устройствах, версиях ОС и сетевых условиях нужно тестировать приложение. Ее составляют на основе наиболее распространенных устройств и наиболее популярных версий операционных систем. Например:
- Samsung Galaxy S20/S21/S22 (Android 10, 11, 12)
- iPhone 11 Pro Max/iPhone 12 Mini/iPhone 13 Pro (iOS 14, 15)
- Huawei Mate/Poco/Xiaomi Mi Notebook (Android 9, 10, 11)
Такая матрица позволяет эффективно распределить тестирование и убедиться, что приложение работает на большинстве устройств.
Кэш зависимостей
Особенностью мобильных приложений является сильное влияние кэша и локальных данных. Если приложение не очищает кэш или хранит неправильные данные, возможны странные ошибки и неправильное поведение. При проведении тестов важно учитывать очистку кэша, сброс данных, удаление cookies и локальных хранилищ.
Использование эмуляторов и облачных платформ (Device Farms)
- Эмуляторы: Бесплатные и бесплатные инструменты для эмуляции мобильных устройств на компьютере. Примеры: Android Emulator (для Android), Simulator (для iOS).
- Device Farms: Облачные платформы, предоставляющие удаленный доступ к физическим устройствам для тестирования. Примеры: AWS Device Farm, BrowserStack, Sauce Labs, Perfecto Mobile.
Эти инструменты позволяют тестировать приложения на сотнях реальных устройств без необходимости приобретать и поддерживать физическое оборудование.
Резюме
Тестирование мобильных приложений — непростая задача, требующая тщательного планирования, хороших инструментов и аккуратного подхода. Учитывая разнообразие устройств и операционных систем, сложности тестирования нельзя недооценивать. Однако с правильным выбором инструментов и методов можно существенно повысить качество мобильных приложений и удовлетворить потребности пользователей.
Тестирование производительности
Тестирование производительности — это процесс проверки поведения приложения или системы при увеличенных нагрузках, который позволяет оценить, насколько стабильно и быстро приложение справляется с нагрузкой, а также выявить узкие места и точки деградации производительности.
Инструменты для тестирования производительности
- Apache JMeter: Универсальный инструмент для нагрузочного тестирования web-приложений, REST/SOAP-сервисов, FTP и других протоколов.
- Gatling: High-performance, opensource toolkit for load testing written in Scala, поддерживающий запись и воспроизведение сценариев.
- Locust: Open-source framework для тестирования нагрузки, основанный на Python, позволяющий создавать многопоточные user-like нагрузки.
- BlazeMeter: Cloud-based service для нагрузочного тестирования, работающий поверх Apache JMeter и других инструментов.
- Neotys NeoLoad: Commercial solution для нагрузочного тестирования, предоставляющая богатый набор опций и аналитики.
Диаграммы флакеров (Flaker Diagrams)
Диаграммы флакеров — это особый вид графиков, отображающих разброс результатов тестов по времени. Эти диаграммы полезны для выявления нестабильных тестов, называемых flaky-тестами, которые время от времени дают разные результаты при одинаковых входных данных и условиях.
Графики показывают среднюю длительность выполнения тестов и размах вариаций. Это позволяет выявить нестабильно проходящие тесты и устранить их, чтобы улучшить надежность тестирования.
Динамика длительности тестов от раза к разу
Наблюдение динамики длительности тестов — это полезный подход для выявления проблем производительности и регрессий. Анализируя разницу во времени выполнения тестов, можно выявить узкие места, провалы в производительности и зависимости от окружения.
Для анализа используют:
- Среднее время выполнения: Средняя длительность теста за период времени.
- Медианное время выполнения: медиана всех замеров времени выполнения теста.
- Коэффициент вариации: мера относительной изменчивости, показывающая стабильность выполнения теста.
Эти данные позволяют определить:
- Какие тесты стали медленными и требуют оптимизации.
- Есть ли признаки деградации производительности.
- Являются ли тесты стабильными или подвержены колебаниям.
Резюме
Тестирование производительности, анализ диаграмм флакеров и мониторинг динамики длительности тестов — это важные мероприятия, направленные на повышение стабильности и производительности приложений. Использование специализированных инструментов и техник позволяет выявить и устранить узкие места, обеспечить хорошее пользовательское впечатление и повысить общую надежность продукта.
Тестирование безопасности
Тестирование безопасности — это процесс выявления уязвимостей и угроз в программном обеспечении и инфраструктуре. Цель тестирования — защитить продукт от атак злоумышленников и минимизировать последствия киберинцидентов.
Уникальность ниши ИБ
Информационная безопасность (ИБ) стала критическим фактором успеха для бизнеса. Компании осознают важность безопасного продукта и инфраструктуры, поскольку атаки хакеров становятся все более массированными и опасными. Решения в сфере ИБ пользуются огромным спросом, особенно в финансовой сфере, здравоохранении и государственном секторе.
Интеграция с корпоративными системами аутентификации
Интеграция с корпоративными системами аутентификации (LDAP, Active Directory, OAuth и др.) позволяет соблюдать политику безопасности компании и упрощает процесс идентификации пользователей. Это снижает риски, связанные с поддельными аккаунтами и злоупотреблением правами доступа.
LDAP (Lightweight Directory Access Protocol) — это стандартный протокол для доступа к каталогам пользователей и их атрибутов, применяемый для централизованной аутентификации и управления доступом. LDAP позволяет безопасно запрашивать и изменять записи о пользователях в каталоге, обеспечивая унификацию доступа к различным системам и приложениям.
Active Directory (AD) — это фирменная реализация Microsoft протокола LDAP, предназначенная для Windows Server. AD используется для управления пользователями, группами, компьютерами и политиками безопасности в домене Windows. Она предоставляет возможность централизованного управления доступом и безопасности в корпоративных сетях.
OAuth (Open Authorization) — это открытый стандарт для делегирования доступа к защищённым ресурсам. OAuth позволяет пользователям разрешать доступ к своим данным сторонним приложениям без необходимости делиться паролем. Наиболее распространённой реализацией является OAuth 2.0, который используется крупными сервисами (Google, Facebook, Twitter) для авторизации пользователей в сторонних приложениях.
Ссылки на CVE и статусы исправления
Common Vulnerabilities and Exposures (CVE) — это международная база данных известных уязвимостей, созданная MITRE Corporation. Включение ссылок на CVE в отчётах о тестировании безопасности позволяет квалифицировать и сравнивать уязвимости с международными стандартами. Важно отслеживать статусы исправления уязвимостей, чтобы оперативно закрывать обнаруженные дыры.
Отслеживание и мониторинг уязвимостей
Мониторинг уязвимостей включает постоянный анализ систем и приложений на предмет новых угроз. Существуют специализированные инструменты для сканирования уязвимостей (Nessus, Qualys, Acunetix), которые помогают своевременно выявлять и устранять проблемы.
Nessus — это мощный инструмент для сканирования уязвимостей в сетевом оборудовании, серверах и приложениях. Позволяет выявлять распространенные уязвимости, несоответствия политике безопасности и проблемы конфигурации. Имеет бесплатную версию с ограниченными функциями и коммерческую версию с расширенным функционалом.
Qualys — облачная платформа для сканирования уязвимостей и управления ими. Предназначена для комплексного анализа безопасности сетевых устройств, серверов, приложений и инфраструктуры. Позволяет проводить регулярные проверки и предоставлять подробные отчёты о статусе безопасности.
Acunetix — специализированный инструмент для тестирования веб-приложений на уязвимости. Автоматически находит и анализирует проблемы безопасности, такие как SQL-инъекции, XSS, CSRF и другие. Отличается удобным интерфейсом и поддержкой различных языков программирования и фреймворков.
Резюме
Тестирование безопасности — это неотъемлемая часть процесса разработки и эксплуатации программного обеспечения. Особую роль играет уникальная ниша ИБ, которая требует глубоких знаний и опыта в защите цифровых активов. Интеграция с корпоративными системами аутентификации, использование международных стандартов (CVE) и активное отслеживание уязвимостей помогают обеспечить надежную защиту продуктов и минимизировать риски для бизнеса.
Тестирование юзабилити (UI, удобство интерфейса)
Тестирование юзабилити направлено на оценку удобства и простоты использования интерфейса сайта или приложения. Основными задачами тестирования являются:
- Проверка логичности расположения элементов интерфейса.
- Оценка интуитивности навигации и доступности функционала.
- Исследование восприятия и поведения пользователей при взаимодействии с продуктом.
Существуют как количественные (опросы, аналитика), так и качественные (интервью, наблюдения) методы оценки юзабилити.
Как тестировать
Главный сдвиг парадигмы — отказ от тестов, «придуманных в вакууме». Вместо этого фокус смещается на реальное поведение реальных пользователей. Это гарантирует, что усилия по тестированию тратятся на то, что действительно критично для бизнеса и UX, а не на гипотетические или маловероятные сценарии.
Тестовые сценарии должны строиться на основе объективных данных:
-
Аналитика (Google Analytics, Яндекс.Метрика, Hotjar)
-
Записи сессий (session recordings)
-
Карты кликов (heatmaps)
Это превращает тестирование из субъективного искусства в Data-Driven процесс.
Федор Алексеев, владелец продукта Сфера.Функциональное тестирование:
Совет: тестируйте самые популярные сценарии глазами пользователя, а не только технически.
Вместо того чтобы вручную придумывать тесты, можно взять реальные данные о том, как пользователи чаще всего используют продукт: какие кнопки нажимают, какие страницы открывают. Из этих «путей» строится сценарий поведения. Автоматические тесты должны проверять именно эти сценарии на разных устройствах и скоростях интернета.
Дополнительно полезно проверять:
- доступность для людей с ограниченными возможностями (a11y),
- стабильность интерфейса (сравнение скриншотов),
- скорость отклика.
Пример: если большинство клиентов проходит путь «Каталог → Товар → Корзина → Оплата», то именно этот сценарий должен проверяться при каждом обновлении.
Цель автоматизации — не просто проверить, что кнопка нажимается, а обеспечить работоспособность сквозных сценариев, которые составляют основу пользовательского опыта.
Система должна работать не в идеальных лабораторных условиях, а в условиях, максильно приближенных к реальности. Это означает обязательное тестирование на:
-
Разных устройствах и браузерах (мобильные телефоны, планшеты, десктопы).
-
Разной скорости интернета (3G, 4G, медленный Wi-Fi), чтобы убедиться в отзывчивости и работоспособности в условиях слабого соединения.
Такой подход позволяет оптимизировать ресурсы на автоматизацию. В первую очередь автоматизируются не случайные тесты, а те самые «пути», которые проходят 80% пользователей. Это дает максимальную отдачу от инвестиций в автоматизацию.
a11y (Accessibility)
a11y — это сокращённое слово от «accessibility», означающее доступность цифрового контента людям с особыми потребностями. Например, если сайт не поддерживает скринридеры или отсутствует необходимая разметка HTML, люди с нарушениями зрения или моторики могут столкнуться с серьезными препятствиями при попытке получить доступ к контенту.
Принципы WCAG
WCAG (Web Content Accessibility Guidelines) сформулировали четыре основных принципа доступности:
- Perceivable (Восприятие): Контент должен быть представлен в формах, воспринимаемых всеми пользователями.
- Operable (Управляемость): Интерфейс и навигация должны быть удобны для всех пользователей.
- Understandable (Понимание): Содержимое и интерфейс должны быть просты и понятны для восприятия.
- Robust (Надёжность): Контент должен оставаться доступным на разных платформах и устройствах.
Автоматизация и управление параметрами запуска
Для повышения эффективности тестирования юзабилити и доступности применяется автоматизация рутинных задач через CI/CD (Continuous Integration/Continuous Deployment)-конвейеры. Например, с помощью инструментов автоматизации можно централизованно управлять параметрами запуска тестов, записывать результаты и отслеживать изменения в параметрах доступности (a11y) и удобства использования (юзабилити).
Таким образом, сочетание ручного тестирования и автоматизации позволяет создать полноценный процесс тестирования юзабилити и доступности, обеспечивая максимальную вовлеченность аудитории и комфортное использование продукта.
Заключение
Выбор подходящего набора тестов напрямую зависит от особенностей конкретного проекта, ожидаемой пользовательской нагрузки и инфраструктуры, на которой развернут продукт. Важно подбирать типы тестов (например, инфраструктурные, UI, API), исходя из потребностей бизнеса и технических ограничений.
Сочетание автоматизированных и ручных тестов, наряду с применением DevOps-практик, позволяет минимизировать риски и обеспечить стабильную работу приложения в реальных условиях эксплуатации.











