Нагрузочное тестирование сайта при помощи WCAT

    Пройдя в очередной раз весь путь от выбора CMS до тестирования я задумался о том, что весь этот путь хорошо описан. Вот только найти внятную информацию о тестировании, без предложения спустить на него все деньги или не делать вообще — очень сложно. Надеюсь, моя статья побудит профессионалов в области тестирования исправить это положение и написать о тестировании. Особенно о тестировании в проекте, бюджет которого невелик.
    Те Хабровчане, кто давно занимается разработкой сайтов возможно (я надеюсь) найдут мою статью довольно банальной и само собой разумеющейся. Но пользователи, которые делают только первые шаги смогут подчерпнуть для себя толику полезного.
    Что мы получаем, проведя описанные ниже действия можно посмотреть здесь.

    Пара слов о CMS


    Сайт должен поддерживаться редакторами, которые узнали про существования компьютеров довольно недавно и даже интерфейс Word'а вызывает у них легкий шок. HTML, основы работы сайта, основы программирования и многое другое, что превращает работу в CMS из творчества и исследования в работу над сайтом при помощи инструмента — это не мой случай.
    При этом сайт наполнен формами, кнопочками, javascript'ами, движущимися элементами и прочим-прочим.
    Поэтому, система управления контентом должна быть максимально настраиваемой, но очень удобной для редактора.
    Я перерыл огромное количество существующих бесплатных и некоторые платные CMS и не нашел ничего более подходящего в моем случае, чем Umbraco.
    Платформа .NET, на которой написана Umbraco — это скорее фишка, чем сложность для меня.

    Нагрузочное тестирование


    Ошибки на сайте можно исправить, контент можно добавить, дизайн полностью изменить. Но вот если сайт не выдерживает предполагаемой нагрузки — то придется переделывать его полностью. Поэтому нагрузочное тестирование крайне важно при разработке сайта. Советую делать его не один раз и первые прогоны делать уже на этапе разработки прототипов.

    Почему WCAT

    WCAT — это бесплатно-распространяемая утилита компании Microsoft для проведения нагрузочного тестирования сайта.
    Собственно, ключевым для меня было бесплатно и Microsoft. Microsoft — только из соображений, что сайт на MS-решениях.
    Плюс, система (или утилита) очень хорошо описана Microsoft'ом и реально удобна.

    Конфигурация тестируемой системы

    На этапе прототипов тестирование можно проводить прямо на среде разработки. Но чем ближе запуск, тем больше хочется прогнать систему под нагрузкой на целевой системе. Что есть у нас целевая система: Виртуальный сервер у хостера с приличными параметрами. Все машины, с которых мы можем создавать нагрузку расположены в офисе. В принципе, слишком большой нагрузки на сайт не ожидается, поэтому для создания нагрузки можно использовать только одну машину. Подчеркиваю — тестируем не локальную, а удаленную систему.

    Как тестируем

    WCAT позволяет очень легко и просто создавать нагрузку в стиле: разогрев, нагрузка, отходняк. Но мне очень хотелось получить графики работы системы в зависимости от созданной нагрузки.
    И задачу обработки логов WCAT решаем написанием небольшой утилиты для обработки логов.

    Тестирование


    Подготовка

    Качаем:
    WCAT
    CPAU — утилита типа runas, но с возможностью передать пароль в командной строке.
    Создаем файлы settings.ubr и umbraco.ubr (названия не принципиальны) по образу и подобию вложенных в папку WCAT\samples.
    В файле umbraco.ubr есть перечисление запросов, которые должен сделать тестовый клиент. Лично я поступил просто. Перезапустил IIS, побродил по сайту, имитируя пользователя, затем просто перенес запросы из лога в файл, добавив необходимое окружение. WCAT очень серьезная утилита и позволяет настроить все необходимые аутентификации и дополнительные параметры для запроса. Как это сделать очень подробно разобрано в документации. Но в моем случае все просто и банально. Запросы без аутентификации и почти везде 200 OK в ответ.
    Мы уже готовы, написав команду типа:
    wcctl.exe -t umbraco.ubr -f settings.ubr -v 10 -s www.example.com -p 80 -c 1 -o report.xml -r report.xsl -x
    а потом команду
    wcclient.exe
    и начать тестирование. Но я же хотел протестировать поведение системы под разной нагрузкой.
    В дополнение, нас ждет большая засада. Мы не сможем подключиться к счетчикам целевой системы (через WMI) и сможем увидеть только время отклика, не представляя, что творится внутри.
    Поэтому дальше начинается вудуизм.
    Создаем пару bat-файлов.
    1) test.bat
    @echo OFF
    cd рабочая папка
    wcctl.exe -t umbraco.ubr -f settings.ubr -v %1 -s www.example.com -p 80 -c 1 -o report%1.xml -r report.xsl -x

    2) rem_test.bat
    @echo OFF
    net use \\IP-адрес\ipc$ /user:имя целевой машины\administrator "пароль"
    for /L %%c in (1, 10, 301) DO (
    ping 127.0.0.1 -n 60 > NUL
    cpau -u имя целевой машины\administrator -p "пароль" -ex "test.bat %%c"
    ping 127.0.0.1 -n 60 > NUL
    wcclient.exe
    )
    net use /DELETE \\IP-адрес\ipc$


    Первый файл понятен и примитивен.
    О втором подробнее:
    Мы подключаемся к целевой машине с правами ее пользователя, но на своей остаемся с правами локального пользователя. При помощи runas такой запуск проходит с ключиком /netonly.
    ping' и нужны для задержки — сначала ждем пока ядро стартует, а потом пока выгрузится.

    Немного лирики: кстати, при помощи runas можно заставить Windows Home работать в домене с правами доменного пользователя. Достаточно погасить explorer и запустить его командой runas с пользователем домена и ключом /netonly.

    Тестирование

    Итак, запускаем rem_test.bat и получаем кучу файлов типа report11.xml. Их можно открыть и просмотреть (не забудьте report.xsl из папки WCAT переложить к report'ам)
    Но нам нужны графики. В этой куче файлов мы будем разбираться очень долго.
    Что же делать?
    Все очень просто.
    Качать Microsoft Visual C# Express Edition и писать простую утилиту.
    Пожалуй, не буду сюда включать ее код. Кто хочет — может скачать проект, а также все описанные мной файлы — здесь.

    Заключение


    Таким образом, затраты на проведение тестирования составили 1 день для настройки, конфигурирования и проведения тестирования и ни копейки больше.
    Я все еще надеюсь найти разработчиков и прекратить разрабатывать самостоятельно, тем более что это не входит в перечень моих текущих интересов. Если Вы хорошо знаете Umbraco и хотите применить знания на свое и не только благо — напишите мне в личку или на dima(at)kurilo.su.

    P.S. Пока писал пост, думал, что получу комментарии типа: «судя по графику, ты тестировал пропускную способность канала твоего провайдера в офисе» или «так тестировать нельзя, для нагрузочных тестов надо делать отдельный стенд». Но получил ряд комментариев о том, что есть утилиты проще, узнал мнение профессионального тестировщика (судя по сайту) о том, что лучше заплатить денег буржуйской конторе (я не спорю, что лучше и, наверное позже воспользуюсь советом). И кучку минусов без объяснения.
    Видимо, тема тестирования сайта в непромышленных условиях неактуальна. Судя по тенденции, все работают с высоко-нагруженными системами, no-SQL базами и прочими функциональными языками. Приму к сведению.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 12

      0
      А не проще ли было дать немного денег BrowserMob или LoadImpact и получить real-world-нагрузку?
        0
        В будущем — может быть.
        Сейчас не хочется по ряду причин.
        1) не хочется пока что тратить деньги
        2) сайт пока что не открыт «для всех»
        0
        В документации, даже для конфигурации, когда всё крутится на одной машине, указывается WCAT Controller, настройка которого описывается в десяти пунктах, каждый из которых в среднем с десятью подпунктами.
        Это всё действительно нужно настраивать, чтобы просто в несколько потоков качать странички?
          0
          Документация очень подробная. И это хорошо.
          Для начала работы достаточно посмотреть примеры и понять, что в системе есть ядро, которое собирает данные с клиентов и клиенты, которые могут быть запущены на стоящих рядом машинах и осуществляют запросы.
          После этого правится конфиг под себя и все запускается.
          я вложил в пост ссылку на архив, где есть файлы настройки и все понятно.
            0
            Подробная документация — это действительно хорошо. Но, когда я читаю
            «In an isolated network test environment, the WCAT Controller will also be configured as a DHCP server, a DNS server and a router/gateway»
            или
            «all machines that will run WCAT must have the administrator account enabled and must all share a common password»
            То мне кажется, что это перебор для просто распределенной долбилки сервера. Тот же jmeter умеет распределенно грузить сервер, при этом предлагая gui и инструменты для построения тест-плана, умеет рисовать графики по результатам тестов и не требует, чтобы вся инфраструктура была заточена на него любимого.
              0
              JMeter позволяет снимать показания WMI perfomance counter?
              Настроек в JMeter даже больше.
              Вы хотите сказать, что тестировать надо только JMeter и никак иначе?
              По мне, WCAT очень гибкое и удобное решение, не требующее установки Java.
              Да еще и имеющее возможность тестировать с разных машин, поддерживающее ntlm и прочее.

              В общем, ничего не имею против JMeter, но не понимаю, чем не нравится WCAT. Тем что Microsoft?

              Мне казалось, инструмент надо выбирать сообразный продукту, а не по компании-производителю.
                0
                Я очень уважаю Microsoft, более того, активно пользуюсь множеством их продуктов, и как пользователь и как разработчик.
                > Вы хотите сказать, что тестировать надо только JMeter и никак иначе?
                Нет, не передергивайте, я просто привел для сравнения другую систему, чтобы не быть голословным.
                > инструмент надо выбирать сообразный продукту, а не по компании-производителю.
                Я и не утверждал обратного, более того, я как раз и пытаюсь выбирать, не считая, что если сайт на asp, то его нужно тестировать продуктом от MS.
                Пока что в плюсах wcat — поддержка wmi, работает без java, в минусах — отсутствие построения графиков, довольно специфическая настройка и требования к окружению.
          –2
          Собственно, ключевым для меня было бесплатно и Microsoft. Microsoft — только из соображений, что сайт на MS-решениях.
          Что же делать?
          Все очень просто.
          Качать Microsoft Visual C# Express Edition и писать простую утилиту.


          Типа если начали на MS-решенияХ, то надо и всё на них делать?
            0
            Нет. Просто мне так проще.
            0
            может я что путают, но чем siege плох?
              0
              Не знает, что происходит на тестируемой системе, т.к. не может цепляться через WMI.
              Под Windows работает через Cygwin.

              wcat — гораздо более мощная утилита, чем siege. И хоть на данном этапе я мог бы воспользоваться siege, при последующей работе пришлось бы все переделывать.

              Выше уже был комментарий насчет jmeter.
              В принципе, всеми можно пользоваться. Только wcat позволяет тестировать с нескольких физических клиентов, сделан и работает на MS-технологиях и отлично справляется даже с самыми сложными запросами. А с учетом возможности расширения своими модулями превосходит, как мне кажется, JMeter.
              Недостаток в отсутствии нормальной системы с отчетами. И относительный недостаток — заточенность под определенное окружение. Собственно как обойти недостатки я и написал.

              А вообще, самое простое — это скачать и посмотреть. :)
              0
              Насчет показаний нагрузки проца действительно неплохая идея, а ещё интереснее было бы нагрузку диска увидеть.

              Подумал, что для JMeter может быть плагин, который собирает эту инфу через SNMP. Для JMeter — потому, что с ним я имел дело.
              Нашел сходу, например: code.google.com/p/snmppluginjmeter/
              При случае буду попробовать.

              Ещё мысль: надо бы пошукать на предмет отслеживания в тесте количества соединений и запросов к БД.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое