Правильное форма хранения автоматизированных скриптов для нагрузочного тестирования является важной деталью при эксплуатации.
Подготовка к хранению
Подготовка скриптов
В процессе отладки в директориях скриптов создается большое число файлов, которые в последствии просто напросто не нужны (например, в 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 комментария:
Добрый день.
Алексей, почитал пост. Довольно интересно, но на мой взгляд как-то накручено. Зачем использовать ant? Можно просто создать батник для запуска. Архивирование, на мой взгляд, тоже не очень восстребовано, т.к. если удалить весь мусор (всякие те самые idx и прочее), то там остаются только текстовые фалы, которые занимают не так уже и много места. Но это мое мнение. Каждый выберет себе сам.
P.S.
Почитал про проблему с относительными путями в сценарии. Можно там использовать относительные пути. Есть 2 метода (первый точно работает, за второй не ручаюсь... нет времени проверить):
1. Открываем в блокноте файл сценария. Ищем абсолютные пути к скриптам (например: C:\scripts\myscript\myscript.usr). Далее просто заменяем абсолютную часть на относительную (напр., ..\scripts\myscript\myscript.usr). Только относительная часть обязательно должна начинаться с ..\
2. Просто в самом контроллере в сценарии для каждой группы проделываем то же самое, т.е. явно изменяем путь к скрипту, не используя диалог выбора файла
Добрый день...
Спасибо за комментарий.
Как говорится мы легкий путей не ищем... На счет архивирования, то тут пошло из истории, когда один "чудо-тестер" не чищенные скрипты по 1.5 гига заливал в SVN :) вот нам тогда наши кастомеры спасибо сказали... И с тех пор пошло требование паковать все...
А на счет очистки мусора я согласен, но "все мы люди все мы человеки", кто-то почистит все, кто-то не все, поэтому для перестраховки можно и запаковать.
На счет использования анта, мне так удобнее было, да и внутри нашей команды ант прижился неплохо.
Далее на счет путей, честно говоря, я пробовал и что-то там не работало, что именно за давностью лет уже не помню. Может они даже и пофиксили эту проблему в новых версиях. А решение с точечками "..\" работать должно ибо оно правильное!
Еще раз большое спасибо.
Можно ли подробно описать что можно удалить из папки скрипта?
файлы *.idx, *.bak, директории result* можно смело удалять из папки лодраннер скриптов
Отправить комментарий