34
Платформа для автоматического Платформа для автоматического тестирования тестирования Erlang Erlang проектов проектов на примере на примере UserGate Web Filter UserGate Web Filter Белавин Валерий [email protected] Entensys, Новосибирск

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

  • Upload
    devday

  • View
    452

  • Download
    3

Embed Size (px)

Citation preview

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

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

Белавин Валерий [email protected], Новосибирск

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

UserGate Web Filter – управление доступом в сеть Интернет, через фильтрацию DNS и HTTP трафика. Функции: DNS forwarder, ICAP-server.

Введение

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

UserGate Web Filter – работа в Erlang кластере.

Введение

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

UserGate Web Filter, интерфейс администратора.

Введение

Page 5: Платформа для автоматического тестирования 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…)

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

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

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

Архитектура Архитектура OpenStackOpenStack

OpenStack предоставляет набор API для работы с сервисами. Для работы с

nova-compute предназначены Nova API и EC2 API.

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

Horizon (OpenStack Dashboard)Horizon (OpenStack Dashboard)

Уже полноценный доступ!

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

OpenStackOpenStack, сервис метаданных, сервис метаданных

Помимо основной задачи, nova-network предоставляет доступ к сервису метаданных!

Соответствующий сервис внутри виртуальной машины запускается автоматически!

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

Примеры запуска виртуальной машины с использованиемсценария

OpenStackOpenStack, сервис метаданных, сервис метаданных

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

Требования к системе АВТОТЕСТОВТребования к системе АВТОТЕСТОВ::

работа с OpenStack (запуск/остановка инстанций, сценарий, …)

поддержка локальной и удаленной работы с OpenStack

работа с инстанциями (Linux/Windows)

формализация тестов (единый формат)

возможность продолжения тестов с произвольного места

читабельные логи

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

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/

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

Доступные библиотеки:

• String

• Collections

• Telnet

• SSH

• HTTP

• Selenium

• Selenium2

• AutoIt

• Screenshots

• Operating System

Примеры тест-кейсов

Robot FrameworkRobot Framework

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

Robot FrameworkRobot Framework IDEIDE

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

Значит нужно писать:

• библиотеку для работы с OpenStack

• библиотеку для работы с самим продуктом (XML-RPC)

• может еще что-нибудь

Robot FrameworkRobot Framework

Robot Framework поддерживает пользовательские библиотеки

Python/Java. Python библиотеку можно оформит как простой

модуль или в виде класса.

Публичные методы класса становятся доступны через “ключевые

слова”, а экземпляр класса создается автоматически.

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

Cloud Helper, Cloud Helper, работа с работа с OpenStackOpenStack

сommands.ini

«Обертка» над EC2 API для работы с OpenStack . Шаблоны команд задаются в INI файле. Поддерживает локальную и удаленную работу с OpenStack (SSH), работу со сценариями user-data.

Обходит «проблемы» OpenStack.

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

Работа с инстанциямиРабота с инстанциями

Требования:

• работа в асинхронном режиме (пакетное выполнения задач)• корректная обработка потери связи с виртуальной машиной• корректная обработка таймаутов

Варианты решений:

Socket server/client (собственный велосипед…)XML RPC (стандартный протокол)

AMQP?И есть либы для Python!

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

Брокер Брокер RabbitMQRabbitMQ

Erlang – реализация брокера сообщений для протокола AMQP (Advanced Message Queuing Protocol).

Основные понятия AMQP:

Сообщение (message) — единица передаваемых данных, его содержание никак не интерпретируется сервером, к сообщению могут быть прицеплены структурированные заголовки.

Точка обмена (exchange) — в неё отправляются сообщения. Точка обмена распределяет сообщения в одну или несколько очередей.

Очередь (queue) — здесь хранятся сообщения до тех пор, пока не будет забраны клиентом. Клиент всегда забирает сообщения из одной или нескольких очередей.

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

Celery: Distributed Task QueueCelery: Distributed Task Queue

Python Framework для распределенного выполнения задач.

Возможности:

• Поддержка синхронного и асинхронного выполнения заданий

• Выполнение заданий по расписанию (в том числе - периодических)

• Распределенное выполнение (может быть запущен на нескольких

серверах)

• Ограничение количества заданий в единицу времени (rate limit)

• Маршрутизация заданий (кому - что)

• Мониторинг выполнения заданий

• Поддержка нескольких брокеров сообщений (RabbitMQ,…)

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

Архитектура Архитектура CeleryCelery

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

celeryconfig.py

agent.py

Celery, Celery, пример использованияпример использования

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

Message Helper, Message Helper, работа задачамиработа задачами

Message Helper – выполнение команд в виртуальных машинах, через Celery, с RabbitMQ в качестве брокера сообщений.

Важно! Код агента Celery должен быть доступен и самим агентам и машине, с которой выполняются тесты.

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

Тесты в работе

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

Пример отчета

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

Лог тестов

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

Запуск из консоли

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

Архитектура тестовой системыАрхитектура тестовой системы

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

ВыводыВыводы

• Легкость составления тестов (test suites)

• Читабельность тестов

• Запуск с командной строки

• Поддержка тегов

• Внутреннее API Robot Framework (scalars, lists, dictionaries, cycles,…), удобно

Что понравилось?

• Если прервать выполнение теста, лог посмотреть нельзя (RIDE?)

• Внутреннее API достаточно специфично (нужна привычка)

• При создании библиотек неизбежно тестирование классическими методами

• После завершения работы агентов в виртуальных машинах в RabbitMQ остается

«мусор» в виде не используемых очередей и точек обмена

Что не понравилось?

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

Продолжаем Продолжаем тестирование…тестирование…Ну вот и у нас есть ICAP-сервер!

2 – REQMOD5 – RESPMOD

Нужно: веб-сервер с управляемым контентом, клиент, прокси (Squid)

Срок выпуска версии: ВЧЕРА!

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

Шаг1Шаг1: : переписываем либу переписываем либу XML-RPCXML-RPC

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

Шаг2Шаг2: : выбираем легкий фреймворквыбираем легкий фреймворк

PyTest питоновский фреймворк для модульного и функционального тестирования

Достоинства:• поддержка параметризации (фикстуры)• генераторы тестов• плагины

пример теста

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

Шаг3Шаг3: : запускаем тестызапускаем тесты

пример запуска тестов (длительность ~ 10 минут )

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

Шаг Шаг N+1: N+1: если сломалосьесли сломалось

Если тест провалился, это выглядит так:

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

Вместо выводовВместо выводов::1. Создана работающая система автотестов

2. Выпущена первая версия UserGate Web Filter

3. Наработки переданы тестировщикам

IMHO

• Система Robot Framework интересна, перспективна, но не идеальна

• Успешность применения RF зависит от постоянства использования

• PyTest, теперь вместо unittest