четверг, 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>

Отправить комментарий

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

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