Тестирование производительности. Тренинг, по ICQ

Примечание.
Диалог отредактирован. Выкинуты тупиковые ветки, поправлена орфография, убрана конфиденциальная информация, для восстановления связности изменен порядок постов, изменено форматирование.
Участники диалога:
* Дарья
* Сергей Мартыненко 

Daria (10:23):
Привет
SergeyM (13:35):
Привет
SergeyM (13:42):
У меня есть свободное время. Могу проконсультировать по тестированию производительности.

Daria (13:43):
Давай. Я WEST не нашла.
А с роботом у меня сейчас проблема с записью скрипта
SergeyM (13:46):
Не WEST, а WAST. Web Application Stress Tool. Производство Микрософт. Бесплатен.
Daria (13:46):
Уже нашла - скачиваю, спасибо
SergeyM (13:47):
Давай рассмотрим задачу.
Что нужно протестировать?
Daria (13:47):
Веб-систему. Большая система учета финансовых меморандумов
SergeyM (13:48):
Бизнес приложение на тонком клиенте?
Daria (13:48):
Да.
Основное требование, чтобы во время загрузки файлов ФМ в систему, а оно производится около 3-5 минут с одновременной проверкой файла, остальным пользователям было время отклика на любое действие не больше 5 сек
SergeyM (13:50):
Так. Дело несколько осложняется.
Тестирование времени отклика при фоновой операции.
Daria (13:50):
ага
SergeyM (13:51):
Поехали дальше. Нужно выбрать операцию пользователя, для которой будет проводиться тестирование. Берется наиболее массовая операция. Так, например, для форумов, это просмотр темы.
Daria (13:51):
просмотр файлов ФМ
Daria (13:51):
построение отчетов
Daria (13:52):
рецензирование
SergeyM (13:52):
Выбери одну.
Daria (13:52):
просмотр файлов
Daria (13:53):
но там когда просмотр идет, там много страниц
Daria (13:53):
и “+” - разворотов
SergeyM (13:53):
Теперь приведи юзкейс по данной операции.
Daria (13:55):
* Пришло письмо на почту с файлом ФМ
* Система, проверив наличие файла, начинает его загрузку.
* В это время пользователи заходят в систему, открывают пункт меню Просмотр ФМ
* И поочередно переходят по страницам и закладкам
SergeyM (13:56):
Не очень удачное описание. Переформулируем.
SergeyM (14:06):
Вот примерно так:
————————————–
Название. Просмотр ФМ
Контекст использования.
Уровень моря (бизнес операция).
Основное действующее лицо: пользователь системы
Основной сценарий.
1. Пользователь отдает команду на просмотр нового ФМ.
2. Система отображает первую страницу документа и постраничную навигацию.
3. Пользователь отдает команду на просмотр определенной страницы ФМ.
4. Система выполняет необходимые действия
Предусловия.
В системе есть, по крайней мере, один ФМ
Daria (14:08):
Да. Я это и имела в виду, спасибо.
Только это получается сценарий скрипта, а как же сделать одновременную загрузку ФМ?
SergeyM (14:09):
Это разные юзкейсы. И это не тестовый сценарий. Его мы потом напишем.
Daria (14:10):
а
А второй юзкейс, это:
Предусловия:
В почте есть, по крайней мере, один новый файл ФМ
Daria (14:10):
Система все делает автоматически
загрузку и проверку
SergeyM (14:16):
Название. Загрузка ФМ
Контекст использования.
Уровень: функции системы.
Основное действующее лицо: таймер.
Основной сценарий.
1. Таймер запускает сценарий.
2. Приложение опрашивает почтовый ящик.
3. Приложение подтверждает наличие нового письма.
4. Приложение забирает файл из почтового ящика.
5. Приложение подтверждает корректность файла.
6. Приложение помещает информацию из файла в БД
Триггер
В почтовый ящик приходит письмо.
SergeyM (14:23):
Сценарий тестирования.
Предусловия.
* Настроить подсистему опроса на опрос ящика два раза в минуту.
Или
* На запуск по таймеру
Или
* Отключить автоматический запуск 

Не знаю, как у вас работает система, третий вариант предпочтительней.
Daria (14:24):
Автоматический запуск не предусмотрен, можно только время опроса изменить
SergeyM (14:26):
Я имею в виду, что лучше в начале теста запускать операцию ” Загрузка ФМ” вручную.
Daria (14:27):
Я поняла, это пока невозможно.
Daria (14:27):
Есть отдельный модуль ручной загрузке. Но когда я буду тестировать производительность у всей системы - его не будет.
SergeyM (14:28):
Периодичность опросов ящика настраивается?
Daria (14:28):
Да
SergeyM (14:29):
Хорошо. Тогда полминуты.
Daria (14:29):
ок
SergeyM (14:32):
Сценарий тестирования.
1. Отправить ФМ на почтовый ящик. (Запуск прецедента “Загрузка ФМ”).
2. Запустить в цикле прецедент “Просмотр ФМ”
3. Через минуту после начала теста начать измерения
4. Через четыре минуты после начала теста прекратить измерения.
SergeyM (14:33):
Кстати, вот это и есть test case.
Daria (14:34):
Стоп. Я думала, что сначала, нажму кнопочку “Запись”, проделаю все эти действия.
Запишу скрипт, потом укажу количество пользователей и время работы скрипта, потом запущу скрипт и просмотрю и проанализирую полученные и выданные результаты
SergeyM (14:36):
Это реализация. Как она будет сделана - дело десятое. Абстрагируйся от инструмента и сосредоточься, на том, что ты делаешь. В идеале инструмента просто не нужно замечать.
Daria (14:37):
Тогда я все поняла.
SergeyM (14:39):
Нужно подумать, а что мы хотим узнать в результате теста. Вообще то сформулировать цель нужно было раньше, ну да ладно.
Daria (14:40):
Мы хотим убедиться, что при просмотре файлов ФМ с фоновой загрузкой время отклика не превысит 5 секунд
SergeyM (14:42):
Для получения ответа на этот вопрос вообще не нужен инструмент.
Сценарий:
1. Отправить ФМ на почтовый ящик. (Запуск прецедента “Загрузка ФМ”).
2. После старта прецедента, выполнить прецедент “Просмотр ФМ”.

Все. Можно делать вручную. Секундомер тоже средство автоматизации.
Daria (14:49):
:-)
SergeyM (14:51):
Поставим более сложную цель.
Определить максимальное количество пользователей выполняющих прецедент … при фоновой операции ….
Daria (14:51):
1000 пользователей
И файлов одновременно загружаемых (вернее последовательно, но непрерывно) может быть много.
SergeyM (14:52):
Нет, это у тебя требование. А цель теста - определить выполняется это требование или нет.
SergeyM (14:58):
Теперь нам нужны специфические знания о http, работе веб сервера, работе средств нагрузочного тестирования.
SergeyM (15:10):
Для примера рассмотрим просмотр страницы форума.
http://forums.software-testing.ru/index.php?showtopic=3870&st=40
showtopic=3870 - номер темы
st=40 - номер сообщения, с которого начинается страница
——————————–
В твоем случае будет что-то типа
doc=…
page=…
SergeyM (15:16):
Когда ты отдаешь запрос на просмотр страницы, броузер отсылает http запрос серверу. Структура запроса примерно такая, как приведено выше. Часто это структуру можно увидеть в адресной строке.
SergeyM (15:17):
Попробуй вызвать любую страницу и пришли адресную строку.
Daria (15:18):
http://vmserver/pki/data/
SergeyM (15:19):
Я имею в виду вызвать страницу ФМ на просмотр.
Daria (15:19):
это она и есть
SergeyM (15:23):
Понятно. В открытом виде параметры запроса не передаются. Тогда есть следующие пути.
* определить эти параметры при помощи рекодера
* Проанализировать код страницы
* Спросить программистов
SergeyM (15:30):
Время отклика складывается из:
1. передача запроса по сети
2. работа сервера
3. передача ответа
4. обработка ответа на клиенте
Сервер один, клиентов много. Не будем рассматривать время “4″.
Примечание. Это не совсем корректно. Время обработки на клиенте может быть большим. Можно подобрать комбинацию код страницы+компьютер+броузер таким, что это время будет измеряться в минутах.
SergeyM (15:33):
Тогда, для тестирования нам достаточно передавать запрос и дожидаться прихода последнего байта ответа.
Что при этом будет на странице, нас не интересует. Собственно, и сам броузер нам тоже неинтересен.
Таким образом, работает значительная часть инструментов нагрузочного тестирования.
Daria (15:34):
То есть бесплатный инструмент подходит?
SergeyM (15:34):
Для такого тестирования - да.
Daria (15:35):
Отлично.
SergeyM (15:36):
Более продвинутые инструменты идут не через http трафик, а через активацию контролов на странице и отслеживание окончания формирования страницы. В этом случае учитывается и время “4″.
SergeyM (15:48):
Поехали дальше.
Особенностью вебсерверов является кеширование страниц. Это ускоряет отгрузку популярных страниц, но мешает чистоте тестирования.
К сценарию тестирования добавляется следующие ограничения:
* Перед началом тестирования необходимо перезагрузить вебсервер.
* Каждый раз нужно вызывать другую страницу.
SergeyM (15:51):
Есть два простых пути:
* Вызывать разные страницы одного документ doc - константа, page меняется от 1 до …
* Вызывать первую страницу разных документов.
В первом случае в базе должен быть очень длинный документ, во втором очень много документов.
Daria (15:54):
У меня файлы, которые просматриваются, имеют один шаблон и у них у всех фиксированное количество закладок блоков данных и полей, только данные разные.
SergeyM (15:57):
Что-то, я плохо представляю вашу систему.
Пришли скриншот. Естественно в формате png.

SergeyM (16:20):
Получил. К Excel не имеет никакого отношения.
user posted image
Будем вызывать первую страницу у разных документов.
Примечание. Сейчас я делаю несколько допущений, но для грубой оценки производительности такой метод сгодится.

Daria (16:21):
ок
SergeyM (16:23):
Предусловие выполнения теста:
* В БД очень много документов.
* Думаю, тысячи будет достаточно. Потом можно будет посчитать точнее.

SergeyM (16:26):
Если рассматривать WAST, то он работает, как я описывал выше.
Необходимо ввести структуру http запроса, указать изменяемый параметр, задать значения этого параметра.
SergeyM (16:28):
Как правило, значение этого параметра соответствует идентификатору записи в БД.
Т.е. нужно сделать простой select к соответствующей таблице (необходимый навык продвинутого тестера).

SergeyM (16:32):
Здесь нужно знать об ограничении WAST. У него ограниченный буфер параметров. Насколько я понимаю, он ограничен примерно 10 000 символов. Таким образом, при пятизначном идентификаторе нельзя задать более 2000 значений для цикла.

SergeyM (16:48):
Для теста просто попросишь разработчиков дать тебе данные. И спросишь их, верны ли мои предположения о соответствии идентификаторов в БД и параметров запроса.

SergeyM (17:03):
Возвращаемся к тестированию.
* Делаешь все как сказано.
* Проводишь несколько тестов, увеличивая число потоков.
* Затем необходимо интерпретировать полученные результаты.

Последний пункт самый сложный.
Daria (17:04):
И как же их интерпретировать?
SergeyM (17:07):
Примерно так:
—————————————-
Пусть мы получили результат: Максимальная производительность достигается при трех одновременных запросах. При этом производительность системы двадцать запросов в секунду. А каково максимальное количество пользователей?
Для того чтобы ответить на этот вопрос нужно провести анализ действий пользователя и определить, как часто пользователь обращается к системе.
Если пользователь обращается к системе один раз в 60 секунд, тогда максимальное число одновременно работающих пользователей - 1200 человек.
Если же пользователь обращается к системе один раз в 15 секунд, то максимальное число одновременно работающих пользователей - 300 человек, т.е. ваши требования по производительности не выполнены.

SergeyM (17:11):
Вот почти все, что необходимо, чтобы провести грубое тестирование производительности вебсистемы.
Daria (17:08):
понятно…

Оставьте комментарий

Вы должны войти, чтобы оставить свой комментарий.