(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

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

Источник: IBM

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

В 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.java 359 КБ HTTP 
Генерирование целого числа в диапазоне от 1 до 10 returnRandomValue.java 1 КБ HTTP 



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 13.12.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
IBM RATIONAL Clearcase Floating User From Rational Clearcase Lt Floating User Trade Up License + Sw Subscription & Support 12 Months
IBM Rational Functional Tester Floating User License
IBM RATIONAL Quality Manager Quality Professional Authorized User Single Install License + Sw Subscription & Support 12 Months
IBM RATIONAL Clearcase Floating User License + Sw Subscription & Support 12 Months
Rational ClearQuest Floating User License
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
CASE-технологии
Программирование в AutoCAD
СУБД Oracle "с нуля"
Новые материалы
Мастерская программиста
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100