Платформа для автоматического тестирования erlang...

Post on 14-Jun-2015

452 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Платформа для автоматического Платформа для автоматического тестирования тестирования Erlang Erlang проектов проектов на примере на примере UserGate Web FilterUserGate Web Filter

Белавин Валерий vb@usergate.ruEntensys, Новосибирск

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

top related