Реализация условного цикла в Rational Performance Tester

Пример автоматизированного сценария с условным циклом

Данная статья предназначена для инженеров по автоматизации с уровнем квалификации в Rational Performance Tester от начального до среднего, желающих создать условный цикл с минимальными усилиями. Вишаленду Панди шаг за шагом рассматривает этот процесс, делая его более понятным.

Вишаленду Панди, старший инженер по производительности, IBM

Вишаленду Панди (Vishalendu Pandey) более пяти лет работает системным инженером и инженером по производительности в IBM Supply Chain Application. За это время он разработал автоматизированные сценарии с использованием различных инструментов автоматизации, включая Rational Performance Tester.



07.12.2012

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

В IBM® Rational® Performance Tester можно определить часть теста в виде условного цикла, выполняющегося указанное число раз. Продолжительность цикла можно установить по счетчику, по времени или бесконечной. Но Rational Performance Tester не позволяет динамически устанавливать значение переменной цикла. У новичка в Rational Performance Tester может не быть примера кода, который можно было бы использовать в качестве отправной точки. Поэтому цель данной статьи – обучить вас реализации условного цикла. Мы рассмотрим полный пример сценария автоматизации для условного цикла. Однако это не единственный способ реализации.

Создание условного цикла в Rational Performance Tester

Логика (управляющая часть) цикла размещена в специальном коде (Java-класс), отвечающем за ограничение числа итераций цикла.

Начнем с нового теста производительности. Каждое действие сопровождают снимки экрана.

Откройте новый тест в Rational Performance Tester

Примечание.
Здесь показаны только некоторые шаги мастера Create New Test Wizard. Для остальных шагов предполагается, что никаких изменений значений по умолчанию нет, поэтому просто нажимайте кнопку Next.

  1. В меню File выберите New > New Test.
Рисунок 1. Создание нового теста
Рисунок 1. Создание нового теста
  1. В диалоговом окне Test File Name and Location укажите имя теста. В данном примере я назвал тест LoopExample.
Рисунок 2. Указание имени теста
Рисунок 2. Указание имени теста
  1. В диалоговом окне Protocol and Features отметьте только флажок Core Features.
Рисунок 3. Выбор протокола и функциональных возможностей теста
Рисунок 3. Выбор протокола и функциональных возможностей теста

Добавление в тест бесконечного цикла

  1. После завершения работы мастера Create New Test в окне, в котором открывается новый тест, нажмите кнопку Add и выберите элемент Loop.

При этом добавится элемент loop.

Совет.
Можно активизировать аналогичное контекстное меню, щелкнув правой кнопкой мыши на названии теста (LoopExample на рисунке 4).

Рисунок 4. Добавление цикла из контекстного меню Add
Рисунок 4. Добавление цикла из контекстного меню Add
  1. Выберите добавленный элемент Loop.
  2. Справа в разделе Test Element Details в поле Duration выберите Infinite из перечисленных вариантов.
Рисунок 5. Изменение продолжительности цикла по умолчанию
Рисунок 5. Изменение продолжительности цикла по умолчанию

Добавление элемента custom code (специализированный код) для управления циклом

  1. Щелкните правой кнопкой мыши на элементе Loop.
  2. В контекстных меню выберите Add, а затем Custom Code.

Этот Java-код будет управлять итерациями цикла, основываясь на определенных граничных условиях. В нашем демонстрационном сценарии тестирования мы будем использовать еще один класс, расположенный в сценарии вне цикла, для получения случайного значения числа итераций.

Рисунок 6. Добавление специализированного кода в элемент Loop
Рисунок 6. Добавление специализированного кода в элемент Loop

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

  • customcode.com.ApplicationName.search.controlSearchLoop
  • customcode.com.ApplicationName.create.controlItemAddLoop

В двух этих примерах используется два названия элементов custom code, предназначенных для двух разных сценариев автоматизации. Первый – для сценария поиска, второй – для сценария создания данных. Проще говоря, это сделано для выполнения рекомендаций и правил именования в Java.

Добавление еще одного элемента custom code перед циклом для имитации динамического значения переменной управления циклом

  1. Щелкните правой кнопкой мыши на элементе loop и выберите Insert в контекстном меню для вставки элемента custom code перед элементом loop.

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

Ниже приведены названия классов в данном примере:

customcode.returnRandomValue

customcode.controlMyLoop

  1. Обратите внимание на интересное поведение вариантов Add и Insert контекстного меню. Используйте Add для применения элемента после указываемого элемента, а Insert – для применения перед ним. Здесь указываемым является элемент, на котором был произведен щелчок правой кнопкой мыши, а именно – элемент Loop.

Краткая справка:

  • Add – после.
  • Insert – до.

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

Рисунок 7. Экран проекта теста
Рисунок 7. Экран проекта теста

Написание специализированного кода

Листинг 1. customcode.returnRandomValue (для случайного числа выполнений цикла)
public String exec(ITestExecutionServices tes, String[] args) {
	int rndNumber = (new Random().nextInt(10))+1;
	tes.getTestLogManager().reportMessage("Random Number:"+rndNumber);
return  ""+(rndNumber);}

В данном коде для имитации динамического значения используется генератор случайных чисел, генерирующий целое число в диапазоне от 1 до 10. Мы собираемся передавать его в элемент custom code (customcode.controlMyLoop) внутри цикла для управления числом итераций.

Полный код приведен в файле returnRandomValue.java (см. раздел Загрузка).

Примечание.
tes.getTestLogManager().reportMessage() – это метод Rational Performance Tester, который я использовал в предыдущем листинге для вывода случайного числа. Он появится в двух местах:

  • В Test Log.
  • В Protocol Data > Event Log.

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

Листинг 2. customcode.controlMyLoop
public String exec(ITestExecutionServices tes, String[] args) {
                int i = tes.getLoopControl().getIterationCount();
                if(i>Integer.parseInt(args[0]))
                       tes.getLoopControl().breakLoop();
                else
                       tes.getTestLogManager().reportMessage("Iteration No:"+i);
		
                return null;
         }

Полный код приведен в файле controlMyLoop.java (см. раздел Загрузка).

На снимке экрана, представленном на рисунке 8, показано, как возвращаемое из returnRandomValue значение передается в controlMyLoop в качестве аргумента (args[0]) в разделе Test Element Details для customcode.controlMyLoop.

Рисунок 8. Случайное значение из returnRandomValue
Рисунок 8. Случайное значение из returnRandomValue

Код проверяет число итераций для внутреннего цикла. Внутренний цикл прерывается при превышении числа итераций проверяемого значения (в данном случае это результат customcode.returnRandomValue).

Если число итераций меньше проверяемого значения, код выводит это число.

Примечание.
Важно помнить, что при наличии нескольких циклов tes.getLoopControl()object предоставляет идентификатор самого внутреннего цикла.

Например, во фрагменте псевдокода, представленном в листинге 3, ссылочная переменная myloop будет указывать на LOOP2. Следовательно, этот объект можно использовать для получения числа итераций, а также для прерывания или продолжения цикла.

Листинг 3
LOOP1
    {LOOP2
         { ILoopControl myloop = tes.getLoopControl();
    }
  }

После завершения предыдущих шагов приступим к выполнению сценария.

Мы должны увидеть, что цикл прерывается после определенного числа итераций.

Выполнение сценария

На рисунке 9 показано, что случайное число, сгенерированное кодом customcode.returnRandomValue, было равно 1 (см. текстовое поле справа). Хотя цикл выполняется два раза, условие в customcode.controlMyLoop (2>1) удовлетворяется, поэтому цикл прерывается на второй итерации.

Итак, цель - прервать цикл при определенном условии - достигнута. Однако проверку выполнения условия для числа, показанную здесь, можно заменить любыми другими сравнениями.

Например, можно использовать значение из HTTP-запроса (вместо выводимого в данном случае числа из элемента custom code) и прерывать цикл на основе специальной логики.

Рисунок 9. Журнал выполнения теста
Рисунок 9. Журнал выполнения теста

Как продолжить выполнение цикла по условию

Дополнительной возможностью циклов является операция continue. Она полезна, когда нужно пропустить выполнение итерации при определенных условиях. Например, ее можно использовать при выполнения тела цикла только для четных значений до максимального значения. В листинге 4 я модифицировал предыдущий код, чтобы включить это условие.

Соответствующий код приведен в листинге 4.

Листинг 4. Изменение кода в customcode.controlMyLoop для пропуска выполнения тела цикла в нечетных итерациях
public String exec(ITestExecutionServices tes, String[] args) {
		int i = tes.getLoopControl().getIterationCount();	
    if(i>Integer.parseInt(args[0]))
			tes.getLoopControl().breakLoop();
		else
			if(i%2 !=0)
				tes.getLoopControl().continueLoop();
			else
			tes.getTestLogManager().reportMessage("Iteration No:"+i);
		return null;
	}

После этих изменений журнал теста будет выглядеть так, как показано на рисунке 10.

Рисунок 10. Журнал теста после изменения
Рисунок 10. Журнал теста после изменения

Можно заметить, что возвращаемое из customcode.returnRandomValue значение случайного числа равно 9. Выполнение цикла пропускается для нечетных итераций до десятой итерации, на которой цикл прерывается окончательно.

Я надеюсь, что данная статья будет полезна тем, кто использует для автоматизации тестирования Rational Performance Tester. После прочтения статьи вы сможете создавать условные циклы, даже если являетесь новичком в Rational Performance Tester. Хотя существуют и другие способы достичь тех же результатов, в данной статье продемонстрирован способ, успешно применяемый в наших проектах.


Загрузка

ОписаниеИмяРазмер
Тестирование числа итераций для внутреннего циклаcontrolMyLoop.java359 КБ
Генерирование целого числа в диапазоне от 1 до 10returnRandomValue.java1 КБ

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Rational
ArticleID=850615
ArticleTitle=Реализация условного цикла в Rational Performance Tester
publish-date=12072012