В статье рассматривается настройка IBM Rational Performance Tester для нагрузочного тестирования функциональности редактирования документов механизма IBM FileNet Content Engine. Данный подход основан на изучении проведенного у заказчика тестирования производительности для большого объема контента, в ходе которого Rational Performance Tester использовался прежде всего для имитации функциональности редактирования документов. Статья будет особенно полезна разработчикам ПО и тестировщикам, пытающимся оценить производительность FileNet Content Engine.
Введение в процесс
Программное обеспечение IBM FileNet P8 помогает предприятиям хранить и извлекать информацию, автоматизировать бизнес-процессы и управлять бизнес-задачами. FileNet Content Engine является ключевым компонентом пакета программ IBM FileNet ECM для управления контентом на корпоративном уровне. Выполняя множество задач, FileNet P8 работает и как очень надежная система управления документооборотом. Пользователь взаимодействует с FileNet Content Engine посредством Workplace - приложения на основе JEE (Java Enterprise Edition), предоставляющего Web-интерфейс для работы с FileNet Content Engine.
В системах управления контентом редактирование документов является одной из главных задач. В FileNet Content Engine редактирование осуществляется посредством следующей последовательности действий:
- Получение (check out) документа в локальную файловую систему с сервера (аналог загрузки документа).
- Изменение и сохранение документа с использованием редактора документов на локальной системе.
- Отправка (check in) документа обратно на сервер Content Engine (аналог выгрузки документа).
В системе управления контентом действия по отправке и получению документов создают большую нагрузку на систему. Поэтому тестирование получения и отправки документов системой FileNet Content Engine особенно важно для оценки ее общей производительности.
В данной статье мы рассмотрим метод настройки IBM Rational Performance Tester для тестирования FileNet P8 Content Engine под нагрузкой.
Настройка Rational Performance Tester для тестирования процесса редактирования документов FileNet P8 Content Engine под нагрузкой состоит из следующих действий:
- Создание сценария тестирования.
- Установка параметров сценария тестирования для добавления изменчивости условий тестирования.
- Корректировка сценария тестирования с целью точного исполнения.
- Создание плана и выполнение нагрузочного тестирования.
Эти действия подробно рассматриваются в следующих разделах.
Создание сценария тестирования
Создайте сценарий тестирования в Rational Performance Tester:
- Откройте рабочую среду Rational Performance Tester.
- Создайте новый проект тестирования производительности.
После создания проекта появится запрос на создание нового сценария тестирования путем записи.
- Во всплывающем окне выберите RPT HTTP Recording в качестве записывающего устройства. Дайте подходящее имя тесту и начните запись.
Rational Performance Tester откроет браузер по умолчанию (Microsoft Internet Explorer) для перехвата запросов.
- Запустите приложение Workplace, выполните необходимые действия в браузере и остановите запись, закрыв браузер.
Будет создан сценарий тестирования с HTTP-запросами, соответствующими этим действиям.
Совет.
Присваивайте содержательные имена HTTP-запросам сценария тестирования. Во время записи сценария тестирования в Rational Performance Tester v8.1 для указания имен запросов можно использовать пиктограмму (белая страница с синим карандашом, обведенная на рисунке 1) в панели инструментов Recorder Test Annotation.
Рисунок 1. Панель инструментов Recorder Test Annotation
Примечание.
Перехватывайте действия, связанные с операциями получения и отправки документов, в одном и том же сценарии тестирования. Такой подход облегчает реализацию логики сценария, гарантирующей, что пользователю разрешено выполнять только операцию отправки документа, который он уже получил.
Во время записи сценария тестирования в Rational Performance Tester следует выполнить следующие действия:
- Вызовите Workplace, введя соответствующий URL в браузере, например:
http://testhost:9080/Workplace
- Войдите в Workplace, используя соответствующие учетные данные пользователя.
- Перейдите в папку с документами, выбрав соответствующее хранилище объектов на домашней странице.
- Чтобы получить документ, выберите его, щелкните правой кнопкой мыши для отображения контекстного меню и выберите операцию Check Out.
- В открывшемся окне браузера загрузите выбранный документ и закройте окно.
- Измените загруженный документ.
- Чтобы отправить измененный документ, выберите полученный документ, щелкните правой кнопкой мыши для вызова контекстного меню и выберите операцию Check In.
- В открывшемся мастере отправки выполните следующие действия:
- На шаге Set Properties отметьте опцию check-in as the major version (отправить как основную версию), а для всех остальных свойств используйте значения по умолчанию.
- На шаге Set Security используйте политики безопасности по умолчанию.
- На шаге Select File используйте вариант Local File для поиска и выбора измененного документа, а затем нажмите кнопку Finish.
- Нажмите кнопку OK для подтверждения изменений. Мастер закроется, и документ будет отправлен на сервер.
- Выйдите из Workplace.
Установка параметров сценария тестирования
Необходимо изменить идентификатор серии версий (version series ID) в запросе получения, чтобы разрешить сценарию тестирования работать с разными документами.
Последней версией документа всегда является полученная версия. Сценарий тестирования ссылается на идентификатор серии версий, а не на последнюю версию документа. FileNet P8 Content Engine меняет ссылку с идентификатора серии версий на последнюю версию документа, а затем получает этот документ.
- Создайте пул данных в Rational Performance Tester с идентификаторами серии версий различных документов в соответствующей папке соответствующего хранилища объектов.
- Для извлечения этих значений из соответствующих объектов документа при помощи клиентского интерфейса FileNet P8 Content Engine можно использовать фрагмент Java-кода, приведенный в листинге 1.
Листинг 1. Код для извлечения идентификаторов серии версий
public Connection getConnection(String host, String port){
//Создать URL FileNet-соединения
String filenetUrl = "http://" + host + ":" + port + "/wsi/FNCEWS40MTOM/";
//Возвратить Connection вызывающей стороне
return Factory.Connection.getConnection(filenetUrl);
}
public void getDocAttributes(String host, String port, String userid,
String passwd, String objStoreName, String folderPath)
{
//Имя пользователя и пароль FileNet P8 Admin
String userName = userid;
String password = passwd;
boolean userPushed = false;
try{
/* Установить соединение с FileNet P8 Content Engine Server,
* используя host и port
*/
Connection conn = getConnection(host,port);
Subject loginUser = UserContext.createSubject(conn,userName,
password,"FileNetP8WSI");
UserContext.get().pushSubject(loginUser);
userPushed = true;
//Доступ к информации Domain и ObjectStore
Domain gcd = Factory.Domain.fetchInstance(conn,null,null);
String domainName = gcd.get_Name();
ObjectStore objStore = Factory.ObjectStore.fetchInstance(gcd,objStoreName, null);
/* Извлечь объект folder, содержащий документы
* Получить набор документов в folder и просмотреть его
*/
Folder folder = Factory.Folder.fetchInstance(objStore, folderPath, null);
DocumentSet docSet = folder.get_ContainedDocuments();
Iterator iter = docSet.iterator();
Document currentDoc = null;
String docTitle = null;
String docId = null;
String docVersionId = null;
int majorVersion = -1;
int minorVersion = -1;
int versionStatus = -1;
Versionable currentVersion = null;
// versionid представляет идентификатор серии версий
System.out.println("doctitle,docid,versionid,majorversion,minorversion,
versionstatus");
//Извлечь свойства документа из текущего объекта document
while (iter.hasNext()){
currentDoc = (Document)iter.next();
docTitle = currentDoc.get_Name();
docId = currentDoc.get_Id().toString();
currentVersion = currentDoc.get_CurrentVersion();
majorVersion = currentVersion.get_MajorVersionNumber();
minorVersion = currentVersion.get_MinorVersionNumber();
docVersionId = currentVersion.get_VersionSeries().get_Id().toString();
versionStatus = currentVersion.get_VersionStatus().getValue();
System.out.println(docTitle + "," + docId + "," + docVersionId + ","+
majorVersion + "," + minorVersion + "," + versionStatus);
}
}finally{
if(userPushed)
UserContext.get().popSubject();
}
}
|
На рисунке 2 показан запрос получения в сценарии тестирования, содержащий идентификатор серии версий.
Рисунок 2. Запрос получения с идентификатором серии версий
В запросе получения переменная vsId представляет собой идентификатор серии версий (см. рисунок 3).
- Замените значений этой переменной на пул данных, содержащий идентификаторы серии версий различных документов.
Рисунок 3. Запрос получения
Совет.
Для добавления изменчивости условий тестирования можно менять в сценарии тестирования учетные данные пользователя, хранилище объектов и данные о папке.
Изменение сценария тестирования
Операция отправки всегда выполняется с зарезервированной версией документа (зарезервированная версия - это полученная, но еще не отправленная версия документа). Чтобы операция отправки работала правильно, в запросе отправки в качестве входного параметра необходимо указывать идентификатор полученного документа. Для этого в Rational Performance Tester можно использовать специализированный код, анализирующий и извлекающий идентификатор документа из URL в ответе на запрос получения.
Ответ на запрос получения, содержащий аргумент для специализированного кода, показан на рисунке 4.
Рисунок 4. Ответ на запрос получения, содержащий аргумент для специализированного кода
В листинге 2 приведен URL-адрес, содержащий идентификатор только что полученного документа в ответе на запрос получения. Этот URL следует передать в качестве аргумента в специализированный код.
Листинг 2. URL-адрес
http://jaltarang.in.ibm.com:9080/Workplace/getContent?mode=download&objectType=document&id={753DFAA1-3EE5-4C44-89E3-51DEFFB7E371}&objectStoreName=mcs1db2&returnUrl=http%3A%2F%2Fjaltarang.in.ibm.com%3A9080%2FWorkplace%2FWcmCloseWindow.jsp%3Fop%3Dcheckout%26refreshUrl%3Dhttp%253A%2F%2Fjaltarang.in.ibm.com%253A9080%2FWorkplace%2FBrowse.jsp%253FwindowId%253DmainWindow%26eventName%3DStateChanged
В листинге 3 показан фрагмент специализированного кода, анализирующего и извлекающего идентификатор документа.
Листинг 3. Код для анализа и извлечения идентификатора документа
public String exec(ITestExecutionServices tes, String[] args)
{
int startIndex = args[0].indexOf("id=") + 3;
int endIndex = startIndex + 38;
tes.getTestLogManager().reportMessage(args[0].substring(startIndex,endIndex));
return args[0].substring(startIndex,endIndex);
}
|
Запрос отправки, содержащий идентификатор документа, показан на рисунке 5.
Рисунок 5. Запрос отправки с идентификатором документа
В запросе отправки переменная id представляет собой идентификатор документа (см. рисунок 6). Значение этой переменной необходимо заменить на значение, возвращаемое специализированным кодом.
Рисунок 6. Запрос отправки
Примечание.
Для добавления изменчивости условий тестирования можно также менять содержимое отправляемого документа. Начиная с версии v8.1.1, Rational Performance Tester имеет для этого встроенную функциональность. Дополнительная информация приведена в техническом комментарии IBM TechNote под названием "Rational Performance Tester: замена содержимого запроса данными из файла".
Создание плана и выполнение теста под нагрузкой
- После изменения сценария тестирования создайте план (schedule) в Rational Performance Tester.
- Добавьте сценарий тестирования в этот план.
- Укажите необходимое число пользователей и коэффициент нарастания (ramp-up rate) и запустите тест на требуемое время.
Важно!
После нагрузочного тестирования важно выполнить операцию отмены получения для всех соответствующих документов. В большинстве сценариев после завершения нагрузочного тестирования основная часть виртуальных пользователей выйдет из системы без выполнения всех действий, указанных в сценарии. В результате многие документы будут находиться в состоянии получения. Если не выполнить действия по приведению системы в исходное состояние, в следующей итерации теста появится множество ошибок. Для автоматизации операции отмены получения документов можно использовать следующий фрагмент Java-кода (листинг 4).
Листинг 4. Код автоматизации операции отмены получения
public void deleteReservation(String host, String port, String userid,
String passwd, String objStoreName, String folderPath)
{
//Имя пользователя и пароль FileNet P8 Admin
String userName = userid;
String password = passwd;
boolean userPushed = false;
try{
/* Установить соединение с FileNet P8 Content Engine Server,
* используя данные host и port
*/
Connection conn = getConnection(host,port);
Subject loginUser = UserContext.createSubject(conn,userName,
password,"FileNetP8WSI");
UserContext.get().pushSubject(loginUser);
userPushed = true;
Domain gcd = Factory.Domain.fetchInstance(conn,null,null);
String domainName = gcd.get_Name();
//Извлечь хранилище объектов, папку и набор документов в папке
ObjectStore objStore = Factory.ObjectStore.fetchInstance(gcd,objStoreName, null);
Folder folder = Factory.Folder.fetchInstance(objStore, folderPath, null);
DocumentSet docSet = folder.get_ContainedDocuments();
Iterator iter = docSet.iterator();
Document currentDoc = null;
/* Выполнить итерацию по набору документов,
* запустить операцию отмены получения и сохранить изменения
*/
while (iter.hasNext())
{
currentDoc = (Document)iter.next();
docTitle = currentDoc.get_Name();
VersionSeries vs = currentDoc.get_VersionSeries();
if(vs.get_IsReserved ())
{
Document resv = (Document) vs.get_Reservation();
Versionable versionable = resv.cancelCheckOut();
((Document)versionable).save(RefreshMode.NO_REFRESH);
System.out.println("reservation deleted for docTitle:" + docTitle);
}
}
}finally{
if(userPushed)
UserContext.get().popSubject();
}
}
|
Использование этого процесса с другими приложениями
В статье рассматривались действия по настройке IBM Rational Performance Tester для нагрузочного тестирования функциональности редактирования документов FileNet Content Engine. Хотя здесь использовалась программа Rational Performance Tester, ключевые концепции и артефакты, описанные в статье, можно использовать и с другими средствами нагрузочного тестирования.