четверг, 27 декабря 2007 г.

Нагрузочное тестирование - хранение и сборка скриптов для нагрузочного тестирования

Правильное форма хранения автоматизированных скриптов для нагрузочного тестирования является важной деталью при эксплуатации.

Подготовка к хранению


Подготовка скриптов

В процессе отладки в директориях скриптов создается большое число файлов, которые в последствии просто напросто не нужны (например, в LoadRunner создаются файлы *.idx, *.bak, директории result*). Они занимают не малую часть дискового пространства, от одного до сотен мегабайт. Конечно же их не обязательно хранить в репозитории, поэтому я рекомендую их удалять.


Далее рекомендую архивировать скрипты, т.к. это будет крайне важно для предложенного мной подхода. Итак, следующий шаг - архивация (используя архиватор ZIP)



Подготовка параметров

Файлы параметров так же рекомендуется запаковать. Причем в архив назвать также как тестируемое окружение (Например: тестируем qa платформу, значит глобальные параметры будут находится в файле qa.zip, если это продакшн - production.zip)


Хранение тестов в файловой структуре


В ранее написанном посте о структуре нагрузочных тестов я уже предлагал вариант файловой структуры. Рассмотрим пример хранения скриптов в репозитории, используя файловую структуру:


  • директорий проекта
    • parameters - директорий глобальных параметров тестового сценария, запакованных в ZIP
    • scripts - директорий хранения тестовых скриптов, запакованных в ZIP
    • scenarios - директорий хранения сценариев или тестовой модели
    • build.xml - файл для сборки теста (содержание файла смотрите ниже в Приложении 1)

Сборка тестовых скриптов


Если все вышеуказанные требования выполнены, а именно:
  • параметры, запакованные ZIPом, хранятся в папке parameters
  • скрипты, запакованные ZIPом, хранятся в папке scripts
  • сценарии и тестовая модель находятся в папке scenarios
  • build.xml находится в корневом директории проекта
  • данная файловая структура "залита" в репозиторий

вы можете смело приступить к сборке скрипта.
Для сборки скрипта вам необходимо запустить build.xml при помощи apache-ant-xxx, с параметрами выделенными красным в приложении 1:

ant -Ddist.environment=qa

Здесь qa - это название платформы, на которой будет проводиться тестирование, которое должно соответствовать названию ZIP файла с глобальными параметрами теста.


После окончания сборки в директории проекта создастся папка LoadTests, в которой вы найдете готовые к запуску нагрузочные тесты.


Заметка


Данный подход был опробован при использовании LoadRunner в качесте инструмента для нагрузочного тестирования.


Преимущества:
  • В репозитории хранятся архивы тестов и параметров
  • Сборку и запуск можно осуществлять с любого компьютера оснащенного инструментом для тестирования
  • ...
Недостатки:

При использовании LoadRunner был выявлен один очень серьезный недостаток - Contorller не поддерживает относительные пути к скриптам. (Если это не так, просьба оставить комментарий, буду очень благодарен) Из-за этого хранение сценариев в репозитории оказывается бесполезным, так как при каждой сборке приходилось создавать сценарий заново. Именно поэтому тестовая модель должна была находиться в папке scenarios. По ней воссоздается тестовый сценарий.

Однако судя по комментарию пользователя Alex, этот недостаток решается достаточно просто ручной правкой файла сценария: "(например: C:\scripts\myscript\myscript.usr). Далее просто заменяем абсолютную часть на относительную (напр., ..\scripts\myscript\myscript.usr). Только относительная часть обязательно должна начинаться с ..\"



Приложение 1

<!--
build.xml
Build file for Load tests.
-->

<project name="LoadTests" default="dist" basedir=".">

<description>
+---------------------------------------------------------------------------+
| Build file for the Load Test. |
+---------------------------------------------------------------------------+
Primary Targets:
- dist - creates distribution. dist.environment must be specified

casual using: ant -Ddist.environment=qa

</description>

<!-- project props -->
<property name="app.name" value="LoadTests"/>
<property name="project.dir" value="."/>
<property name="scenario.dir" value="${project.dir}/scenario"/>
<property name="scripts.dir" value="${project.dir}/scripts"/>
<property name="parameters.dir" value="${project.dir}/parameters"/>

<property name="dist.dir" value="${project.dir}/dist/${app.name}"/>
<property name="dist.parameters.dir" value="${dist.dir}/parameters"/>

<target name="clean">
<delete dir="${dist.dir}"/>
</target>

<target name="prepare">
<mkdir dir="${dist.dir}"/>
</target>

<target name="scp">
<copy todir="${dist.dir}">
<fileset dir="${scenario.dir}">
<include name="*.*"/>
</fileset>
</copy>
</target>

<target name="unpack">
<unzip dest="${dist.dir}">
<fileset dir="${scripts.dir}">
<include name="*.zip"/>
</fileset>
</unzip>
<unzip dest="${dist.parameters.dir}">
<fileset dir="${parameters.dir}">
<include name="${dist.environment}.zip"/>
</fileset>
</unzip>
</target>

<target name="dist">
<antcall target="clean"/>
<antcall target="prepare"/>
<antcall target="unpack"/>
<antcall target="scp"/>
</target>

</project>

4 комментария:

Alex комментирует...

Добрый день.
Алексей, почитал пост. Довольно интересно, но на мой взгляд как-то накручено. Зачем использовать ant? Можно просто создать батник для запуска. Архивирование, на мой взгляд, тоже не очень восстребовано, т.к. если удалить весь мусор (всякие те самые idx и прочее), то там остаются только текстовые фалы, которые занимают не так уже и много места. Но это мое мнение. Каждый выберет себе сам.
P.S.
Почитал про проблему с относительными путями в сценарии. Можно там использовать относительные пути. Есть 2 метода (первый точно работает, за второй не ручаюсь... нет времени проверить):
1. Открываем в блокноте файл сценария. Ищем абсолютные пути к скриптам (например: C:\scripts\myscript\myscript.usr). Далее просто заменяем абсолютную часть на относительную (напр., ..\scripts\myscript\myscript.usr). Только относительная часть обязательно должна начинаться с ..\
2. Просто в самом контроллере в сценарии для каждой группы проделываем то же самое, т.е. явно изменяем путь к скрипту, не используя диалог выбора файла

А.Б. комментирует...

Добрый день...
Спасибо за комментарий.

Как говорится мы легкий путей не ищем... На счет архивирования, то тут пошло из истории, когда один "чудо-тестер" не чищенные скрипты по 1.5 гига заливал в SVN :) вот нам тогда наши кастомеры спасибо сказали... И с тех пор пошло требование паковать все...
А на счет очистки мусора я согласен, но "все мы люди все мы человеки", кто-то почистит все, кто-то не все, поэтому для перестраховки можно и запаковать.

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

Далее на счет путей, честно говоря, я пробовал и что-то там не работало, что именно за давностью лет уже не помню. Может они даже и пофиксили эту проблему в новых версиях. А решение с точечками "..\" работать должно ибо оно правильное!


Еще раз большое спасибо.

Unknown комментирует...

Можно ли подробно описать что можно удалить из папки скрипта?

Анонимный комментирует...

файлы *.idx, *.bak, директории result* можно смело удалять из папки лодраннер скриптов

Условия копирования публикаций:

Все публикации в данном блоге являются частной собственностью авторов. Любое копирование информации допускается только при условии указания имени автора и активной ссылки на источник.