Преимущества использования модульных тестов
Важной составной частью тестирования производительности является разработка и настройка тестов. Как тестировщик, вы, вероятно, тратите много времени на разработку и настройку тестов, которые приходится часто перезаписывать по причине изменений в тестируемом приложении или системе, а также в вариантах использования. Например, вам может понадобиться изменить сценарий теста, чтобы выбрать определенную часть системы для исследования новой проблемы производительности, обнаруженной в ходе теста. Для этого, вероятно, потребуется новый набор тестов, который нужно будет записать и настроить, тратя на это драгоценное время, которое можно было бы использовать для тестирования и анализа результатов.
Модульное тестирование дает следующие преимущества:
- Сводит к минимуму необходимость перезаписи тестов каждый раз после каких-либо изменений.
- Устраняет лишние шаги в тестах.
- Уменьшает размер тестов.
- Повышает надежность и возможность многократного использования тестов.
- Облегчает отладку тестов и изменение направленности тестовых сценариев.
Подход на основе модульных тестов предусматривает создание небольших тестовых модулей, которые затем можно использовать в качестве строительных блоков для построения больших или меньших сценариев, в зависимости от целей теста. В данной статье рассказывается, как можно применить функциональные возможности IBM® Rational® Performance Tester, такие как разделение тестов и тестовые переменные, могут помочь в создании более надежных и более пригодных для повторного использования модульных тестов.
Прежде чем углубиться в эти функциональные возможности, дадим определения следующим понятиям в контексте Rational Performance Tester:
- Тестовый модуль
- Небольшой тест, выделяемый из большего теста с намерением повторно использовать его в различных сценариях. С точки зрения Rational Performance Tester тестовый модуль ничем не отличается от обычного теста.
- Разделение теста
- Возможность создания нескольких тестовых модулей (сплит-тестов) из одного теста.
- Тестовая переменная
- Определяемая пользователем пара имя-значение, которая хранит информацию и предоставляет ссылку на нее на всем протяжении теста, а также между тестами.
Создание записей модульных тестов
Начиная с Rational Performance Tester версии 8.1 появилась возможность использовать функциональность разделения теста для деления большего теста на более мелкие тестовые модули при сохранении первоначального теста в неизменном состоянии. С помощью панели инструментов Annotation (начиная с версии 8.1.1) можно также определить границы тестовых модулей в процессе записи. Затем можно использовать тестовые переменные для связывания различных тестовых модулей друг с другом.
В трех следующих разделах вы познакомитесь с выполнением следующих задач:
- Деление SAP-теста после записи.
- Деление HTTP-теста после и во время записи (в режиме реального времени).
- Аннотирование HTTP-теста во время записи.
Хотя данная статья посвящена графическому интерфейсу пользователя SAP и HTTP-расширению, все остальные расширения Rational Performance Tester также поддерживают функциональность разделения теста и тестовой переменной.
После записи можно разделить SAP-тест, выбрав одну или несколько транзакций в редакторе тестов, и сохранить выбранные варианты в качестве нового теста. Если выбирается нескольких транзакций, они должны быть непрерывными. В противном случае опция сохранения выбранных вариантов в качестве нового теста будет отключена. Это важно, потому что могут существовать зависимости между транзакциями.
Процесс деления теста очень прост и не требует много времени:
- Откройте тест в редакторе тестов.
- Выберите транзакцию теста (см. рисунок 1).
- Щелкните правой кнопкой мыши и сохраните выбранный вариант как новый тест в открывшемся диалоговом окне сплит-теста, где можно переименовать тест и добавить к нему комментарии.
Рисунок 1. Выбор транзакций для сплит-теста
На рисунке 2 показан пример, в котором из одной записи SAP-теста получается три разных тестовых модуля. Эти тестовые модули включают тесты Login, Create order и Logout.
Рисунок 2. Получение нескольких тестовых модулей из одной SAP-записи
Процесс деления сценария HTTP-теста аналогичен приведенному ранее для SAP, но с некоторыми отличиями:
- HTTP-тесты можно делить во время записи, используя панель инструментов Rational Performance Tester Annotation для вставки точек деления.
- HTTP-тесты можно делить на уровне страниц (см. рисунок 3). Также можно делить их и на уровне транзакций, если тест содержит транзакции.
Рисунок 3. Выбор страниц для сплит-теста HTTP
На рисунке 4 показан пример нескольких модулей сплит-тестов, полученных из одной записи HTTP-теста. Модули включают тесты Login, Import, Create и Logout.
Рисунок 4. Получение нескольких тестовых модулей из одной HTTP-записи
Все тестовые модули на рисунке 4 содержат сгенерированные Rational Performance Tester тестовые переменные. Они генерируются и задаются автоматически при делении теста для создания связей между тестовыми модулями. Кроме того, некоторые тестовые модули включают в себя заданные Rational Performance Tester переменные для использования последующими тестовыми модулями.
Деление HTTP-теста во время записи
Используя панель инструментов Rational Performance Tester Annotation, можно делить HTTP-тест в режиме реального времени в процессе записи. Во время записи теста при помощи панели инструментов Annotation можно вставлять в тест точки деления. После завершения записи Rational Performance Tester автоматически сгенерирует отдельные тестовые модули, основываясь на вставленных точках деления и предоставленных именах тестов.
Если после окончания записи вы поймете, что разделили тест неправильно, или по каким-либо другим причинам захотите записать единый тест, можете использовать файл recmodel из оригинальной записи, который содержит точки деления, для восстановления всего теста без разделения.
Кроме того, панель инструментов Annotation предоставляет дополнительные функциональные возможности, которые можно использовать для аннотирования теста во время записи. Она позволяет вставлять в тест комментарии и транзакции в режиме реального времени. Кроме того, вы можете использовать ее для переименования страниц во время записи, чтобы дать им более содержательные имена. Эти задачи также можно выполнить после записи теста, но зачастую удобнее и эффективнее делать это во время записи.
При вводе имени сплит-теста во время записи важно помнить, что это имя будет связано с тестом, созданным для предыдущей, а не следующей, части сеанса записи.
На рисунке 4 показан пример записи, аннотированной при помощи панели инструментов Annotation. В частности, первым двум страницам были присвоены содержательные имена - Login и Home. Комментарии упрощают понимание цели теста и того, где можно разделить тест после завершения сеанса записи.
Рисунок 5. Панель инструментов Recorder Test Annotation
Теперь, когда вы узнали об использовании предоставляемой Rational Performance Tester функциональности разделения тестов для создания сценариев модульных тестов, мы познакомим вас с тем, как использовать их в следующих целях:
- Построение сценариев тестирования с использованием различных тестовых модулей.
- Связывание различных тестовых модулей при помощи тестовых переменных, чтобы модули могли обмениваться данными.
Построение сценариев тестирования из тестовых модулей
Как показано на рисунках 2 и 4, тестовые модули можно создавать из тестов как во время записи, так и после нее. Каждый сплит-тест представляет собой взаимозаменяемый тестовый модуль. Такие модули можно реорганизовывать и объединять в сценарии большего или меньшего размера. На рисунке 6 показаны примеры использования различных тестовых модулей (от А до D) для создания различных сценариев тестирования. Также рисунок демонстрирует, что некоторые из модулей, такие как А и D, используются повторно в нескольких комбинациях сценариев.
Рисунок 6. Создание сценариев тестирования с использованием тестовых модулей
Некоторые рекомендации по записи и делению сценариев тестирования:
- При записи теста всегда возвращайте главный экран или страницу в конце каждого сценария и перед выходом из системы. Наличие общих начальных и конечных экранов или страниц обеспечивает известное состояние, служащее надежной отправной точкой для других тестов. Это будет полезно в долгосрочной перспективе при добавлении новых модулей.
- Всегда документируйте зависимости и другие сведения о сплит-модулях тестов. Это поможет в обслуживании и повторном использовании сценариев тестирования. Это можно сделать путем вставки комментариев в тест или расписание, а также при помощи поля описания свойств, связанного с каждым тестом. Вставка комментариев перед каждым тестовым модулем эффективнее, потому что такие комментарии более наглядны.
Динамический обмен данными между тестами при помощи тестовых переменных
Функциональность тестовых переменных играет существенную роль в процессе деления теста. После деления записи теста на более мелкие тестовые модули становится необходим механизм для обмена данными между ними. Эту функциональность обеспечивают тестовые переменные, предоставляемые Rational Performance Tester. Вы можете определить переменную в одном тесте, чтобы получить и сохранить данные теста, а затем сослаться на тестовую переменную в другом тесте. Если установить для видимости (области действия) тестовой переменной значение All tests for this user (все тесты для данного пользователя), а не This test only (только данный тест), Rational Performance Tester сохранит значение тестовой переменной после окончания теста. При обращении к этой же тестовой переменной из будущего теста она будет иметь то же значение для данного виртуального пользователя при условии, что тестовая переменная была вновь определена с видимостью All tests for this user.
Использование тестовой переменной
С точки зрения программирования использование тестовой переменной в Rational Performance Tester аналогично другим языкам программирования. Вы можете объявлять и инициализировать тестовые переменные, устанавливать область их действия и изменять их значения. Отличие между использованием переменных в тестах Rational Performance Tester и других программах состоит в том, что все это можно делать с помощью графического пользовательского интерфейса, а программное обеспечение создаст программный код за вас. Кроме того, Rational Performance Tester предоставляет возможности обработки ошибок во время выполнения и совместного использования переменных тестовыми модулями.
Рисунок 7. Блок-схема использования тестовой переменной
Объявление переменных
Следующим шагом после определения тестовых модулей, которые вы хотите связать друг с другом, является объявление переменных и присвоение им соответствующих значений.
Процесс объявления переменной прост:
- Щелкните правой кнопкой мыши на контейнере Test Variables.
- Нажмите кнопку Add.
- Нажмите Variable Declaration и введите имя переменной.
Рисунок 8. Объявление переменной
Контейнер Test Variables в тесте, который генерируется из записи, нельзя удалить, но можно переименовать. Если вы определяете для теста много тестовых переменных, можно добавить вложенные контейнеры, чтобы лучше организовать переменные. Рекомендуется использовать осмысленные имена для тестовых переменных и контейнеров, которые вы определяете.
При объявлении переменной по умолчанию присваивается значение в виде пустой текстовой строки. Можно заменить это значение своей собственной текстовой строкой или значением из другого источника данных, такого как пул данных, ссылка, пользовательский код или другая тестовая переменная. При желании можно изменить или деинициализировать тестовую переменную с помощью оператора присваивания. Пример приведен на рисунке 11. Также тестовую переменную можно вызывать и изменять с помощью пользовательского программного кода.
Кроме того, у вас есть возможность обработки ошибок времени выполнения, если переменная не инициализирована. Вы можете ничего не предпринимать, можете занести ошибку или предупреждение теста в журнал, а можете выйти из теста. Хотя обработка ошибок времени выполнения не является обязательной, она важна при обмене данными между тестами. Если, например, ошибка произойдет в первом тесте, переменной не будет присвоено значение, в результате чего другие тесты получат пустое значение. См. пример на рисунке 9.
Область действия переменной
Тестовая переменная во время выполнения хранится в области данных. Ее область действия определяет, будет ли переменная видима для других тестов или нет.
На рисунках 7 и 9 показаны два варианта для настройки области действия переменной. Можно установить область действия переменной в This test only или в All tests for this user. Это похоже на локальные или глобальные (переменные класса) переменные в других языках программирования.
Рисунок 9. Настройка области действия переменных
Использование локальной переменной
Локальная переменная - это переменная, областью действия которой является только данный тест (опция This test only). На такую переменную можно ссылаться только в том тесте, в котором она объявлена, но не в других тестах. Это происходит потому, что набор данных одного теста невидим для других тестов, даже если другой тест содержит переменную с таким же именем. Локальная тестовая переменная доступна только при посредстве пользовательского кода.
На рисунке 10 приведен пример использования локальных переменных, которым присваиваются значения из пула данных (учетные данные). Затем значение тестовой переменной подставляется вместо данных, фигурировавших при записи теста (имя пользователя и пароль). Просто изменив область действия этих переменных, можно ссылаться на них в других тестах, которые используют для входа в систему эту же информацию.
Рисунок 10. Тестовая переменная инициализируется значением из пула данных
Пользовательская переменная
Область действия пользовательской переменной устанавливается в All tests for this user, что делает переменную видимой для всех тестов, выполняемых одним и тем же виртуальным пользователем. На пользовательскую переменную можно ссылаться из другого теста, объявив переменную с тем же именем и установив ее область действия во втором тесте в All tests for this user. Чтобы переменная была видима для второго теста, область действия переменной в первом тесте также должна быть установлена в All tests for this user.
Обработка ошибок времени выполнения для тестовых переменных очень важна, особенно при совместном использовании их с другими тестами. Существует возможность, что во время выполнения первого теста возникнут ошибки, и переменной не будет присвоено значение. Если переменная не инициализирована, вы должны решить, что делать дальше. Rational Performance Tester предоставляет следующие возможности (см. рисунок 7):
- Ничего не делать.
- Занести ошибку или предупреждение теста в журнал.
- Выйти из теста.
На рисунках 11 и 12 приведены примеры передачи данных из одного теста в другой с помощью пользовательских тестовых переменных.
На рисунке 11 тестовая переменная orderNumber объявляется и инициализируется текстовой строкой no-value. Впоследствии ее значение устанавливается равным номеру заказа в пользовательском коде при помощи операции присваивания.
Рисунок 11. Пример использования тестовой переменной
На рисунке 12 показан второй тестовый модуль (VA02), который использует переменную с тем же именем, что и тестовый модуль VA01. Тестовый модуль VA02 удаляет заказы, которые создает тестовый модуль VA01. В этом примере тестовый модуль VA02 ссылается на данные из теста VA01, а не, например, из пула данных, сгенерированного пользователем.
Рисунок 12. Ссылка на тестовую переменную из другого теста
Теперь, когда вы узнали, как создавать модульные тестовые сценарии и связывать их с помощью тестовых переменных, рассмотрим пример моделирования сценария при помощи тестовых модулей.
Моделирование рабочей нагрузки
Когда тестовые модули разработаны и настроены их можно объединять и комбинировать друг с другом для имитации сценариев рабочей нагрузки.
На рисунке 13 приведен пример использования различных тестовых модулей для моделирования сценария рабочей нагрузки. В этом примере тестовые модули Login, Create order и Logout были получены из одного теста (VA01) при помощи функциональности разделения теста. Затем эти модули были объединены и скомбинированы с тестовым модулем Delete order (VA02), полученным из другого теста.
Как уже было показано на рисунках 11 и 12, тестовые модули Create order и Delete order связаны между собой посредством тестовой переменной orderNumber.
Рисунок 13. Модельные сценарии с различными тестовыми модулями SAP
Этот сценарий рабочей нагрузки позднее можно расширить, включив другие функции путем вставки других тестовых модулей между входом и выходом из системы. Его также можно сократить, удалив или отключив тестовые модули, которые не нужны для конкретного сценария.
При моделировании нагрузки с использованием записей HTTP-тестов всегда проверяйте переменные сплит-тестов, сгенерированные Rational Performance Tester, чтобы удостовериться, что переменные из последующих тестовых модулей создаются и получают значения в тестовом модуле, который выполняется перед ними.
- Всегда придерживайтесь общей структуры теста при моделировании сценария рабочей нагрузки с помощью тестовых модулей. В нем должны быть начало и конец. SAP-сценарий, например, всегда должен включать тесты входа и выхода из системы.
- При создании сценариев рабочей нагрузки из различных тестовых модулей следите, чтобы они объединялись в правильной последовательности, отвечающей использованию приложения.
- Учитывайте зависимости между модулями. При изменении порядка тестовых модулей следите, чтобы совместно используемые тестовые переменные были проинициализированы и заданы надлежащим образом. Это одна из причин необходимости документирования зависимостей тестового модуля.
- Всегда проверяйте сценарии тестирования перед выполнением, чтобы убедиться в том, что вы создали все предполагаемые переменные и присвоили им соответствующие значения.
Преимущества использования сплит-тестов и тестовых переменных
Вот лишь некоторые преимущества использования функциональности разделения тестов и тестовых переменных:
- Получение тестовых модулей из одной записи при сохранении первоначального теста нетронутым.
- Удаление из тестов лишних шагов для:
- уменьшения размера тестов и затрат времени на обслуживание;
- повышения надежности и повторного использования тестов;
- упрощения отладки тестов.
- Построение больших пользовательских сценариев путем преобразования и комбинирования тестовых модулей.
- Ускорение изменения пользовательских сценариев, предназначенных для разных частей системы, при возникновении проблем.
Эта статья посвящена созданию модульных тестов производительности при помощи предоставляемой IBM Rational Performance Tester функциональности разделения тестов с последующим обменом данными между тестовыми модулями с использованием функциональности тестовой переменной.
С помощью функциональности разделения тестов можно получать тестовые модули из существующих записей, сохраняя при этом исходные сценарии. Кроме того, можно разделять и аннотировать тест во время записи с помощью панели инструментов Annotation.
Поддержка тестовых переменных облегчает обмен данными между тестовыми модулями. Тестовые переменные используются для обмена данными внутри теста и между тестами. Тестовые переменные также используются для обмена данными между обычными тестами, не разделенными на модули.
Тестовые модули можно сочетать и заменять, создавая пользовательские сценарии большего или меньшего размера в зависимости от целей тестирования.
Модульность тестов дает ряд преимуществ:
- Помогает минимизировать необходимость перезаписи тестов всякий раз, когда что-то меняется.
- Устраняет лишние шаги в тестах.
- Уменьшает размер тестов, повышает надежность и возможности повторного использования тестов.
- Облегчает отладку тестов и изменение направленности тестовых сценариев.
Теперь вы готовы приступить к части 2 руководства , которая представляет собой реальный пример использования тестовых переменных Rational Performance Tester. Изучите этот пример шаг за шагом, чтобы получить практический опыт.
Автор благодарит за чтение этой статьи и замечания Кента Сифкеса, Санджая Джоши, Алекса Бернштейна, Джоэл Дукен и Жана-Филиппа Делпиру. Кроме того, автор благодарит Арифа Мухаммеда за предоставление HTTP-скриншотов, приведенных на рисунках 10 и 11.
Научиться
- Оригинал статьи: Create modular performance tests to save time and increase reuse: Part 1. Use Rational Performance Tester to exchange data between modular tests (EN).
- Посетите Rational Performance Tester Information Center.
- Узнайте о других приложениях в IBM Rational Software Delivery Platform, включая средства совместной работы для параллельной разработки и географически распределенных групп, а также специализированное программное обеспечение для управления архитектурой, активами, изменениями и релизами, интегрированными требованиями, процессами и портфелями ПО, а также качеством.
- Ознакомьтесь с каталогом Rational, содержащим компьютерные и web-курсы, а также интерактивные курсы под руководством преподавателя. Широкий ассортимент этих курсов, от начальных до продвинутых, поможет вам отшлифовать свои навыки и узнать больше об инструментальных средствах Rational. Курсы из этого каталога можно приобрести для компьютерного обучения или обучения по сети. Кроме того, некоторые курсы начального уровня доступны бесплатно.
- Подпишитесь на информационный бюллетень IBM developerWorks, содержащий еженедельные новости о лучших руководствах, статьях, материалах для загрузки, деятельности сообщества, web-трансляциях и других событиях.
Получить продукты и технологии
Обсудить
-
Принимайте участие в
форумах на
developerWorks Россия.

Карлайн Вилм (Karline Vilme) работает инженером по качеству программного обеспечения в IBM Software Group. Она в основном занимается проверкой систем, интеграцией и тестированием производительности инструментария Rational Performance Tester. Она поступила на работу в IBM в 2000 году и ранее занимала должности системного администратора и руководителя группы поддержки клиентов в IBM Global Services.