Платформа для автоматического тестирования erlang...
TRANSCRIPT
Платформа для автоматического Платформа для автоматического тестирования тестирования Erlang Erlang проектов проектов на примере на примере UserGate Web FilterUserGate Web Filter
Белавин Валерий [email protected], Новосибирск
UserGate Web Filter – управление доступом в сеть Интернет, через фильтрацию DNS и HTTP трафика. Функции: DNS forwarder, ICAP-server.
Введение
UserGate Web Filter – работа в Erlang кластере.
Введение
UserGate Web Filter, интерфейс администратора.
Введение
Задача или Что хотелось получить?
1.Автоматическая установка новой сборки (в том числе и для кластера)
2.Регистрация (ввод лицензии)
3.Проверка базового функционала
4.Максимальная автоматизация
5.Лог, отчеты
Введение
Что уже есть?
1.что-то собралось
2.“что-то” снабжено XML-RPC интерфейсом (wiki)
3.brand new style server (16 cores, 24 GB, 5Tb)
Идея: new server + private cloud + … (we’ll see…)
OpenStack CloudOpenStack Cloud
Компоненты:
• Keystone (Identity Service)
• Glance (Image Service)
• Nova (Core)
• Horizon (Dashboard)
• Swift (Storage Service)
Сервисы:
• nova-compute (libvirt, xenapi,..)
• nova-scheduler
• nova-api
• nova-network (Quantum)
• nova-volume (Cinder)
Поддержка гипервизоров: KVM, Qemu, Xen, LXC, VMWare, Hyper-V
Брокер сообщений: RabbitMQ, Qpid
Архитектура Архитектура OpenStackOpenStack
OpenStack предоставляет набор API для работы с сервисами. Для работы с
nova-compute предназначены Nova API и EC2 API.
Horizon (OpenStack Dashboard)Horizon (OpenStack Dashboard)
Уже полноценный доступ!
OpenStackOpenStack, сервис метаданных, сервис метаданных
Помимо основной задачи, nova-network предоставляет доступ к сервису метаданных!
Соответствующий сервис внутри виртуальной машины запускается автоматически!
Примеры запуска виртуальной машины с использованиемсценария
OpenStackOpenStack, сервис метаданных, сервис метаданных
Требования к системе АВТОТЕСТОВТребования к системе АВТОТЕСТОВ::
работа с OpenStack (запуск/остановка инстанций, сценарий, …)
поддержка локальной и удаленной работы с OpenStack
работа с инстанциями (Linux/Windows)
формализация тестов (единый формат)
возможность продолжения тестов с произвольного места
читабельные логи
Robot FrameworkRobot Framework
Первая версия разработана в Nokia Siemens Networksв 2005, первый open-source релиз появился в 2008.
Ключевые особенности:
• keyword-based подход
• простой синтаксис тестов (TXT, TSV, HTML)
• поддержка тегов
• встроенные отчеты
• встроенные библиотеки (List, Dictionary, …)
• пользовательские библиотеки (Python/Java)
• поддержка плагинов (Selenium, SSH,…)
http://code.google.com/p/robotframework/
Доступные библиотеки:
• String
• Collections
• Telnet
• SSH
• HTTP
• Selenium
• Selenium2
• AutoIt
• Screenshots
• Operating System
…
Примеры тест-кейсов
Robot FrameworkRobot Framework
Robot FrameworkRobot Framework IDEIDE
Значит нужно писать:
• библиотеку для работы с OpenStack
• библиотеку для работы с самим продуктом (XML-RPC)
• может еще что-нибудь
Robot FrameworkRobot Framework
Robot Framework поддерживает пользовательские библиотеки
Python/Java. Python библиотеку можно оформит как простой
модуль или в виде класса.
Публичные методы класса становятся доступны через “ключевые
слова”, а экземпляр класса создается автоматически.
Cloud Helper, Cloud Helper, работа с работа с OpenStackOpenStack
сommands.ini
«Обертка» над EC2 API для работы с OpenStack . Шаблоны команд задаются в INI файле. Поддерживает локальную и удаленную работу с OpenStack (SSH), работу со сценариями user-data.
Обходит «проблемы» OpenStack.
Работа с инстанциямиРабота с инстанциями
Требования:
• работа в асинхронном режиме (пакетное выполнения задач)• корректная обработка потери связи с виртуальной машиной• корректная обработка таймаутов
Варианты решений:
Socket server/client (собственный велосипед…)XML RPC (стандартный протокол)
AMQP?И есть либы для Python!
Брокер Брокер RabbitMQRabbitMQ
Erlang – реализация брокера сообщений для протокола AMQP (Advanced Message Queuing Protocol).
Основные понятия AMQP:
Сообщение (message) — единица передаваемых данных, его содержание никак не интерпретируется сервером, к сообщению могут быть прицеплены структурированные заголовки.
Точка обмена (exchange) — в неё отправляются сообщения. Точка обмена распределяет сообщения в одну или несколько очередей.
Очередь (queue) — здесь хранятся сообщения до тех пор, пока не будет забраны клиентом. Клиент всегда забирает сообщения из одной или нескольких очередей.
Celery: Distributed Task QueueCelery: Distributed Task Queue
Python Framework для распределенного выполнения задач.
Возможности:
• Поддержка синхронного и асинхронного выполнения заданий
• Выполнение заданий по расписанию (в том числе - периодических)
• Распределенное выполнение (может быть запущен на нескольких
серверах)
• Ограничение количества заданий в единицу времени (rate limit)
• Маршрутизация заданий (кому - что)
• Мониторинг выполнения заданий
• Поддержка нескольких брокеров сообщений (RabbitMQ,…)
Архитектура Архитектура CeleryCelery
celeryconfig.py
agent.py
Celery, Celery, пример использованияпример использования
Message Helper, Message Helper, работа задачамиработа задачами
Message Helper – выполнение команд в виртуальных машинах, через Celery, с RabbitMQ в качестве брокера сообщений.
Важно! Код агента Celery должен быть доступен и самим агентам и машине, с которой выполняются тесты.
Тесты в работе
Пример отчета
Лог тестов
Запуск из консоли
Архитектура тестовой системыАрхитектура тестовой системы
ВыводыВыводы
• Легкость составления тестов (test suites)
• Читабельность тестов
• Запуск с командной строки
• Поддержка тегов
• Внутреннее API Robot Framework (scalars, lists, dictionaries, cycles,…), удобно
Что понравилось?
• Если прервать выполнение теста, лог посмотреть нельзя (RIDE?)
• Внутреннее API достаточно специфично (нужна привычка)
• При создании библиотек неизбежно тестирование классическими методами
• После завершения работы агентов в виртуальных машинах в RabbitMQ остается
«мусор» в виде не используемых очередей и точек обмена
Что не понравилось?
Продолжаем Продолжаем тестирование…тестирование…Ну вот и у нас есть ICAP-сервер!
2 – REQMOD5 – RESPMOD
Нужно: веб-сервер с управляемым контентом, клиент, прокси (Squid)
Срок выпуска версии: ВЧЕРА!
Шаг1Шаг1: : переписываем либу переписываем либу XML-RPCXML-RPC
Шаг2Шаг2: : выбираем легкий фреймворквыбираем легкий фреймворк
PyTest питоновский фреймворк для модульного и функционального тестирования
Достоинства:• поддержка параметризации (фикстуры)• генераторы тестов• плагины
пример теста
Шаг3Шаг3: : запускаем тестызапускаем тесты
пример запуска тестов (длительность ~ 10 минут )
Шаг Шаг N+1: N+1: если сломалосьесли сломалось
Если тест провалился, это выглядит так:
Вместо выводовВместо выводов::1. Создана работающая система автотестов
2. Выпущена первая версия UserGate Web Filter
3. Наработки переданы тестировщикам
IMHO
• Система Robot Framework интересна, перспективна, но не идеальна
• Успешность применения RF зависит от постоянства использования
• PyTest, теперь вместо unittest