Download - Платформа для автоматического тестирования Erlang проектов на примере UserGate Web Filter
Платформа для автоматического Платформа для автоматического тестирования тестирования 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