Развернуть тестовый стенд и не умереть


Этот пост будет интересен только тем, кто занимается автоматизацией в тестировании. :)

Автоматическое тестирование с использованием виртуализации мало чем отличается от продукта к продукту. Нужно развернуть тестовый стенд из нескольких виртуальных окружений, настроить ОС внутри окружений, запустить тест и экспортировать результаты, уничтожить тестовый стенд. Выглядит просто. Но каждый раз во время построения инфраструктуры для тестирования нужно решать заново одну и ту же задачу. Условия задачи следующие:

  1. выбрать подходящий тип виртуализации
  2. найти библиотеку с реализацией API этой виртуализации для вашего языка программирования
  3. написать код для модуля, который будет нужным образом конфигурировать из виртуальных окружений тестовые стенды и отвечать за их жизненный цикл (создать, удалить, остановить, запустить).

С п.1 и п.2 проблем нет: продукты и решения для виртуализации сейчас есть на любой вкус и цвет, библиотек для интеграции с ними тоже хватает. А вот c п.3 не всё так просто - нужно через API конфигурировать эти тестовые окружения, делать абстракцию для реализации тестовых стендов и не то, чтобы это было сложно сделать, но при росте количества конфигураций стендов управление и поддержка этой инфраструктурой переусложняется. Кажется, что можно сделать проще.

Почти такую же задачу решают ребята из DevOps и для этой задачи даже есть специальный термин - Infrastructure as a Code. Для её решения существуют разные инструменты: Terraform, AWS + CloudFormation, Docker Compose. Все они похожи друг на друга: есть спецификация, которая в специальном формате описывает ресурсы и взаимосвязи между ними и тем самым можно легко воспроизводить инфраструктуру. Но у всех перечисленных инструментов есть недостаток - неудобно интегрировать их с кодом.

Сегодня придумал как можно решить задачу создания тестовых стендов и управления их жизненым циклом. Для интеграции с решениями для виртуализации есть удобная библиотека libcloud. В ней реализован единый API для более чем 50 провайдеров. LibVirt, например, там тоже есть. Для описания конфигурации стенда нужно взять или один из существующих форматов или придумать свой. Останется написать немного кода, чтобы связать формат спецификаций для описания конфигурации, libcloud и методы для управления стендом и одна из задач для автоматизации тестирования будет решена в общем виде :)

Когда будет более-менее работоспособный код - выложу в публичный доступ.

Метки: opensource softwaretesting