Friday, 23 October 2009

Рефлексы

А Вы тоже держите свободную от разговора по мобильному руку в кармане джинс?

archive

Friday, 9 October 2009

JMeter. Automated testing.

Тестирование. Я думаю, у многих это слово не вызывает приятных эмоций. Для разработчика это драгоценное время, потраченное на "ненужное" написание функциональных тестов, для тестера это проверка функциональности в кратчайшие сроки, для менеджера страх за приложение, который после беглого взгляда идёт в релиз.
Почему так происходит? Рассмотрим простейшую ситуацию, которая не редко проиходит на просторах отечественного девелопмента. Предположим, разработку оценили в 5 дней, еще 3 дня запланировали на тестирование и день на сам релиз и подготовку окружения. Разработка опаздывает на день-полтора и, конечно же, сроки не сдвигаются, а страдает фаза тестирования. Причем каждая из трех сторон бермудского треугольника "разработчик-ПМ-тестировщик" давит на другую и каждая чем-то не довольна.

С
егодня я не хочу разбирать причины или правильные действия в таких ситуациях, я хочу показать преимущества автоматического тестирования и, в качестве примера, описать JMeter. Аналогов у данной программы множество, но к основным плюсам я могу отнести открытый код и как следствие лёгкую расширяемость под собственные нужды в случае необходимости, возможность распределенного тестирования, понятная документация, стабильность и множество полезных out-of-the-box компонент. К числу минусов я пожалуй отнесу квалификацию человека, пишущего тесты - дело в том, что более ли менее серьезные тесты должен писать человек, хоть немного программирующий и хотя бы поверхностно знакомый с XPath или RegExp.

Итак, автоматические тесты позволяют потратить Вам на тестирование меньшее количество времени при единожды написанных тестах под конкретную функциональность. Что можно создавать с помощью JMeter?
- интеграционные тесты. Функциональные тесты показывают Вам как работает каждая из компонент системы/приложения, но изменяя компонент, часто изменяют и тесты под него, не выясняя как это отразится на двух десятках приложений использующих компонент. Здесь на выручку приходят интеграционные тесты. Основным полезным инструментом JMeter здесь являются JMeter Assertions.
- нагрузочные тесты. Сколько активных пользователей могут одновременно работать при конвертации ста загружаемых изображений на серверной стороне? А при 10 000 изображений? А если быть более точным, то вопрос состоит в обнаружении кол-ва пользователей, которым данные отдаются с задержкой не более секунды, например. Здесь полезны JMeter Controllers, JMeter Timers для эмулирования пользовательских действий.
- стресс тесты. Данная группа тестов призвана обнаружить тот предел, при котором приложение не способно обслуживать запросы, выяснить поведение системы при предельных нагрузках и зарегистрировать возможные потери данных/уязвимости при наступлении критических ситуаций. Здесь поможет распределенное тестирование и всё что уже упоминалось ранее.

В данной статье я хочу остановиться на разного рода HTTP тестировании и некоторых нюансах, хотя ничто не мешает Вам использовать предоставляемую JMeter'ом возможность тестировать FTP, WebServices, DB, LDAP, JMS, Mail.

JMeter представляет собой приложение на Java, которое прекрасно запускается под любыми операционными системами (проверено собственноручно), как в GUI, так и в консольном режиме (что позволяет сделать выбор между визуализацией и производительностью). Ознакомиться с основными компонентами можно в отличной документации или просто запустив приложение и ознакомившись с контекстным меню. Как видно после первого запуска, в приложении есть 2 основных рабочих пространства:
- Test Plan - используется для создания собственно теста, как и следует из названия. Все основные операции проводяться здесь.
- WorkBench - используется для хранения временных компонент теста и некоторых важных не тестирующих компонент. Основное свойство - не сохраняется вместе с сохранением теста.

Варианты создания теста:
1. Создать тест вручную в пространстве Test Plan, пользуясь контекстным меню и примерами из документации.

2. JMeter прекрасно работает как Proxy и умеет записывать все выполняемые Вами запросы. Для такого способа создания теста Вам понадобиться добавить в WorkBench-> Add-> Non-test elements-> HTTP Proxy Server. Из настроек следует указать как минимум:
* Port. Это порт, который будет слушать JMeter. Я обычно ставлю 9090.
* Target Controller. Создайте новый Thread Group в Вашем Test Plan и выберите его в выпадающем списке Target Controller. Именно в эту группу будут записаны все запросы, прошедшие через прокси.
* URL patterns to Include/Exclude. Данный пункт позволит Вам указать c помощью RegExp, какие именно запросы, прошедшие через прокси, нужно сохранить в тест план. Советую для экспериментов попробовать сначала не заполнять данный пункт, а затем отфильтровать только ".*html" к примеру, чтобы почувствовать разницу.
Не забывайте перенаправить свой браузер на вновь созданный прокси (я, например, пользуюсь FoxyProxy для быстрого переключения режимов прокси в браузере) и стартовать/останавливать JMeter HTTP Proxy Server.

3. Создание теста программно. Дело в том, что Test Plan сохраняется в XML, который не сложно создать программно, если есть такая потребность.


О JMeter помимо документации:
- Помимо расширяемых модулей, поддерживает 2 скриптовых языка JavaScript и BeanShell. BeanShell - это полноценная скриптовая Java.
- Поддерживает Cookies, что позволяет авторизировать/регистрировать пользователей прямо в тесте.
- Практически в любом поле JMeter можно ввести переменную вместо значения. Вообще работа с переменными достаточно гибкая и удобная.
- Пользуясь PostProcessor'ами можно вычленять из ответа сервера информацию и сохранять её в переменных для последующих запросов.
- Есть помошь по функциям Main menu-> Options-> Function Helper Dialog
- В HTTP Sampler есть галочка "Retrieve all embedded resources from HTML files", которая бывает полезной для эмулирования полноценных пользовательских действий.

Горячие клавиши и неявные настройки.
- Если Ваш JMeter стартует за прокси сервером и ему нужен доступ наружу, Вам помогут ключи при старте -H <host> -P <port> -u <user> -a <password> -N <non-proxy-hosts>
- При включенном GUI и графических слушателях JMeter использует достаточно много ресурсов компьютера - для нагрузочного и стресс тестов используйте non-GUI опции запуска
- Распределённое тестирование управляется одним инстансом JMeter, который может распространить нужный тест, собрать результаты со всех нод, и производить некоторое управление распределённых нод.
- Ctrl+R - запустить тест
- Ctrl+. - остановить тест
- Ctrl+E - очистить результаты

archive

Monday, 5 October 2009

CloudMade in action

Не так давно я рассказывал Вам про OpenStreetMap и его философию, а сегодня хочу рассказать о сервисах надстроенных над ним. Дело в том, что OpenStreetMap Foundation занимается поддержанием проекта, защитой лицензий, организацией комьюнити, подготовкой данных и предоставлением некоторого программного обеспечения, полезного для картографического сообщества.

Всё ПО и данные распространяются под открытыми лицензиями (правда если вы модифицируете OSM данные в какой-либо формат, вы обязаны поделиться результатом преобразований с общественностью). В связи с этим фактом и неоспоримым качеством созданных карт существует достаточно большое количество проектов, призванных отшлифовать накапливаемое знание и предоставить конкурентноспособные сервиса.

CloudMade - компания, которая сумела запустить сразу несколько интересных проектов на базе OSM данных и при этом внести ощутимую лепту в развитие картографического сообщества.
- Поскольку это одна из ранних компаний использующих OpenStreetMap, она успела накопить и сформировать достаточно большое количество всевозможных фильтров данных (напомню, что OSM построена по принципу Wiki, а потому там иногда появляются дороги по экватору, подводные магистрали и т.п. вещи, которые Вы не увидите в продуктах CloudMade). Более того, все преобразованные данные доступны для публичного доступа.
- Разработаны всевозможные библиотеки для создания условий комфортного внедрения разработчиками карт от CloudMade.
- CloudMade занимается организацией Mapping parties, впрочем как и многие другие, но на мой субъективный взгляд гораздо более активно. А многие активисты CloudMade создают локальные комьюнити.
- Доступны карты как таковые, с большим спектром возможностей: построение маршрутов, геокодирование, векторными SVG картами, прекрасным редактором стилей, возможностью выгрузки построенного маршрута в GPX (формат, понятный для GPS устройств), равно как и загрузка карт на GPS устройства.
- В процессе финальных тестирований редактор OSM карт, который позволит пользователям более интуитивно справляться с задачей маппинга и автоматизировать некоторые трудоёмкие процессы.
- И многие другие приятные мелочи по ошибке или по другим причинам не включенные в данный обзор.

Будут вопросы - обращайтесь, расскажем что к чему.

archive