Путь чрезвычайно прост, его легко понять, но трудно сделать; единство знания и действия ведет к совершенству.
Я хотел бы посвятить эту статью всем студентам, которые идут вперед по пути тестирования~~
(ps: давайте сначала разберемся с теоретическими аспектами тестирования производительности)
Определение тестирования производительности:
Протестируйте различные показатели производительности системы с помощью инструментов автоматического тестирования, которые имитируют различные нормальные, пиковые и ненормальные условия нагрузки. И нагрузочное тестирование, и стресс-тестирование являются тестами производительности, и их можно комбинировать.
Методы тестирования производительности:
Он имитирует реальный бизнес и отправляет большое количество одновременных запросов на сервер для создания нагрузки на тестируемую систему, а также анализирует производительность тестируемой системы под различными нагрузками.
Общие цели, для которых мы проводим тестирование производительности, следующие:
а: Оцените производительность системы (в тестовой среде локальной сети или производственной среде оцените уровень обслуживания текущей системы посредством анализа результатов тестирования).
б: Обнаружение узких мест в производительности (выясните ключевые шаги или процессы, которые влияют на общую производительность системы, посредством тестирования производительности, чтобы обеспечить направленную основу для настройки системы).
c: Проверьте результаты настройки (подтвердите, эффективна ли стратегия оптимизации производительности, сравнив результаты тестов после оптимизации и до оптимизации).
1.2.1 Стресс-тест:
Постепенно увеличивая нагрузку на систему, проверяя изменения в производительности системы и, в конечном итоге, определяя, при каких условиях нагрузки производительность системы не достигает максимального уровня обслуживания, который может обеспечить система.
Стресс-тестирование заключается в постепенном увеличении нагрузки, чтобы определенные ресурсы системы достигли критических точек.
1.2.2 Нагрузочное испытание:
Путем постепенного увеличения нагрузки на систему тестируются изменения производительности системы, и в конечном итоге проводится тест для определения максимальной нагрузки, которую система может выдержать при соблюдении показателей производительности.
1.2.3 Проверка стабильности:
Нагружая систему определенной деловой нагрузкой (например, использование ресурсов ЦП от 70% до 90%), запустите ее на некоторое время, чтобы проверить, стабильна ли система. Поскольку запуск занимает много времени, обычно можно проверить, нет ли в системе утечек памяти и других проблем.
1.2.4: Проверка емкости:
При определенных программных и аппаратных условиях в базе данных конструируется количество записей разного порядка, и путем запуска одного или нескольких бизнес-сценариев с определенным количеством виртуальных пользователей получаются показатели производительности разного порядка, т.е. как получить возможность обработки базы данных Максимальная емкость сеанса, максимальная емкость и т. д.
1.2.5 Тест конфигурации:
Пройти проверку программного обеспечения и аппаратной конфигурации тестируемого ПО. Тестирование конфигурации может полностью использовать ограниченные программные и аппаратные ресурсы для максимизации вычислительных возможностей системы. Его также можно использовать в сочетании с другими типами тестирования производительности, чтобы предоставить ориентиры для настройки системы.
(PS: В процессе реализации тестирования производительности общий рабочий процесс выглядит следующим образом: 1: Анализ требований к тесту производительности-2: Разработка плана тестирования производительности 3: Разработка сценария теста производительности-4: Создание среды тестирования производительности-5: Выполнение теста-:6 : Несколько раундов тестирования для проверки и оптимизации после анализа результатов -7: Написание отчета о тестировании производительности -8: Написание сводного отчета о тесте производительности)
(ps: Давайте начнем шаг за шагом с небольшого требования, которое я сделал ранее ~~)
В настоящее время в компании работают 15 разработчиков и 7 тестировщиков; она использует TeamFoundation для документации, тестовых сценариев и управления ошибками. Команда рассматривает возможность использования версии системы ZenTao с открытым исходным кодом для замены существующей TeamFoundation.
Цели этой деятельности по тестированию производительности заключаются в следующем:
1: Могу ли я использовать версию ZenTao с открытым исходным кодом (8.0.1) вместо TeamFoundation для управления деятельностью проекта.
2. Оцените максимальную нагрузку версии ZenTao с открытым исходным кодом (8.0.1) при определенной конфигурации оборудования сервера (cpui5 3,3 ГГц + память 8 ГБ).
(ps: проанализируйте исторические данные команды)
Статистика по количеству тест-кейсов на версию:
(ps: за 12 итеративных версий было создано максимум 1832 новых варианта использования)
Статистика по количеству ошибок, отправленных за один день:
Статистика по количеству отправленных ошибок в час:
На основе анализа данных 12 версий за прошлый год текущая ситуация команды выглядит следующим образом:
Максимальное количество случаев в версии: 1832 Максимальное количество ошибок в одной версии: 113
Выпускайте новую версию каждый месяц, то есть: выпуск каждые 22 рабочих дня.
В ходе каждого процесса выпуска время на написание тестовых примеров составляет: 3 дня, а время выполнения тестов — 7 дней (один раунд регрессионного тестирования).
Грубо рассчитано на основе пикового значенияТекущее количество транзакций команды в каждом сценарии выглядит следующим образом:
(ps: В процессе тестирования необходимо оставить запас в 20% для пиковых значений tps)
Требования членов команды к бизнесу и среде Дзен Дао:
(ps: Анализ требований к производительности — это первый шаг в процессе тестирования производительности. Если этот шаг выполнен правильно, последующее проектирование плана тестирования, разработка сценариев, выполнение теста и составление отчетов о тестировании будут намного проще; обратное рассуждение также верно, если непонятно Какой бы спрос ни был, все остальное напрасно!
Кроме того: Способы сбора данных о спросе: 1. Работа для получения исторических данных о производственной среде. 2: Обратитесь к конкурирующим продуктам. 3: Моделирование мощности может выполняться с приращением данных.
Помните одно: никогда не используйте так называемый принцип 80/20. Без базы данных все — ерунда! )
(ps: Полный план тестирования производительности, просто используйте его~ Хе-хе~)
Основная цель этого теста производительности заключается в следующем:
Протестируйте комплексную производительность завершенной системы и проверьте, соответствуют ли возможности обработки транзакций или системы требованиям к производительности работы системы; Выявлять узкие места в производительности транзакций и устранять их; Имитировать единичные отказы с высокой вероятностью возникновения для проверки надежности системы;
серийный номер | Название компании | приоритет | Примечание | |
---|---|---|---|---|
1 | Войдите в систему | середина | ||
2 | Добавить тестовый пример | высокий | ||
3 | Выполнить вариант использования | высокий | ||
4 | Сообщить об ошибке | высокий | ||
5 | Устранение ошибок | высокий | ||
6 | Закрыть ошибку | высокий | ||
8 | Подтвердить ошибку | высокий | ||
9 | ||||
10 |
/***Четко перечислите определение и объем тестовых показателей, на которые необходимо обратить внимание в этом тесте, а также должны быть перечислены тестовые показатели, на которые не нужно обращать внимание. Следующий контент предназначен только для справки. ***/
Показатели производительности, которые необходимо получить для этого теста производительности, следующие:
Отзывчивость транзакций: то есть время отклика системы под нагрузкой, вызванной одной транзакцией и смешанным сценарием, имитирующим производственные транзакции. Количество транзакций, обрабатываемых в секунду: то есть количество транзакций, завершенных прикладной системой за единицу времени (TPS). Количество одновременно работающих пользователей, которое может поддерживать система.
Ограничительными показателями для этого теста производительности являются:
Использование системных ресурсов: при нормальной нагрузке уровень занятости ЦП и памяти сервера приложений и сервера базы данных должен быть менее 80% и 80% соответственно, а уровень занятости пространства хранения базы данных и файловой системы должен быть менее 80%. . Процент успешных транзакций: Процент успешных транзакций составляет не менее 99,5%.
Показатели, которые не требуют внимания в этом тесте производительности:
Охват бизнес-процессов/путей. Полнота и корректность бизнес-данных. Прочее содержание, такое как удобство использования и управляемость системы, является специальными тестами.
///***Определите цели теста, которых должны достичь индикаторы тестирования каждого функционального элемента в этом тесте. Эта цель должна быть предложена или окончательно подтверждена командой проекта. ***///
Среднее время ответа одной бизнес-операции для разных типов транзакций Значение TPS для одной бизнес-транзакции для разных типов транзакций Среднее время отклика одной бизнес-транзакции под нагрузкой Значение TPS для одной бизнес-транзакции под нагрузкой Комплексное значение TPS системы под нагрузкой
///***Опишите физическую архитектуру производственной среды этого проекта, которая может быть в виде схемы физической архитектуры или схемы топологии сети. ***///
///*Опишите физическую архитектуру среды тестирования производительности этого проекта, которая может быть представлена в виде диаграммы физической архитектуры. *///
Вы можете использовать Visio для рисования схем топологии сети тестовой и производственной среды.
Схема топологии сети тестовой среды (один веб-сервер + один сервер базы данных) очень проста и здесь опущена.
Объясните разницу между тестовой средой и производственной средой этого проекта и определите программные и аппаратные ресурсы среды тестирования производительности, включая конфигурацию каждого компонента тестируемой системы. Таблица ниже предназначена только для справки и не является обязательной.
сервер | Среда тестирования производительности (планирование) | Производственная среда (планирование) | ||
---|---|---|---|---|
Конфигурация оборудования | Конфигурация программного обеспечения и IP | Конфигурация оборудования | Конфигурация программного обеспечения | |
Web&DBсервер | Cpu:i5 Disk:500G Memory:8G | 192.168.10.206 | Cpu:i3 Disk:500G Memory:8G | ОС: Win7 (64 версии). Веб-сервер: Apache2.4 БД:MySql5.5 PHP: 5.4.19 |
Сервер генерации нагрузки | Процессор: i3 Диск: 500 г Память: 8G Сеть: 100 МБ локальная сеть | 192.168.10.188 ОС: Win7 (64-разрядная версия) ЛР 11 | -- | -- |
/*Опишите ситуацию установки тестовой среды для этого теста. */
Интегрированная среда XAMPP:
Панель управления 1.2.6 Версия phpmyadmin: Версия 4.0.8 Версия PHP: PHP 5.4.19 (cli) (собрано: 21 августа 2013 г., 01:12:03) Версия Apache: Версия сервера: Apache/2.4.4 (Win32) версия MySQL: Версия 5.5.32 |
---|
Загрузчик: LoadRunner 11(patch3+patch4)(192.168.10.206)
/*Опишите инструменты тестирования и мониторинга, использованные в этом тесте. */
Браузер: IE11, Chrome43.
Захват протокола: HttpWatch9.3
Сценарий производительности: LoadRunner 11
Инструменты мониторинга: Monyog MySQL и контроллер LoadRunner11.
Создание диаграммы тестовых данных: ECharts
/**Описывает тестовый сценарий, тестовые данные и соотношение транзакций смешанных сценариев для этого теста. **/
пользователь системы:Пользователи, которые разрабатывают роли40индивидуальный Роль тестируют 20 пользователей.
Проекты: 3 проекта (Хранение, Обучение, Клинический)
HttpWatch фиксирует запрос на вход в ZenTao:
Авторизоваться Содержимое, возвращаемое запросомсередина Нет символа, указывающего, успешен ли вход в систему или нет.
Итак: Вставить контрольную точку проверьте, включает ли контент, возвращаемый серединой по запросу Авторизоваться от сервера, строку /zentao/index.
Авторизоваться ZenTao транзакция середина Параметр UserName принимает значение имени пользователя test + development.
Action()
{
lr_think_time(4);
lr_start_transaction("Авторизоваться Дзен Тао");
//Вставить контрольную точку
web_reg_find("Text=/zentao/index ","SaveCount=is_contain_server",LAST);
web_submit_data("user-login.html_2",
"Action=http://192.168.10.188/zentao/user-login.html",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/user-login.html",
"Snapshot=t2.inf",
"Mode=HTML",
ITEMDATA,
"Name=account", "Value={UserName}", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
"Name=referer", "Value=", ENDITEM,
LAST);
//Вручную определяем, успешна ли транзакция Авторизоваться
if(atoi(lr_eval_string("{is_contain_server}"))>0)
{
lr_end_transaction("Авторизоваться Дзен Тао",LR_PASS);
}
else
{
lr_end_transaction("Авторизоваться Дзен Тао",LR_FAIL);
}
web_url("index.html",
"URL=http://192.168.10.188/zentao/index.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/user-login.html",
"Snapshot=t3.inf",
"Mode=HTML",
LAST);
return 0;
}
успех Добавить тестовый примерчас Вернусь к Добавить с сервера вариант Определение того, является ли использование успешным
Вставьте контрольную точку, чтобы вручную определить, является ли добавленная транзакция варианта использования успешной.
Action()
{
//Нажмите, чтобы проверить Войдите на вкладку теста
web_url("qa",
"URL=http://192.168.10.188/zentao/qa/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/my/",
"Snapshot=t4.inf",
"Mode=HTML",
LAST);
//Выбираем вариант использования Введите страницу варианта использования
web_url("вариант использования",
"URL=http://192.168.10.188/zentao/testcase-browse-3.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-browse.html",
"Snapshot=t5.inf",
"Mode=HTML",
LAST);
//Нажмите, чтобы создать новый вариант использования
web_url("Создай вариант использования",
"URL=http://192.168.10.188/zentao/testcase-create-3-0-0.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/testcase-browse-3.html",
"Snapshot=t6.inf",
"Mode=HTML",
LAST);
web_url("story-ajaxGetProductStories-3-0-11-0-false-noclosed-50.html", "URL=http://192.168.10.188/zentao/story-ajaxGetProductStories-3-0-11-0-false-noclosed-50.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/testcase-create-3-0-0.html",
"Snapshot=t7.inf",
"Mode=HTML",
LAST);
lr_think_time(39);
//Добавить транзакцию-Добавить тестовый пример
lr_start_transaction("Добавить тестовый пример");
//Добавляем контрольную точку
web_reg_find("Text=success","SaveCount=addcase_result",LAST);
web_submit_data("testcase-create-3-0-0.html",
"Action=http://192.168.10.188/zentao/testcase-create-3-0-0.html",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/testcase-create-3-0-0.html",
"Snapshot=t8.inf",
"Mode=HTML",
ITEMDATA,
"Name=product", "Value=3", ENDITEM,
"Name=module", "Value=11", ENDITEM,
"Name=type", "Value=feature", ENDITEM,
"Name=stage[]", "Value=", ENDITEM,
"Name=stage[]", "Value=system", ENDITEM,
"Name=title", "Value=testcase{CaseNum}", ENDITEM,
"Name=pri", "Value=3", ENDITEM,
"Name=precondition", "Value=", ENDITEM,
"Name=steps[]", "Value=step1", ENDITEM,
"Name=expects[]", "Value=expectresult{CaseNum}", ENDITEM,
"Name=steps[]", "Value=", ENDITEM,
"Name=expects[]", "Value=", ENDITEM,
"Name=steps[]", "Value=", ENDITEM,
"Name=expects[]", "Value=", ENDITEM,
"Name=keywords", "Value=", ENDITEM,
"Name=files[]", "Value=", ENDITEM,
"Name=labels[]", "Value=", ENDITEM,
LAST);
//Ручная оценка Добавить тестовый Был ли пример успешным?
if(atoi(lr_eval_string("{addcase_result}"))>0)
{
lr_end_transaction("Добавить тестовый пример",LR_PASS);
}
else
{
lr_end_transaction("Добавить тестовый пример",LR_FAIL);
}
web_url("testcase-browse-3--byModule-11.html",
"URL=http://192.168.10.188/zentao/testcase-browse-3--byModule-11.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/testcase-create-3-0-0.html",
"Snapshot=t9.inf",
"Mode=HTML",
LAST);
return 0;
}
HttpWatchползти Выполнить вариант использованияпросить:
Запрос на Выполнить вариант использования не возвращает сведения об успешной транзакции со стороны сервера.
так Вставить контрольную точка Проверить, следует ли возвращать selfClose для определения вручную. вариант использование Успех или провал дел
Каждый тестовый пример может быть выполнен несколько раз без проблем с разрешениями.
Action()
{
lr_think_time(8);
//Добавляем тестовый пример выполнения транзакции
lr_start_transaction("Выполнить вариант использования");
//Добавляем контрольную точку
web_reg_find("Text=selfClose","SaveCount=execuatecase_result",LAST);
web_submit_data("execuate_case",
"Action=http://192.168.10.188/zentao/testtask-runCase{case_str}.html",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/testtask-runCase{case_str}.html",
"Snapshot=t8.inf",
"Mode=HTML",
ITEMDATA,
"Name=steps[5]", "Value=pass", ENDITEM,
"Name=reals[5]", "Value=", ENDITEM,
"Name=case", "Value={CaseIndex}", ENDITEM,
"Name=version", "Value=1", ENDITEM,
LAST);
//Вручную определяем, успешна ли транзакция
if(atoi(lr_eval_string("{execuatecase_result}"))>0)
{
lr_end_transaction("Выполнить вариант использования",LR_PASS);
}
else
{
lr_end_transaction("Выполнить вариант использования",LR_FAIL);
}
web_url("testcase-browse-3.html",
"URL=http://192.168.10.188/zentao/testcase-browse-3.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/testcase-browse-3.html",
"Snapshot=t9.inf",
"Mode=HTML",
LAST);
return 0;
}
Action()
{
lr_think_time(50);
//Добавить транзакцию-Сообщить об ошибке
lr_start_transaction("Сообщить об ошибке");
//Добавляем контрольную точку
web_reg_find("Text=success","SaveCount=submitbug_result",LAST);
web_submit_data("bug-create-3-0-moduleID=0.html_3",
"Action=http://192.168.10.188/zentao/bug-create-3-0-moduleID=0.html",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-create-3-0-moduleID=0.html",
"Snapshot=t15.inf",
"Mode=HTML",
ITEMDATA,
"Name=product", "Value=3", ENDITEM,
"Name=module", "Value=11", ENDITEM,
"Name=project", "Value=1", ENDITEM,
"Name=openedBuild[]", "Value=trunk", ENDITEM,
"Name=assignedTo", "Value=dev{DevNum}", ENDITEM,
"Name=type", "Value=codeerror", ENDITEM,
"Name=os", "Value=win7", ENDITEM,
"Name=browser", "Value=ie11", ENDITEM,
"Name=title", "Value=BugTitle{Num}", ENDITEM,
"Name=severity", "Value=3", ENDITEM,
"Name=pri", "Value=3", ENDITEM,
"Name=steps", "Value=<p>[шаг]</p>\r\n<p>[результат]</p>\r\n<p>[ожидать]</p>", ENDITEM,
"Name=story", "Value=", ENDITEM,
"Name=task", "Value=", ENDITEM,
"Name=mailto[]", "Value=", ENDITEM,
"Name=keywords", "Value=", ENDITEM,
"Name=files[]", "Value=", ENDITEM,
"Name=labels[]", "Value=", ENDITEM,
"Name=case", "Value=0", ENDITEM,
"Name=caseVersion", "Value=0", ENDITEM,
"Name=result", "Value=0", ENDITEM,
"Name=testtask", "Value=0", ЭНДИТЕМ,
ПОСЛЕДНИЙ);
//Ручная оценка Сообщить об Успешен ли турнир?
if(atoi(lr_eval_string("{submitbug_result}"))>0)
{
lr_end_transaction("Сообщить об ошибке",LR_PASS);
}
else
{
lr_end_transaction("Сообщить об ошибке",LR_FAIL);
}
web_url("bug-browse-3.html",
"URL=http://192.168.10.188/zentao/bug-browse-3.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-create-3-0-moduleID=0.html",
"Snapshot=t16.inf",
"Mode=HTML",
LAST);
return 0;
}
Action()
{
web_url("bug-resolve-12.html",
"URL=http://192.168.10.188/zentao/bug-resolve-12.html?onlybody=yes",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-browse.html",
"Snapshot=t19.inf",
"Mode=HTML",
EXTRARES,
"Url=js/kindeditor/themes/default/default.png", "Referer=http://192.168.10.188/zentao/js/kindeditor/themes/default/default.css", ENDITEM,
"Url=theme/zui/css/min.css", "Referer=http://192.168.10.188/zentao/bug-resolve-12.html?onlybody=yes", ENDITEM,
LAST);
lr_think_time(10);
//Добавить транзакцию-Устранение ошибок
lr_start_transaction("Устранение ошибок");
//Добавляем контрольную точку
web_reg_find("Text=selfClose","SaveCount=fixbug_result",LAST);
web_submit_data("bug-resolve-12.html_2",
"Action=http://192.168.10.188/zentao/bug-resolve-12.html?onlybody=yes",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=hiddenwin",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-resolve-12.html?onlybody=yes",
"Snapshot=t20.inf",
"Mode=HTML",
ITEMDATA,
"Name=resolution", "Value=fixed", ENDITEM,
"Name=duplicateBug", "Value=", ENDITEM,
"Name=resolvedBuild", "Value=trunk", ENDITEM,
"Name=resolvedDate", "Value={TimeNow}", ENDITEM,
"Name=assignedTo", "Value={TesterList}", ENDITEM,
"Name=files[]", "Value=", "File=Yes", ENDITEM,
"Name=labels[]", "Value=", ENDITEM,
"Name=comment", «Значение = решено Пожалуйста, проверьте", ENDITEM,
LAST);
//Ручное решение Устранение ошибки, прошла ли транзакция успешно
if(atoi(lr_eval_string("{fixbug_result}"))>0)
{
lr_end_transaction("Устранение ошибок",LR_PASS);
}
else
{
lr_end_transaction("Устранение ошибок",LR_FAIL);
}
web_url("bug-browse.html",
"URL=http://192.168.10.188/zentao/bug-browse.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-browse.html",
"Snapshot=t21.inf",
"Mode=HTML",
LAST);
return 0;
}
Action()
{
web_url("bug-close.html",
"URL=http://192.168.10.188/zentao/bug-close-{Bug_Index}.html?onlybody=yes",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-browse-3-0-assignToMe-0.html",
"Snapshot=t6.inf",
"Mode=HTML",
EXTRARES,
"Url=js/kindeditor/themes/default/default.png", "Referer=http://192.168.10.188/zentao/js/kindeditor/themes/default/default.css", ENDITEM,
"Url=theme/zui/css/min.css", "Referer=http://192.168.10.188/zentao/bug-close-{Bug_Index}.html?onlybody=yes", ENDITEM,
LAST);
lr_think_time(19);
//Начать транзакцию-Закрыть ошибку
lr_start_transaction("Закрыть ошибку");
//Добавляем контрольную точку
web_reg_find("Text=selfClose","SaveCount=closebug_result",LAST);
web_submit_data("bug-close",
"Action=http://192.168.10.188/zentao/bug-close-{Bug_Index}.html?onlybody=yes",
"Method=POST",
"TargetFrame=hiddenwin",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-close-{Bug_Index}.html?onlybody=yes",
"Snapshot=t7.inf",
"Mode=HTML",
ITEMDATA,
"Name=comment", "Value=Закрыть ошибку", ENDITEM,
LAST);
//Вручную определяем, успешна ли транзакция
if(atoi(lr_eval_string("{closebug_result}"))>0)
{
lr_end_transaction("Закрыть ошибку",LR_PASS);
}
else
{
lr_end_transaction("Закрыть ошибку",LR_FAIL);
}
web_url("bug-browse-3-0-assignToMe-0.html",
"URL=http://192.168.10.188/zentao/bug-browse-3-0-assignToMe-0.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.188/zentao/bug-browse-3-0-assignToMe-0.html",
"Snapshot=t8.inf",
"Mode=HTML",
LAST);
return 0;
}
//Начать транзакцию
lr_start_transaction("Подтвердить ошибку");
//Вставить контрольную точку
web_reg_find("Text=selfClose","SaveCount=SureBugResult",LAST);
web_submit_data("bug-confirmBug.html_2",
"Action=http://192.168.10.206:81/zentao/bug-confirmBug-{BugId}.html?onlybody=yes",
"Method=POST",
"TargetFrame=hiddenwin",
"RecContentType=text/html",
"Referer=http://192.168.10.206:81/zentao/bug-confirmBug-{BugId}.html?onlybody=yes",
"Snapshot=t9.inf",
"Mode=HTML",
ITEMDATA,
"Name=assignedTo", "Value=dev{DevIndex}", ENDITEM,
"Name=pri", "Value=3", ENDITEM,
"Name=mailto[]", "Value=", ENDITEM,
"Name=comment", «Значение = Воспроизводимость подтверждено какBug ", ENDITEM,
LAST);
// Определяем результаты транзакции вручную
if(atoi(lr_eval_string("{SureBugResult}"))>0)
{
lr_end_transaction("Подтвердить ошибку",LR_PASS);
}
else
{
lr_end_transaction("Подтвердить ошибку",LR_FAIL);
}
web_url("bug-browse.html",
"URL=http://192.168.10.206:81/zentao/bug-browse.html",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.10.206:81/zentao/bug-browse.html",
"Snapshot=t10.inf",
"Mode=HTML",
LAST);
Объясните метод тестирования (содержание), тестовые примеры и разработку сценария тестирования для этого теста. Следующие разделы предназначены для справки.
Вход в системуДизайн сцены следующий:
сцена 1 | Система входа | |||||
---|---|---|---|---|---|---|
Цель | Тестирование нескольких человек одновременно Выполнение входа | |||||
метод | ||||||
Пользователи Vuser и ресурсы | ||||||
Количество одновременных пользователей | Данные ЦП/памяти/диска | Данные Apache | MySqldata | использование сети | Среднее время ответа на транзакцию | |
10 человек | ||||||
20 человек |
Добавить тестовый примерДизайн сцены следующий:
сцена 2 | Добавить тестовый пример | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Цель | Тестирование нескольких человек одновременно Добавить тестовый Статус производительности примера | ||||||||||||
метод | |||||||||||||
Пользователи Vuser и ресурсы | |||||||||||||
Количество одновременных пользователей | Данные ЦП/памяти/диска | Данные Apache | MySqldata | использование сети | Среднее время ответа на транзакцию | ||||||||
10 человек |
Сообщить об ошибкеДизайн сцены следующий:
сцена 3 | Сообщить об ошибке | ||||||
---|---|---|---|---|---|---|---|
Цель | Тестирование нескольких человек одновременно Сообщить об Выступление Нур | ||||||
метод | |||||||
Пользователи Vuser и ресурсы | |||||||
Количество одновременных пользователей | Данные ЦП/памяти/диска | Данные Apache | MySqldata | использование сети | Среднее время ответа на транзакцию | ||
10 человек |
Устранение ошибок Дизайн сцены следующий:
сцена 4 | Устранение ошибок | ||||||
---|---|---|---|---|---|---|---|
Цель | Проверьте производительность нескольких человек, одновременно переводящих ошибки в фиксированный статус. | ||||||
метод | |||||||
Пользователи Vuser и ресурсы | |||||||
Количество одновременных пользователей | Данные ЦП/памяти/диска | Данные Apache | MySqldata | использование сети | Среднее время ответа на транзакцию | ||
15 человек | |||||||
30 человек |
Закрыть ошибкуДизайн сцены следующий:
сцена 5 | Закрыть ошибку | ||||||
---|---|---|---|---|---|---|---|
Цель | Тестирование нескольких человек одновременно Закрыть Выполнение ошибки | ||||||
метод | 10 пользователей Vuser одновременно (только тестировщики) функция ошибки) | ||||||
Пользователи Vuser и ресурсы | |||||||
Количество одновременных пользователей | Данные ЦП/памяти/диска | Данные Apache | MySqldata | использование сети | Среднее время ответа на транзакцию | ||
10 человек |
Подтвердить ошибку场景设计如下:
сцена 6 | Подтвердить ошибку | ||||||
---|---|---|---|---|---|---|---|
Цель | Тестирование нескольких человек одновременно Подтвердить Выполнение ошибки | ||||||
метод | 20 пользователей Vuser одновременно (только тестировщики) функция ошибки) | ||||||
Пользователи Vuser и ресурсы | |||||||
Количество одновременных пользователей | Данные ЦП/памяти/диска | Данные Apache | MySqldata | использование сети | Среднее время ответа на транзакцию | ||
20 человек |
Авторизоватьсянагрузочный тест:
Сцена 7 | Система входа | |||||
---|---|---|---|---|---|---|
Цель | Оцените максимальный TPS в сценариях входа в систему | |||||
метод | 120-270люди Система входаизTPS | |||||
Пользователи Vuser и ресурсы | ||||||
Количество одновременных пользователей | Использование процессора | Скорость использования памяти | TPS | использование сети | Среднее время ответа на транзакцию | |
100-140 человек | ||||||
100-180 человек | ||||||
180-220 человек |
Добавить вариант использованиямаксимумTPS:
Сцена 8 | Добавить вариант использования | |||||
---|---|---|---|---|---|---|
Цель | Оценивать Добавить вариант максимальное использование сцены TPS | |||||
метод | 120-270люди Добавить вариант использованияизTPS | |||||
Пользователи Vuser и ресурсы | ||||||
Количество одновременных пользователей | Использование процессора | Скорость использования памяти | TPS | использование сети | Среднее время ответа на транзакцию | |
100-140 человек | ||||||
100-180 человек | ||||||
180-220 человек |
Выполнить вариант использованиямаксимумTPS:
Сцена 9 | Выполнить вариант использования | |||||
---|---|---|---|---|---|---|
Цель | Оценивать Выполнить вариант максимальное использование сцены TPS | |||||
метод | 120-270люди Выполнить вариант использованияизTPS | |||||
Пользователи Vuser и ресурсы | ||||||
Количество одновременных пользователей | Использование процессора | Скорость использования памяти | TPS | использование сети | Среднее время ответа на транзакцию | |
100-140 человек | ||||||
100-180 человек | ||||||
180-220 человек |
Сообщить об ошибкемаксимумTPS:
сцена 10 | Сообщить об ошибке | |||||
---|---|---|---|---|---|---|
Цель | Оценивать Сообщить об Нужна сцена, максимальный TPS | |||||
метод | TPS, где 120-270 человек сообщили об ошибках | |||||
Пользователи Vuser и ресурсы | ||||||
Количество одновременных пользователей | Использование процессора | Скорость использования памяти | TPS | использование сети | Среднее время ответа на транзакцию | |
100-140 человек | ||||||
100-180 человек | ||||||
180-220 человек |
Устранение ошибокмаксимумTPS:
сцена 11 | Устранение ошибок | |||||
---|---|---|---|---|---|---|
Цель | Оценивать Устранение сцена ошибки максимум TPS | |||||
метод | TPS со 120-270 людьми, решающими ошибки | |||||
Пользователи Vuser и ресурсы | ||||||
Количество одновременных пользователей | Использование процессора | Скорость использования памяти | TPS | использование сети | Среднее время ответа на транзакцию | |
100-140 человек | ||||||
100-180 человек | ||||||
180-220 человек |
Закрыть ошибкумаксимумTPS:
сцена 12 | Закрыть ошибку | |||||
---|---|---|---|---|---|---|
Цель | Оценивать Закрыть сцена ошибки, максимальное TPS | |||||
метод | 120-270 человек закрывают ошибку ТПС | |||||
Пользователи Vuser и ресурсы | ||||||
Количество одновременных пользователей | Использование процессора | Скорость использования памяти | TPS | использование сети | Среднее время ответа на транзакцию | |
100-140 человек | ||||||
100-180 человек | ||||||
180-220 человек |
После подтверждения тестовой среды и предварительной проверки сценария тестируются все онлайн-транзакции, участвующие в этом тесте. Целью является проверка тестового сценария и фоновой среды, а также первоначально проверка наличия дефектов производительности в самой транзакции.
тестметод:
использовать инструменты LoadRunner для тестирования. Отправьте запрос транзакции на сервер 192.168.10.188.,Получите и проанализируйте полученные результаты. Для выполнения планируется использовать нагрузку 10Vuser.,Возьмите среднее время ответа транзакции как показатель количества.,И посчитаем пропускную способность
верно Все онлайн-транзакции, участвующие в этом тесте, завершаются после теста,Выполните одну транзакциюнагрузочный тест соответственно. Целью является выполнение самой транзакции,Диагностика транзакций на наличие недостатков производительности.
тестметод:
использовать инструменты тестирования LoadRunner отправляет запрос транзакции на 206сервер, получает и анализирует возвращенные результаты.
Многосценарная система стресс-тестирования 24/7
/*Описать поэтапные результаты, которые необходимо вывести после завершения теста, в качестве эталона для контрольного испытания.
После завершения теста основные документы, которые необходимо предоставить, включают, помимо прочего:
«План тестирования производительности версии ZenTao с открытым исходным кодом v8.0.1» «ZenTao с открытым исходным кодом версии v8.0.1. Запись теста производительности и форма отслеживания проблем» «Отчет о тестировании производительности версии ZenTao с открытым исходным кодом v8.0.1»
На основе данных оценки тестовой рабочей нагрузки рассмотрите существующую ситуацию с ресурсами, примите конкретные меры по использованию ресурсов и составьте график в соответствии с общим планом выполнения проекта, то есть, кто какие задачи выполнит и в какие сроки. Таблица ниже предназначена только для справки и не является обязательной.
серийный номер | имя | Ответственное лицо | Период строительства | время начала | время завершения |
---|---|---|---|---|---|
1 | Тест производительности ZenTao с открытым исходным кодом версии v8.0.1 | Х рабочих дней | 2016-2-22 | 2016-2-28 | |
1.1 | подготовка к тесту | х рабочих дней | 2016-2-22 | 2016-2-22 | |
1.1.1 | Разработка плана реализации тестирования | х рабочих дней | 2016-2-22 | 2016-2-22 | |
1.1.2 | Тестовый хост и среда базы данных готовы. | х рабочих дней | 2016-2-22 | 2016-2-22 | |
1.1.4 | Готовы бизнес-данные для теста производительности | х рабочих дней | 2016-2-22 | 2016-2-22 | |
1.1.5 | Развертывание службы готово | х рабочих дней | 2016-2-22 | 2016-2-22 | |
1.1.6 | Подготовка тестового сценария, готовые параметры | х рабочих дней | 2016-2-23 | 2016-2-23 | |
1.2 | Тестирование, нагрузочный тест одной транзакции | х рабочих дней | 2016-2-23 | 2016-2-24 | |
1.2.1 | Тест одной транзакции | х рабочих дней | 2016-2-23 | 2016-2-24 | |
1.4 | нагрузочный тест | х рабочих дней | 2016-2-24 | 2016-2-26 | |
1.5 | Итог теста | х рабочих дней | 2016-2-27 | 2016-2-28 |
/*Управление рисками заключается в оценке различных возможных рисков, которые могут повлиять на тестирование проекта, оценке вероятности и серьезности рисков, а также ранжировании рисков в соответствии с результатами оценки*/
Описание риска | вероятность возникновения риска | Риски Верно Цель Воздействие | Ответственное лицо | избегатьметод |
---|---|---|---|---|
Существует большой разрыв между тестовой средой и операционной средой, а рабочие параметры, полученные в ходе тестирования, различаются. Проверка параметров должна быть повторно проверена на этапе опытной эксплуатации. | середина | Низкий | По результатам испытаний выводится производственная среда, а студенты по эксплуатации и техническому обслуживанию отслеживают данные и своевременно вносят коррективы. | |
Количество тестовых данных База данных середина Количество встроенных данных меньше,Время выполнения транзакций пакетной обработки, рассчитанное по времени тестирования, соответствует требованиям,Данные в производственной среде не могут быть удовлетворены. | середина | высокий | Масштабируйте пропорционально, чтобы уменьшить объем данных системы. | |
Обнаружение серьезных дефектов приводит к длительным модификациям программы или задержке хода тестирования из-за подготовки среды, данных и т. д. | высокий | середина | Зарезервируйте время для обслуживания тестовой среды и время от времени создайте резервную копию тестовой среды и данных. | |
(PS: Независимо от того, записываете ли вы скрипты или разрабатываете их вручную, важно понимать систему сообщений протокола. Давайте сначала познакомимся с системой сообщений протокола http)
Существует множество инструментов для захвата пакетов, к наиболее тяжелым из них относятся Wireshark, затем Fiddler, charles и Omnipeek. Конечно, можно использовать и легкие плагины. Например, firebug и httpwatch одновременно легкие, простые в использовании и необходимы. инструменты для захвата пакетов.
Теперь давайте посмотрим на то, что находится в сообщении запроса сверху вниз.
POST метод для http
(ps: метод http имеет следующие типы
GET Запрос на получение ресурса, определенного Request-URI. POST Добавить новые данные после ресурса, определенного Request-URI. HEAD Запрос на получение заголовка ответного сообщения ресурса, определенного Request-URI. PUT Запросить сервер для хранения ресурса и использовать Request-URI в качестве его идентификатора. DELETE Запросить сервер на удаление ресурса, определенного Request-URI. TRACE Сервер запросов для возврата полученной информации запроса, в основном используемый для тестирования или диагностики. CONNECT Зарезервировано для будущего использования OPTIONS просить Запроссерверизпроизводительность,Или запрос и ресурсысоответствующий Параметрыинуждаться)
/WebServices/TrainTimeWebService.asmx/getStationAndTimeByStationName Запрошенный ресурс верислон (здесь метод интерфейса веб-сервиса середина)
HTTP/1.1 Указывает номер используемой версии протокола http.
Accept: text/html, application/xhtml+xml, */*
Принять в заголовке сообщения запроса указывает тип носителя, приемлемый для браузера.
(PS: Accept: */* Указывает, что браузер может обрабатывать все возвращаемые типы мультимедиа; Accept: text/html Тип обратной передачи, который может принять браузер: text/html ; Если сервер не может вернуть данные типа text/html, сервер должен вернуть ошибку 406 (не acceptable) )
Referer: http://ws.webxml.com.cn/WebServices/TrainTimeWebService.asmx?op=getStationAndTimeByStationName
Сообщите серверу, с какой страницы связан текущий запрос, и сервер сможет получить некоторую информацию для обработки.
(PS:
Когда мы захватываем пакет, мы можем видеть заголовок каждого запроса.,В основном все имеют значения Referer.,Значением является URL-адрес текущей страницы.
То, что делает браузер, довольно просто. Если ссылка нажата на странице А,Затем перейдите на страницу Б.,Браузер вставит заголовок Referer со страницей A в запрос середина. URL-адрес середины, введенный сам по себе, не будет защищать заголовок Referer).
Accept-Language: zh-CN
Укажите, какие языки принимает или предпочитает клиент (например, естественный язык, используемый в контенте)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Информация о клиентском приложении (ядро браузера, информация о ядре операционной системы и т. д.)
Content-Type: application/x-www-form-urlencoded
Укажите тип носителя (MIME) сообщения запроса серединавернослон.
(PS: Наши распространенные типы носителей следующие:
1. текст: используется для стандартизированного представления текстовой информации. Текстовые сообщения могут быть в нескольких наборах символов и/или в нескольких форматах; по умолчанию используется текстовый/обычный формат;
2. multipart: используется для соединения нескольких частей тела сообщения для формирования сообщения. Эти части могут представлять собой данные разных типов, по умолчанию — multipart/mix;
3. приложение: используется для передачи данных приложения или двоичных данных; по умолчанию используется приложение/октет-поток;
4. сообщение: используется для упаковки сообщения электронной почты;
5. изображение: используется для передачи данных статического изображения;
6. аудио: используется для передачи звука или звуковых данных;
7. видео: используется для передачи данных динамического изображения, которые могут представлять собой формат видеоданных, отредактированный вместе со звуком. )
Accept-Encoding: gzip, deflate
Указывает кодировку, принятую клиентом. Обычно указанный метод сжатия,Поддерживать ли сжатие,Какой метод сжатия поддерживается (gzip,deflate,compress;q=0.5 Это не относится к кодировке символов)
Connection: Keep-Alive
Объявить механизм соединения с сервером,Такие как сохранение жизни и т. д.
В основном используется в средах прокси-сетей, чтобы сервер или другие прокси-серверы могли указывать пошаговые заголовки, которые не следует доставлять.
Content-Length: 30
Запрошенная длина сообщения объекта
DNT: 1
Указывает, включать ли функцию DNT (Не отслеживать), 1 означает включение, 0 означает выключение.
Host: www.webxml.com.cn
Объявите информацию хоста, необходимую для запроса URI.
Pragma: no-cache
Поле заголовка Pragma используется для хранения инструкций, специфичных для реализации.,Наиболее часто используется Pragma:no-cache. В протоколе HTTP/1.1 середина,Его значение такое же, как и у Cache-Control:no-cache.
theCityName=%E6%9D%AD%E5%B7%9E
(PS: Это часть тела запроса. Я также расшифровал строку после знака =, и это Ханчжоу)
Краткое изложение заголовков запросов протокола http:
Обычно используемые стандартные заголовки запросов включают следующее:
Нестандартные заголовки запроса включают следующее:
Информация заголовка ответного сообщения
HTTP/1.1 200 OK
версия http-протокола,Код состояния ответа, возвращенный сервером,
Date: Thu, 18 Aug 2016 06:37:22 GMT
Дата и время создания сообщения.
Server: Microsoft-IIS/6.0
Информация о веб-сервере
X-Powered-By: ASP.NET
Объявите язык, на котором был сгенерирован этот ответ
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Указывает механизм кэширования, которому следует ответ.
PS: Cache-Control в основном имеет следующие типы:
(1) Запрос Запрос:
[1] no-cache ---- Не читать кешированные файлы и запрашивать новый запрос от WEB-сервера.
[2] no-store ---- Кэширование как запросов, так и ответов запрещено.
[3] max-age: ---- Указывает, что при повторном доступе к этой веб-странице в течение максимального срока в секундах запрос к серверу выполняться не будет. Его функция аналогична функции Expires, за исключением того, что Expires сравнивается на основе определенного значения даты. Если собственное время кэшера неточно, результат может быть неправильным, но у max-age явно нет этой проблемы. Приоритет Max-age также высок для Expires.
[4] max-stale ---- Разрешенное время окончания чтения должно быть меньше max-stale. Кэш значений вернослон.
[5] min-fresh ---- Примите, что его максимальный срок жизни больше, чем его текущее время. и min-fresh Кэш ценностей вереслон
[6] only-if-cached ---- Сообщает кэшеру, что он ожидает, что содержимое будет получено из кэша, и не заботится о том, является ли кэшированный ответ актуальным.
[7] no-transform ---- Скажите агенту, чтобы он не менял тип носителя.
(2) Ответ:
[1] public ---- Весь контент данных сохраняется, даже веб-страницы, защищенные паролем, сохраняются, а безопасность очень высока.
[2] private ---- Содержимое данных может храниться только в частном кеше, который действителен только для определенного пользователя и не подлежит совместному использованию.
[3] no-cache ---- Можно кэшировать,Но только после того, как иWEBсервер проверит его корректность.,вернуться к клиенту
[4] no-store ---- Кэширование как запросов, так и ответов запрещено.
[5] max-age: ----- В этом ответе указана дата истечения срока действия верислона.
[6] Must-revalidate ---- Если срок действия кеша истечет, исходный сервер будет снова использован для определения того, являются ли это самые последние данные, вместо прокси-сервера между исередина.
[7] max-stale ---- Разрешенное время окончания чтения должно быть меньше max-stale. Кэш значений вернослон.
[8] proxy-revalidate ---- Подобно Must-revalidate, разница в том, что proxy-revalidate исключает кеш пользовательского агента. То есть его правила не применяются к локальному кешу пользовательского агента.
[9] s-maxage ---- Единственное отличие от max-age состоит в том, что s-maxage применяется только к общим кэшам. Он не применяется к локальным кэшам пользовательских агентов и другим однопользовательским кэшам. Кроме того, приоритет s-maxage лучше, чем max-age.
[10] no-transform ---- Сообщите агенту,Не меняйте тип носителя,Например jpg,был изменен на png
Content-Type: text/xml; charset=utf-8
Тип носителя ответного сообщения.
Content-Length: 7325
Длина тела ответного сообщения сервера — степень.
Сводная информация о заголовках ответов наиболее часто используемых протоколов http:
1: Access-Control-Allow-Origin, определяет, какой домен этого ответа может участвовать в междоменном доступе. *Указывает, что вы можете участвовать в междоменном доступе из любого домена.
2: Разрешить, объявить этот HTTP-ответ как использовать какой HTTP-метод, например GET, POST и т. д. Если это неподдерживаемый метод HTTP, будет возвращен код ошибки 405. Method not allowed。
3: Content-Type объявляет MIME-тип этого ответа.
4: ETag, который объявляет ключ этой версии ответа, может определить, изменился ли ресурс (см. заголовок запроса If-Match).
5: Pragma, объявляет, поддерживает ли этот ответ кэширование. Вы можете установить no-cache, чтобы отключить кэширование этого ответа.
6: Обновить, объявляет, что этот ответ будет обновлен или перейдет на новый URL-адрес через определенное время.
7: Статус, код состояния ответа.
Нестандартные заголовки ответов включают следующее:
X-Frame-Options,Объявите параметры для предотвращения атак кликджекинга,Например, Deny предотвращает отображение ответа в iframe.,Sameorigin предназначен для предотвращения отображения ответа на страницах, отличных от этого домена.
Параметры X-Content-Type помогает IE избегать сценариев таблиц стилей, которые не распознают неверные типы MIME, а также используется Chrome для загрузки своих расширений.
X-Powered-By,Объявите язык, на котором был сгенерирован этот ответ。
Код состояния: | Причинная фраза: | значение: |
---|---|---|
100 | Продолжать | После получения начальной части запроса клиент должен продолжить запрос. |
101 | Переключение протоколов | Сервер переключается на протокол, указанный в заголовке обновления, в соответствии с протоколом инструкций клиента. |
200 | OK | сервер успешно обработал запрос |
201 | Созданный | верно Для тех кто хочет сервер создать вереслон по вашему запросу Ресурс создан |
202 | Принимать | Запрос принят,Но сервер еще не обработан |
203 | Non-Authoritative Informatino (Неавторитетная информация) | сервер успешно обработан,Просто копия заголовка сущности из ресурса |
204 | Нет контента | Ответное сообщение содержит несколько заголовков и строку состояния, но не содержит содержания темы объекта. |
205 | Сбросить контент | Браузер должен сбросить все HTML-формы на текущей странице. |
206 | Частичное содержание | Частичный запрос успешен |
300 | Несколько вариантов | Клиент запросил URL-адрес, который фактически указывал на несколько ресурсов. |
301 | Переехал навсегда | Запрошенный URL-адрес был перемещен,Ответ середина должен содержать URL-адрес местоположения, указывающий новый ресурс ресурса. |
302 | Найден (найден) | Запрошенный URL-адрес временно перемещен. |
303 | См. Другое (ссылка на другое) | Попросите клиента применить другой URL-адрес. |
304 | Не изменено (не изменено) | Ресурс не изменился |
305 | Использовать прокси | Доступ к ресурсам должен осуществляться через прокси. Местоположение прокси указано в заголовке Location. |
307 | Временное перенаправление | |
400 | Плохой запрос (неправильный запрос) | сервер не может понять полученный запрос,То есть был выдан аномальный запрос. |
401 | Несанкционированный (несанкционированный) | Прежде чем клиент сможет получить доступ к ресурсам, он должен сначала пройти аутентификацию. |
403 | Запрещенный | сервер отклонил запрос |
404 | Не найдено (не найдено) | сервер Запрошенный URL-адрес не найден |
405 | Method Not Allowed(не разрешеноиспользоватьизметод) | Запрос середина имеет неподдерживаемый метод по запрошенному URI. |
406 | Неприемлемо (не могу принять) | |
407 | Требуется аутентификация прокси (требуется аутентификация прокси) | |
408 | Таймаут запроса (таймаут запроса) | |
409 | Конфликт | Сделанный запрос создал некоторые конфликты на ресурсе. |
410 | Ушёл (исчез) | Запрошенный ресурс когда-то существовал на сервере |
411 | Требуемая длина (указание необходимой длины) | сервер требует, чтобы заголовок Content-Length был включен в сообщение запроса середина |
412 | Предварительное условие не выполнено (предварительное условие не выполнено) | сервер не может удовлетворить запрошенные условия |
413 | Request Entity Too Large (субъект запроса слишком велик) | Клиент отправил запрос с URL-адресом запроса, который был длиннее, чем сервер мог или хотел обработать. |
414 | Request URI Too Long (слишком длинный URI запроса) | |
415 | Неподдерживаемый тип носителя (неподдерживаемый тип носителя) | сервер Тип контента объекта, отправленного клиентом, не может быть понят или поддержан. |
416 | Запрошенный диапазон не удовлетворяется (запрошенный диапазон не удовлетворен) | |
417 | Ожидание не оправдалось (невозможно оправдать ожидания) | |
500 | Internal Server Ошибка (внутренняя ошибка сервера) | |
501 | Не реализовано (не реализовано) | |
502 | Bad Gateway (сбой шлюза) | сервер, действующий в качестве прокси или шлюза, обнаружил недопустимый ответ от восходящего потока в цепочке ответов середина |
503 | Услуга недоступна (услуга не предоставляется) | сервер в настоящее время не может обслуживать запросы |
504 | Тайм-аут шлюза | |
505 | Версия HTTP не поддерживается (неподдерживаемая версия HTTP) |
1. Настройте сетевой прокси-сервер браузера (в качестве примера возьмем Chrome51).
«Настройки» «Сеть» «Изменить настройки прокси»
Адрес прокси-сервера установлен на 127.0.0.1, а порт должен быть незанятым (здесь 9999).
2. Настройте LoadRunner Record OptionsсерединаизPort Mapping
“Recording Options””Port Mapping””New Entry”
Целевой сервер: IP-адрес целевого сервера.
Например: я хочу получить доступ к сервису Easystudy на хосте 118. Введите здесь IP-адрес, как показано выше.
Переадресация трафика: установите флажок, чтобы разрешить прохождение локального порта. Здесь локальный порт должен быть заполнен незанятым (в соответствии с настройкой браузера 9999).
Следует отметить следующее:
1: тип приложения должен быть установлен на «Приложения Win32».
При записи скриптов через Port Mapping
Тип приложения больше не является Интернет-приложением. Здесь необходимо выбрать «Приложения Win32», поскольку при записи LR запускает небольшое окно «LoadRunner Socket Proxy Starter».
2:Program to record
Его необходимо заполнить как абсолютный путь к файлу bin\wplus_init_wsock.exe в каталоге установки LR.
3: Настройка уровня захвата
По умолчанию это данные уровня сокета. Если после завершения записи скрипт пуст.
Вам необходимо перейти на данные уровня сокета и уровня WinNet, а затем снова записать.
1. Поделитесь Wi-Fi на своем ноутбуке (здесь я использую гаджет для совместного использования Wi-Fi от Cheetah).
2. Настройте мобильный Wi-Fi-прокси.
3. Включите Fiddler для захвата пакетов (на следующем рисунке в качестве примера используется Didi Chuxing)
(PS: Изучите волшебный инструмент Fiddler~)
(ps: Поняв структуру предыдущего http-сообщения, воспользуемся победой. Давайте посмотрим, как вручную разрабатывать сценарии производительности на основе содержимого перехваченного пакета)
Добавьте информацию заголовка для следующего запроса:
web_add_header(“Accept-Language”,” zh-CN”)
Добавьте информацию заголовка ко всем последующим запросам:
web_add_auto_header("Accept–Encoding", "gzip");
Я также могу определить, какую информацию заголовка запроса необходимо сохранить через настройки при записи скрипта:
Record Options---Advanced---Headers
кроме того:web_cleanup_auto_headers()перестань оглядываться назад HTTP Попросите середину добавить пользовательские заголовки.
web_revert_auto_header | перестань оглядываться назад HTTP Запрос середина добавляет определенные заголовки, но генерирует неявные заголовки. |
---|
web_add_filter(”action=Include/Exclude”,” Attribute=xxx”,LAST)
Устанавливает URL-адреса для включения или исключения в следующем запросе середина
web_add_auto_filter(”action=Include/Exclude”,” Attribute=xxx”,LAST)
Установите включенные или исключенные URL-адреса для всех последующих запросов.
web_add_cookie("lang=zh-cn;theme=default;windowWidth=1584;windowHeight=353; sid=0lab6lvctq0hh2flm48qq520h2");
Добавьте новый файл cookie или измените существующий файл cookie.
web_remove_cookie удаляет указанный файл cookie (иweb_add_cookieверно)
web_add_cookie_ex("Cookie=client_id=China127B; path=/; expires=Wednesday, 09-Nov-2001 23:12:40 GMT; domain=", "Insert=Alt", "AllowEmptyDomain=yes", LAST );
Добавить пользовательские файлы cookie
web_cleanup_cookies()
Очистить все файлы cookie, сохраненные текущим пользователем.
Формат функции Web_url:
web_url("Login",
"URL=http://localhost/somostorage/UserInfo/Login",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t7.inf",
"Mode=HTML",
EXTRARES,
"Url=../Images/Login/logo-center.png", "Referer=http://localhost/somostorage/Content/themes/login/gelogin.css", ENDITEM,
"Url=../Images/Login/gebutton.png", "Referer=http://localhost/somostorage/Content/themes/login/gelogin.css", ENDITEM,
"Url=../images/icomoon/icomoon.ttf", "Referer=http://localhost/somostorage/Content/UIForIpadAndIphone/css/glyphs.css", ENDITEM,
"Url=../Images/Images/user_btn.png", "Referer=http://localhost/somostorage/Content/UIForIpadAndIphone/css/index.css", ENDITEM,
"Url=../Content/UIForIpadAndIphone/images/mainview/jiantou.png", "Referer=http://localhost/somostorage/Content/UIForIpadAndIphone/css/index.css", ENDITEM,
"Url=../Images/Buttons/page_go.png", "Referer=http://localhost/somostorage/Content/themes/bluestyle/cont.css", ENDITEM,
"Url=../Content/UIForIpadAndIphone/images/mainview/bg_fileheader.png", "Referer=http://localhost/somostorage/Content/UIForIpadAndIphone/css/index.css", ENDITEM,
"Url=../Content/UIForIpadAndIphone/images/mainview/4.png", "Referer=http://localhost/somostorage/Content/UIForIpadAndIphone/css/index.css", ENDITEM,
"Url=../Content/UIForIpadAndIphone/images/imageview/mleft.png", "Referer=http://localhost/somostorage/Content/UIForIpadAndIphone/css/index.css", ENDITEM,
"Url=../Content/UIForIpadAndIphone/images/imageview/mright.png", "Referer=http://localhost/somostorage/Content/UIForIpadAndIphone/css/index.css", ENDITEM,
LAST);
Формат функции Web_submit_data:
Существует четыре распространенных метода постметода протокола HTTP, поэтому форматы скриптов также различаются:
1:application/x-www-form-urlencoded
Это, пожалуй, самый распространенный POST Как отправить данные. Родной браузер <form> форма, если не установлена enctype атрибут, то в конечном итоге он будет иметь вид application/x-www-form-urlencoded метод отправки данных.
Во-первых, тип контента обозначен как application/x-www-form-urlencoded, во-вторых, предоставленные данные соответствуют; key1=val1&key2=val2 кодировка, ключ и val Все выполнено URL Транскодирование. Большинство серверных языков имеют хорошую поддержку этого метода.
Скрипт почтового запроса в формате application/x-www-form-urlencoded выглядит следующим образом:
web_submit_data("DoLogin",
"Action=http://localhost/somostorage/UserInfo/DoLogin",
"Method=POST",
"TargetFrame=",
"RecContentType=application/json",
"Referer=http://localhost/somostorage/UserInfo/Login",
"Snapshot=t8.inf",
"Mode=HTML",
ITEMDATA,
"Name=json", "Value={\"UserName\":\"admin\",\"Password\":\"admin\",\"ValidateCode\":\"\",\"IsRemenber\":\"false\",\"LoginErrorCount\":\"0\"}", ENDITEM,
LAST);
2:multipart/form-data
Это еще один распространенный POST Как подаются данные. Когда мы используем форму для загрузки файлов, мы должны разрешить <form> форма enctyped равный multipart/form-data。
web_submit_data(
//step name
"UploadROIFiles",
//Запрошенный URL-адрес
"Action=http://localhost/somostorage/NoSession/UploadROIFiles",
//Метод имитации HTTP-запроса
"Method=POST",
//тип кодировки
"EncType=multipart/form-data",
//Содержит текущую ссылку Ресурс фреймимя
"TargetFrame=",
"RecContentType=text/html",
//URL-адрес для отправки запроса на эту страницу
"Referer=http://localhost/somostorage/NoSession/RoiUploadIndex?studyPk=4c7fb2fe-e817-4068-9513-8d2a94f796a8&uid=UID201101010000010000&d=0.7157794737040377",
//имя снимка
"Snapshot=t29.inf",
//режим записи Есть htmlиhttp
"Mode=HTML",
//Знак разделения атрибута и списка данных, JavaVuserсередина недоступен.
ITEMDATA,
"Name=showImport0", "Value=Стек навыков инженера внешнего интерфейса.jpg", "File=Yes", ENDITEM,
//ENDITEM — конечный идентификатор каждого ресурса в списке середина
"Name=showImport1", "Value=", "File=Yes", ENDITEM,
"Name=showImport2", "Value=", "File=Yes", ENDITEM,
"Name=showImport3", "Value=", "File=Yes", ENDITEM,
"Name=showImport4", "Value=", "File=Yes", ENDITEM,
"Name=hidMarkerPk", "Value=", ENDITEM,
"Name=hidStudyPk", "Value=4c7fb2fe-e817-4068-9513-8d2a94f796a8", ENDITEM,
"Name=hidStudyUid", "Value=UID201101010000010000", ENDITEM,
"Name=hidPostData", "Value=", ENDITEM,
"Name=hidType", "Value=", ENDITEM,
"Name=casePk", "Value=", ENDITEM,
LAST);
Давайте посмотрим на еще одну очень часто используемую функцию.
Web_custome_request()
этотиндивидуальный Функции можно моделироватьgetиpostпросить,так Если мы разработаем скрипт вручную Вы можете использовать эту функцию для имитации отправки всех типов сообщений-запросов.
3:application/json
web_custom_request(
//step Здесь вы можете назвать его как угодно
"restful_api",
//Определяем метод http-запроса, который необходимо смоделировать
"Method=POST",
//запрошенный URL
"URL=http://127.0.0.1:5000/todo/create_task",
"Mode=HTTP",
//тип кодировки
"EncType=application/json",
//Тип полученного контента
"RecContentType=application/json",
//Основная часть сообщения запроса
"Body={\"title\": \"Create a Task\"}",
"TargetFrame=",
LAST );
Для моделирования сообщений протоколов HTTP или HTTPS достаточно использовать три функции web_url, web_submit_data и web_custome_request.
lr_start_transaction("Имя транзакции")
Начальный идентификатор транзакции
lr_end_transaction("Имя транзакции",статус транзакции)
идентификатор завершения транзакции
(PS: Обратите внимание: не используйте LR_AUTO, который поставляется с LR для всех транзакций, чтобы определить, успешна транзакция или нет.,
Почему?
потому что LR_AUTO только определяет, является ли формат запроса, отправленного на сервер, правильным. Вместо того, чтобы судить о нашем бизнесе, LR недостаточно умен, чтобы четко понимать бизнес-логику каждого пользователя).
Контрольная точка: web_reg_find
web_reg_find("Text=Welcome", "SaveCount=Welcome_Count", LAST );
Зарегистрируйте запрос (ассоциацию), сохраняющий динамические данные в качестве параметров:
web_reg_save_param("outFlightVal", "LB=outboundFlight value=", "RB= checked >", LAST );
Зарегистрируйте запрос, использующий в качестве параметров граничные значения динамических данных (эта функция является обновлением web_reg_save_param):
web_reg_save_param_ex("When_Txt", "LB=Where and ", "RB= do", LAST )
Функция преобразования строк:
atoi() Функция, используемая для преобразования строки в целое число (int)
atoi читает начало строки, останавливаясь на первом нечисловом символе
Возвращает текущее значение параметра скрипта середина:
lr_eval_string
Сохраните постоянное или переменное количество программы середина как параметры lrсередина:
lr_save_string
Объедините две строки типа char:
strcat
Преобразование кодировки строк
lr_convert_string_encoding
(PS: Есть много других функций LR. Посмотреть их можно через F1)
Позвольте мне рассказать вам небольшую историю, с которой я столкнулся в процессе разработки скриптов~~
Конфигурация тестовой среды:
LoadRunner 11(patch3+patch4)
HttpWatch 9.3
Webсервер:IIS6.0
ОС: Win7 64 бит.
Браузер: Firefox 28, IE11.
Хозяйственные операции:добавить патологию Оцениватьисследовать(В три шага:1:болезнь консервациилюди Основная информация 2. Заполните и сохраните информацию о первичной опухоли. 3: Заполните и сохраните информацию о метастазах)
Скрипт начальной версии:проходитьFireFox28 Запись с помощью LoadRunner.
Проблемы с воспроизведением:Параметризация,После связывания динамических данных,Застрял на этапе спасения исходной опухоли,Скриншот скрипта выглядит следующим образом:
Информация журнала воспроизведения:нуждатьсяруководитьассоциацияиз Полеanalysepkне существует
Первая идея — распечатать информацию, возвращенную с сервера на этом этапе.
Измените зарегистрированную функцию web_reg_save_param середина перед этим шагом. Левая и правая границы равны "{"и"}" соответственно. Затем lr_output_message выводит информацию, возвращаемую сервером. Результаты следующие:
Видя, что значение, соответствующее полю флага, является ложным, я предполагаю, что это, вероятно, неудача в бизнесе.
Используйте HttpWatch для захвата пакетов Просмотр при сохранении исходного фокуса серверправильныйиз Формат возврата,Как показано ниже:
Увидев, что соответствующее значение поля флага истинно, я спросил студентов-разработчиков и подтвердил: flag=false означает, что бизнес не был обработан успешно.
Проверяйте данные тела снова и снова (после декодирования URL-адреса и генерации случайной строки), чтобы убедиться, что они верны~~ Ошибка по-прежнему существует при запуске сценария здесь.
Подумав об этом снова и снова, я решил попросить своих однокурсников по разработке взглянуть на исходный код. Какой метод вызывается для этого шага? Сколько параметров он получает? Каковы типы параметров? Какие суждения выносятся по полученным параметрам?
Чтобы облегчить разработку и последующую работу, я изменил адрес службы в сценарии на машину одноклассника по разработке. Есть точки останова, которым он должен следовать шаг за шагом.
Первый шаг в разработке позиционирования:Информация об исключении обнаруживается и сообщается,Определенное поле pk в базе данных нарушает ограничение уникальности.
Я проверил свой сценарий и обнаружил проблему
Я посмотрел эти значения pk в httpwatch, и они появились только при запросе на сохранение исходного фокуса. Лично я предполагаю, что их можно передать как одну и ту же случайную 32-битную строку.
Продолжаем следить за развитием Эти пакеты не возвращаются со стороны сервера. Может ли он генерироваться случайным образом? Можно я не буду это писать?
Позиционирование развития, второй шаг:завершить этиpkЭто нормально, не передавать значениеиз,Таким образом, значения поля pk запроса середина устанавливаются пустыми.,сноваRunСкрипт。Bingo~~~! Сделанный!
Я также надеюсь, что все студенты Тестирования производительность Процесс разработки скриптасередина Сделайте понимание бизнеса главным приоритетом!
В блоке Run середина можно указать количество итераций всей логики Run. Установленное здесь количество итераций не вступит в силу при истинноInitialиEnd.
Блоксередина может содержать несколько действий, и можно установить вероятность выполнения действия. Блоксередина может содержать Block.
Темп: вы можете установить временной интервал между итерациями.
(PS: вы можете установить флажок «Включить ведение журнала при отладке». Если вам нужно просмотреть информацию, возвращаемую сервером, мы можем выбрать «Расширенный журнал». Наиболее часто используемый сценарий — проверка подстановки параметров)
Не забудьте отключить ведение журнала при выполнении теста, иначе жесткий диск будет заполнен файлами журналов.
(PS: Время обдумывания используется для имитации времени ожидания фактического процесса работы; если вы просто хотите оценить, насколько сервер может выдержать параллелизм в определенной конфигурации среды, вы можете игнорировать время обдумывания; также: время обдумывания не должно быть помещено в сделку)
simulate browser cache Параметры этотиндивидуальный Параметрыотносится к виртуальному пользователюиспользовать Кэширование имитируемого браузера,Кэш используется для сохранения часто используемых файлов на локальном компьютере.,Это сокращает время подключения к сети,По умолчанию,Эмуляция кэша включена,Когда кэширование отключено,Виртуальные пользователи будут игнорировать все кэширование и загружать все ресурсы при каждом запросе. (PS: даже если симуляция кэша отключена,верно Каждый ресурс на странице загружается только один раз,Даже если ресурс появляется несколько раз. Ресурсом может быть изображение, фрейм или файл сценария другого типа). При использовании LoadRunner выполняет параллельное тестирование.,Каждый пользователь имеет свой собственный кеш и извлекает изображения из кеша. Если кэширование отключено Параметры,Все виртуальные пользователи не будут использовать кеш для эмуляции браузера.
Cache URLs requiring content (HTML) Параметрыэтотиндивидуальный Параметрыотносится кVugenКэшировать только веб-страницыизнекоторая необходимая информация,Эта информация может представлять собой необходимую информацию для проверки, данные анализа или сопутствующие данные.,Когда ты проверишь это,Эта информация автоматически кэшируется (включено по умолчанию).
Check for newer versions of stored pages every visit to the page Параметрыэтотиндивидуальный Параметрыотносится к Браузер будет хранитьсуществоватьcacheсерединаиз Информация веб-страницыи Последние просмотрыизстраницаруководить Сравнивать,Когда этот пункт отмечен галочкой,vugen увеличит «If-modified-since» в HTTP-заголовке.,Во время процесса выполнения сцены этот параметр может отображать последнюю информацию о веб-странице.,А также увеличить количество сетевых потоков.,в целом Конфигурацияэтотиндивидуальный Параметры是用来匹配浏览器настраивать来达到模拟浏览器из Цель。 Download non-HTML resources Параметрыэтотиндивидуальный Параметрыотносится к виртуальному пользователюсуществовать Посетите сайт во время повторачас Загрузить изображенияизпроцесс,этот里картинаотносится к Следовать Сстраница录制изкартинаи那些没有Следоватьстраница录制下来изкартина。(PS: После отключения этого параметра,Вы можете столкнуться с ошибкой проверки изображения.,потому чтонекоторые картинки будут меняться при посещении сайта).
Simulate a new user each iteration Параметрыэтотиндивидуальный Параметрыотносится кVuGenв итеративном процессесерединасбросить всеизHTTPсодержание,Этот параметр позволяет виртуальному пользователю более точно выдавать себя за пользователя, начинающего новый сеанс.,Он удаляет все файлы cookie,Закрыты все TCP-соединения (включая пакеты поддержки активности),Очищен кеш симулированного браузера.,Сбросить HTML-фрейм,И очистил имя пользователя и пароль.
Clear cache on each iteration ПараметрыВо время каждой итерациисерединаочистить браузерсередина Кэширование для достижения первого моделированияиндивидуальный Когда реальный пользователь впервые посещает веб-страницу,Снимите флажок, чтобы отключить этот параметр.,Разрешить виртуальным пользователям использовать кэш для хранения информации о пользователях,Для имитации пользователя, посетившего веб-страницу.
(PS:существоватьбегатьчаснастраиватьсередина Переключиться на загрузку На странице «Фильтры» выберите «Исключить». address in список, добавьте URL-адрес внешней сети, чтобы избежать загрузки внешних сетевых ресурсов)
Запустите скрипт еще раз после установки лога в середине сообщения, результаты следующие:
Комбинация правил 1:Sequential + Each iteration + Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Sequential | Each iteration | Continue with last value |
Значение результата показано ниже. В одной итерации середина принимает одно и то же значение; в разных итерациях середина принимает значения в порядке списка, когда параметров недостаточно, выполняется следующий раунд списка параметров цикла.
Комбинация правил 2:Sequential + Each occurence+ Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Sequential | Each occurence | Continue with last value |
Результат значения: В одной итерации середина новое значение параметра будет приниматься по порядку каждый раз, когда параметр появляется в разных итерациях середина, новые значения будут приниматься по порядку, при недостаточном количестве параметров список параметров будет зацикливаться; принимать значения по порядку.
Комбинация правил 3:Sequential + Once + Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Sequential | Once | Continue with last value |
Результат значения: независимо от количества итераций и количества виртуальных пользователей, работающих одновременно, будет взято только одно значение.
Комбинация правил 4:Random + Each iteration + Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Random | Each iteration | Continue with last value |
Результат значения: за одну итерацию середина,Независимо от того, сколько раз параметр появляется, он будет принимать одно и то же значение случайным образом. На разных итерациях будут приниматься новые случайные значения.
Комбинация правил 5:Random + Each occurence + Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Random | Each occurence | Continue with last value |
Результат значения: значение будет получаться случайным образом каждый раз, когда параметр появляется в Actionsсередина.
Комбинация правил 6:Random + Once+ Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Random | Once | Continue with last value |
Результат значения: только одно значение будет случайно выбрано в Actionsсередина.
Комбинация правил 7:Unique + Each iteration + Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Unique | Each iteration | Continue with last value |
Результат значения: Каждая итерация будет принимать уникальное значение параметра; при недостаточном количестве параметров будет взято последнее, но logсередина сообщит об ошибке.
Комбинация правил 8: Unique + Each iteration + Continue in a cyclic manner
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Unique | Each iteration | Continue in a cyclic manner |
Результат значения: каждая итерация будет принимать уникальное значение параметра. Если параметров недостаточно, список параметров будет зациклен;
Комбинация правил 9:Unique + Each iteration + abort Vuser
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Unique | Each iteration | abort Vuser |
Результат значения: каждая итерация будет принимать уникальное значение параметра; если параметров недостаточно, выполнение Vuser будет остановлено.
Комбинация правил 10:Unique + Each occurence + Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Unique | Each occurence | Continue with last value |
Результат значения: каждый раз при появлении параметра будет приниматься уникальное значение параметра. При недостаточном количестве параметров в журнале середина будет сообщено об ошибке.
Комбинация правил 11:Unique + Each occurence + Continue in a cyclic manner
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Unique | Each occurence | Continue in a cyclic manner |
Результат значения: каждый раз, когда появляется параметр, будет взято уникальное значение параметра. Если параметров недостаточно, список параметров будет зацикливаться;
Комбинация правил 12:Unique + Each occurence + abort Vuser
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Unique | Each occurence | abort Vuser |
Результат значения: каждый раз, когда появляется параметр, будет взято уникальное значение параметра. Если параметров недостаточно, выполнение Vuser будет остановлено.
Комбинация правил 13:Random + Once + Continue with last value
Select Next Value | Update Value On | When Out Of Values |
---|---|---|
Random | Once | Continue with last value |
Результат значения: каждый пользователь Vuser будет принимать только уникальное значение параметра.
Все методы нормализованы: вы можете использовать параметры моделирования для просмотра результатов извлечения параметров.
Ассоциация относится к получению динамических данных, возвращаемых серверным терминалом, и установлению соединения между данными клиента и данными серверного терминала.
Когда использовать ассоциации:
Когда нам нужно использовать динамические данные, возвращаемые со стороны сервера, нам нужна функция регистрации web_reg_save_param, чтобы сохранить данные, возвращаемые со стороны сервера, в параметр середина.
В следующей таблице перечислены свойства, доступные для web_reg_save_param.
NotFound
Обработка случая, когда граница не найдена и создается пустая строка. Значение по умолчанию «ОШИБКА» означает, что граница не найдена. LoadRunner Должно быть выдано сообщение об ошибке. Если установлено значение «EMPTY», сообщение об ошибке не будет выдано, и выполнение сценария продолжится. Обратите внимание, что если для сценария включен параметр «Продолжить при ошибке», даже если NOTFOUND Если установлено значение «ОШИБКА», скрипт все равно продолжит выполнение, если граница не найдена, но сообщение об ошибке будет записано в расширенный файл журнала середина.
LB
Левая граница параметров или динамических данных. Этот параметр должен быть непустым и заканчиваться на строка с нулевым завершением. Параметр границы чувствителен к регистру; чтобы игнорировать регистр, добавьте «/IC» после границы. Если после границы указан «/BIN», указываются двоичные данные.
RB
Правая граница параметров или динамических данных. Этот параметр должен быть непустым и заканчиваться на строка с нулевым завершением. Остальные правила такие же, как и у LB.
RelFrameID
с просьбой URL соответствующий HTML Уровень иерархии страниц. Возможные значения: ALL или цифры.
Search
Область поиска - Местоположение для поиска данных с разделителями. Возможные значения: заголовки (Только заголовок поиска), Тело (Искать только данные тела, а не заголовки) или ALL (Текст поиска и заголовок). Значение по умолчанию: ALL
ORD
Этот необязательный параметр представляет соответствующий серийный номер или количество вхождений. Серийный по умолчанию номердля 1。
Если указано «Все», значение параметра будет сохранено в массиве середина, а найденная динамическая переменная количество будет сохранена в массиве середина. По умолчанию используется ord=1. Если ищется несколько символов и вы хотите сохранить их в массиве, то ord=all они сохраняются в pr_1 соответственно. pr_2 ..... Его серединаpr_count — это внутренняя функция, подсчитывающая количество массивов.
SaveOffset
Смещение подстроки количества найденного значения будет сохранено в параметре. Значение по умолчанию: 0。
Значение смещения количества должно быть неотрицательным. Из искомой строки середина получите подстроку. По умолчанию saveoffset=0.
Savelen
Находит значение длинной степени подстроки (по указанному смещению количествасередина) и сохраняет его в параметр. Значение по умолчанию: ñ1,Представляет до тех пор, пока строкаизконец。
Convert
Преобразование, которое будет применено к методу данных: HTML_TO_URL: будет HTML Закодированные данные преобразуются в URL Формат кодированных данных
HTML_TO_TEXT: будет HTML Закодированные данные преобразуются в обычном текстовом формате.
Несколько советов по функциям:
1. web_reg_save_param должен быть прописан до операции получения возвращаемого значения, и после операции получения возвращаемого значения.
2. Максимальное количество сохраняемых параметров не может превышать 256 байт. Если оно превышает 256 байт, укажите int. web_set_max_html_param_len (const char *length ) функция расширяет диапазон сохранения параметров
Например: web_set_max_html_param_len ("1024"); //Расширяем максимальный диапазон хранения параметров до 1024 байт
3、LBиRBпозжеи С"/ic",тогда границы совпадают как с прописными, так и со строчными буквами(Не добавлять,То есть по умолчанию учитывается регистриз)
Например: web_reg_save_param("IsRight","LB/ic=cache-control: private\r\n\r\n","RB/ic=|",LAST);
Создать среду ZenTao под Windows очень просто. Загрузите сжатый пакет с официального сайта, распакуйте его и запустите.
Вот и все.
(ps: Интегрированная среда ZenTao использует базу данных mysql и интегрирует phpmyadmin для удобного управления базой данных через браузер)
Разработку сценариев можно выполнить вручную, создав группы и указав сценарии, генераторы нагрузки и количество пользователей Vuser, включенных в каждую группу;
Вы также можете создавать сцены вручную в процентном режиме.,использовать Этот метод создания сцены может указать общее количество пользователей Vuser сцены середина willuse,И назначьте каждому сценарию генератор нагрузки и определенный процент от общего числа пользователей Vuser.
Режим выполнения скрипта:
Real-world График: Подача давления в соответствии с проектом сцены, что позволяет обеспечить испытания ступенчатым давлением и пиковым давлением.
(PS: В реальном режиме середина, Продолжительность приоритетавысокий во время выполнения параметр)
Basic Расписание: выполнение в соответствии с итеративным методом, разработанным сценарием. Можно выполнять только испытания на пиковое давление.
Schedule by:
Сценарий: При объединении в сцену нескольких сценариев все сценарии выполняются единым образом в соответствии с разработанным режимом работы сцены.
Группа: Когда в сцену объединяются несколько сценариев, метод выполнения каждого сценария разрабатывается индивидуально.
(PS: Наши часто используемые настройки сцены соответствуют нашим потребностям в тестировании производительности следующим образом:
1) эталонтест:
Используйте виртуального пользователя для итеративного выполнения N раз и примите среднее значение результатов теста в качестве базового эталонного значения.
2) одна транзакциянагрузка
Одновременное использование нескольких пользователей верно транзакцияруководитьнагрузочный тестировать, анализировать, соответствуют ли показатели эффективности потребностям. Используя пиковое давление, вы можете проверить производительность системы при определенных пиковых значениях. используйте наддув Echelon, вы можете протестировать систему на максимальном уровне. одновременных пользователейиоптимальный Количество одновременных пользователей。
Предложение: в одной транзакциянагрузочный используйте комбинацию пикового давления и лестничного теста.
3) Комплексная сценанагрузка
Моделируйте реальные торговые сценарии, анализируйте обычные бизнес-операции, выбирайте транзакции с наибольшим количеством ежедневных транзакций и разумно распределяйте транзакции. одновременных пользователей, работать непрерывно в течение определенного периода времени и анализировать, соответствуют ли результаты тестирования требованиям.
4) стабильностьтест
Выберите несколько общих транзакций в зависимости от спроса, настройте их в соответствии с процентом пикового давления и запустите их стабильно в течение определенного периода времени, чтобы проверить, работает ли система нормально и находится ли использование системных ресурсов в оптимальном состоянии.
)
существовать Целенаправленный сценариясередина, вы можете определить Тестовую программу, которая будет реализована Цель, LoadRunner автоматически построит сцену исходя из этих целей.
Можно в Целенаправленном сценарийсередина Определите желаемый сценарийизследующее5типиз Цель:Количество виртуальных пользователей, кликов в секунду (только Интернет) Vuser), транзакций в секунду, страниц в минуту (только в Интернете) Vuser) или время ответа транзакции.Можетпроходитьщелкнуть【Edit Scenario Цель...] настройки, такие как тип цели, минимальное количество пользователей, максимальное количество пользователей, время работы и т. д.
(PS: Когда наши требования к тестированию производительности очень ясны, мы можем использовать целевую модель для проверки уровня системных служб; мы также можем проверить, соответствуют ли наши результаты оптимизации требованиям)
(PS: Когда нам нужно смоделировать большое количество пользователей Vuser, для генерации нагрузки необходимо несколько загрузочных машин, чтобы избежать того, чтобы загрузочная машина стала узким местом, тем самым более точно моделируя сценарии параллелизма)
1. Установка, установите loadrunner 11 на компьютер, который необходимо добавить в качестве загрузочной машины.
2 Запустите агент HP loadrunner-advanced Setting-loadrunner agaent и запустите агент LR.
3. Отключите брандмауэр загрузочной машины.
4. Добавьте загрузочную машину,Добавьте загрузочную машину к машине, на которой находится сцена, в качестве пресс-машины для текущей сцены.,Введите IP-адрес, операционную систему и другую информацию о загрузочной машине (операционную систему и временный каталог можно не указывать, будут использоваться значения по умолчанию).,Нажмите еще: появится «Карточка параметров генератора нагрузки».
5. Подключите нагрузочную машину.,Нажмите кнопку подключения, чтобы подключиться к загрузочной машине.,Столбец состояния изменится на «Готово», указывая на то, что загрузочная машина доступна.,Заголовок столбца указывает состояние ресурсов загрузочной машины.,Если он зеленый, значит, есть свободные ресурсы.,Красный означает, что сервер занят.
6. Настройте верное нажатие на ответ скрипта.,В группе можно настроить соответствующую печать для каждого сценария.,Конфигурацияметодкликload Пресс выбора генератора.
(PS: Настоятельно рекомендуем серию инструментов Spotlight, которая представляет собой профессиональную базу данных Oracle/MySQL.
Конечно, мы также можем написать собственный скрипт оболочки или Python для мониторинга базы данных).
Давайте посмотрим на общие показатели мониторинга производительности базы данных Oracle:
--Ожидание случаев мониторинга--
select event,
sum(decode(wait_Time, 0, 0, 1)) "Prev",
sum(decode(wait_Time, 0, 1, 0)) "Curr",
count(*) "Tot"
from v$session_Wait
group by event
order by 4;
--Конфликт сегмента отката--
select name, waits, gets, waits / gets "Ratio"
from v$rollstat a, v$rollname b
where a.usn = b.usn;
--Отслеживать соотношение ввода-вывода табличного пространства--
select df.tablespace_name name,
df.file_name "file",
f.phyrds pyr,
f.phyblkrd pbr,
f.phywrts pyw,
f.phyblkwrt pbw
from v$filestat f, dba_data_files df
where f.file# = df.file_id
order by df.tablespace_name;
--Отслеживать соотношение ввода-вывода файловой системы--
select substr(a.file#, 1, 2) "#",
substr(a.name, 1, 30) "Name",
a.status,
a.bytes,
b.phyrds,
b.phywrts
from v$datafile a, v$filestat b
where a.file# = b.file#;
--Найти все индексы определенного пользователя--
select user_indexes.table_name,
user_indexes.index_name,
uniqueness,
column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type,
user_indexes.table_name,
user_indexes.index_name,
column_position;
--монитор SGA изжизньсередина Ставка--
select a.value + b.value "logical_reads",
c.value "phys_reads",
round(100 * ((a.value + b.value) - c.value) / (a.value + b.value)) "BUFFER HIT RATIO"
from v$sysstat a, v$sysstat b, v$sysstat c
where a.statistic# = 38
and b.statistic# = 39
and c.statistic# = 40;
--монитор скорости буфера словаря SGA середина --
select parameter,
gets,
Getmisses,
getmisses / (gets + getmisses) * 100 "miss ratio",
(1 - (sum(getmisses) / (sum(gets) + sum(getmisses)))) * 100 "Hit ratio"
from v$rowcache
where gets + getmisses <> 0
group by parameter, gets, getmisses;
--монитор SGA-середины, процент попаданий в общий кэш середины должен быть менее 1%--
select sum(pins) "Total Pins",
sum(reloads) "Total Reloads",
sum(reloads) / sum(pins) * 100 libcache
from v$librarycache;
select sum(pinhits - reloads) / sum(pins) "hit radio",
sum(reloads) / sum(pins) "reload percent"
from v$librarycache;
--мониторSGAсерединаredo частота попаданий в буфер журналасередина,Должно быть менее 1%--
SELECT name,
gets,
misses,
immediate_gets,
immediate_misses,
Decode(gets, 0, 0, misses / gets * 100) ratio1,
Decode(immediate_gets + immediate_misses,
0,
0,
immediate_misses / (immediate_gets + immediate_misses) * 100) ratio2
FROM v$latch
WHERE name IN ('redo allocation', 'redo copy');
--монитор памяти и коэффициента сортировки жесткого диска Увеличить sort_area_size--
SELECT name, value
FROM v$sysstat
WHERE name IN ('sorts (memory)', 'sorts (disk)');
--монитор Текущая база данных, кто и что запускает SQLЗаявление--
SELECT osuser, username, sql_text
from v$session a, v$sqltext b
where a.sql_address = b.address
order by address, piece;
--монитор буфера словаря--
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE;
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;
----Когда это значение больше 0,5, параметр необходимо увеличить--
select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher';
select count(*) from v$dispatcher;
select servers_highwater from v$mts;
Когда server_highwater близок к mts_max_servers, параметр необходимо увеличить.
---Степень фрагментации--
select tablespace_name, count(tablespace_name)
from dba_free_space
group by tablespace_name
having count(tablespace_name) > 10;
alter tablespace name coalesce;
alter table name deallocate unused;
create or replace view ts_blocks_v as
select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space
union all
select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
select * from ts_blocks_v;
select tablespace_name, sum(bytes), max(bytes), count(block_id)
from dba_free_space
group by tablespace_name;
--Просмотреть таблицу фрагментов степени Ченг высокая--
SELECT segment_name table_name, COUNT(*) extents
FROM dba_segments
WHERE owner NOT IN ('SYS', 'SYSTEM')
GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM dba_segments
GROUP BY segment_name);
---Проверьте состояние хранения таблиц и индексов--
select segment_name, sum(bytes) space, count(*) ext_quan
from dba_extents
where tablespace_name = '&tablespace_name'
and segment_type = 'TABLE'
group by tablespace_name, segment_name;
select segment_name, count(*)
from dba_extents
where segment_type = 'INDEX'
and owner = '&owner'
group by segment_name;
--Обнаружить события в базе данных середина и подождать--
SELECT event, total_waits, total_timeouts,time_waited, average_wait FROM v$system_event
--Запросить события и время ожидания сеанса середина--
select sid, event, total_waits,average_wait from v$session_event where sid=10;
--Процесс ожидания запроса--
SELECT sid, seq#, event, wait_time, state FROM v$session_wait;
---Текущий оператор sql--
select sql_text, users_executing, executions, loads from v$sqlarea;
--Запросить скорость кэширования кэша середина середина--
select sum(pins) "Executions",
sum(reloads) "Cache Misses",
sum(reloads) / sum(pins)
from v$librarycache;
-- cpu used by this session --
select a.sid,
spid,
status,
substr(a.program, 1, 40) prog,
a.terminal,
oSUSEr,
value / 60 / 100 value
from v$session a, v$process b, v$sesstat c
where c.statistic# = 12
and c.sid = a.sid
and a.paddr = b.addr
order by value desc;
--Просмотр блокировки таблицы--
select * from sys.v_$sqlarea where disk_reads>100
--Ожидание случаев мониторинга--
select event,
sum(decode(wait_Time, 0, 0, 1)) "Prev",
sum(decode(wait_Time, 0, 1, 0)) "Curr",
count(*) "Tot"
from v$session_Wait
group by event
order by 4
--Просмотр операторов SQL, выданных на стойке регистрации--
select user_name, sql_text
from v$open_cursor
where sid in (select sid
from (select sid, serial#, username, program
from v$session
where status = 'ACTIVE'))
--Пространство, занимаемое таблицей данных--
select segment_name, tablespace_name, bytes, blocks
from user_segments
where segment_type = 'TABLE'
ORDER BY bytes DESC, blocks DESC
--Просмотр размера фрагмента табличного пространства--
select tablespace_name,
round(sqrt(max(blocks) / sum(blocks)) *
(100 / sqrt(sqrt(count(blocks)))),
2) FSFI
from dba_free_space
group by tablespace_name
order by 1
--Проверьте использование дискового табличного пространства--
select b.file_id идентификационный номер файла,
b.tablespace_name имя табличного пространства,
b.bytes количество байтов,
(b.bytes - sum(nvl(a.bytes,0))) ужеиспользовать,
sum(nvl(a.bytes, 0)) оставшееся место,
sum(nvl(a.bytes, 0)) / (b.bytes) * 100 оставшийся процент
from dba_free_space a, dba_data_files b
where a.file_id = b.file_id
group by b.tablespace_name, b.file_id, b.bytes
order by b.file_id
--Просмотр использования сеанса сегмента отката--
SELECT r.name Имя сегмента отката,
s.sid,
s.serial#,
s.username имя пользователя,
t.status,
t.cr_get,
t.phy_io,
t.used_ublk,
t.noundo,
substr(s.program, 1, 78) Рабочие процедуры
FROM sys.v_$session s,sys.v_$transaction t,sys.v_$rollname r
WHERE t.addr = s.taddr and t.xidusn = r.usn
ORDER BY t.cr_get,t.phy_io
--Просмотр оставшейся доступной памяти в области SGA--
select name,
sgasize/1024/1024 "Allocated(M)",
bytes/1024 "**Пробел(K)",
round(bytes/sgasize*100, 2) «**Процент пространства (%)»
from (select sum(bytes) sgasize from sys.v_$sgastat) s, sys.v_$sgastat f
where f.name = 'free memory'
---Таблицы, не являющиеся пользователем системы, встроенные в табличное пространство SYSTEM середина--
SELECT owner,table_name
FROM DBA_TABLES
WHERE tablespace_name in('SYSTEM','USER_DATA') AND
owner NOT IN('SYSTEM','SYS','OUTLN', 'ORDSYS','MDSYS','SCOTT', 'HOSTEAC')
---Самая низкая производительность SQL--
SELECT * FROM ( SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC)
WHERE ROWNUM<100
---SQL, который читает диск более 100 раз--
select * from sys.v_$sqlarea where disk_reads>100
---Наиболее часто выполняемый sql--
select * from sys.v_$sqlarea where executions>100
---Запрашивать пользовательские сеансы, которые используют больше процессора--
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and
c.sid=a.sid and
a.paddr=b.addr
order by value desc
В Windows для мониторинга можно использовать скрипты Python. В Linux настоятельно рекомендуется использовать nmon. Любой, кто его использует, знает~.
Что касается показателей производительности ОС, то можно просто погуглить~
Следует подчеркнуть один момент: нам не обязательно использовать LoadRunner для мониторинга ОС~ методмного Исследуйте самостоятельно
Общие показатели производительности ОС Linux:
количество градусов | описывать |
---|---|
Average load | Среднее количество процессов в состоянии «Готово» одновременно за последнюю минуту |
Collision rate | Количество коллизий, обнаруженных в сети Ethernet в секунду |
Context switches rate | Количество переключений между процессами или потоками в секунду |
CPU utilization | Процент использования процессора |
Disk rate | скорость передачи данных с диска |
Incoming packets error rate | Количество ошибок, полученных в секунду при получении пакетов Ethernet |
Incoming packets rate | Количество входящих пакетов Ethernet в секунду |
Interrupt rate | Количество отключений устройства в секунду |
Outgoing packets errors rate | Количество ошибок, отправленных в секунду при отправке пакетов Ethernet |
Outgoing packets rate | Исходящих пакетов Ethernet в секунду |
Page-in rate | Количество страниц, считываемых в физическую память в секунду |
Page-out rate | Количество страниц, записанных в файл подкачки и удаленных из физической памяти в секунду |
Paging rate | Количество страниц, считываемых в физическую память или записываемых в файл подкачки в секунду |
Swap-in rate | Количество заменяемых процессов обмена |
Swap-out rate | Количество выгружаемых процессов |
System mode CPU utilization | Процент времени, в течение которого ЦП использовался в системном режиме |
User mode CPU utilization | Процент времени, в течение которого ЦП использовался в пользовательском режиме |
Часто используемые показатели производительности для ОС Windows:
Объект | количество градусов | описывать | ||
---|---|---|---|---|
System | % Total Processor Time | Средний процент времени, в течение которого все процессоры в системе были заняты выполнением небездействующих потоков. В многопроцессорной системе, если все процессоры постоянно заняты, это значение равно 100 %, например: Если все процессоры заняты на 50 %, это значение равно 50 %, тогда как если четыре из этих процессоров являются середина Если один из них занят на 100 %, значение равно 25 %. Отражает время, потраченное на полезную работу соотношение. Каждому процессору будет назначен один простаивающий поток простаивающего процесса середина, который будет потреблять Все эти непроизводительные циклы процессора, не используемые другими потоками. | ||
Processor | % Processor Time (Windows 2000) | Процент времени, потраченный процессором на выполнение небездействующих потоков. Этот счетчик предназначен для активности процессора Главный показатель. Это выполняется путем измерения простоя процессора на каждом интервале выборки. Время, затрачиваемое потоком процесса, затем рассчитывается путем вычитания этого значения времени из 100%середина. (У каждого процессора есть простаивающий поток, который завершается, когда другие потоки не готовы к работе. потребляет циклы процессора). Он отражает процент интервала выборки, занятый полезными заданиями. Этот счетчик отображает средний процент занятости в течение периода выборки. Это значение времени, в течение которого служба неактивна при мониторинге, Затем рассчитайте это, вычитая это значение из 100%середина. | ||
Объект | количество градусов | описывать | ||
System | File Data Operations/sec | Скорость, с которой устройство файловой системы компьютера выполняет операции чтения и записи. Здесь не учитываются операции по управлению файлами. | ||
System | Processor Queue Length | Мгновенная длина очереди процессора в количестве потоков. Если не одновременно линия монитора счетчик процессов, этот счетчик всегда равен 0. Все процессоры используют очередь, Поток ожидает, пока процессор выполнит вызов цикла в очереди. Эта степень длины не включает Текущий выполняющийся поток. Обычно, если очередь процессора длинная, первого уровня Если оно превышает 2, это может указывать на засорение процессора. Это значение является мгновенным, а не средним по времени. | ||
Memory | Page Faults/sec | Это значение представляет собой количество ошибок страниц для процессора середина. Когда процесс ссылается на определенную виртуальную память page, страница не находится в рабочем наборе основной памяти. При середине произойдет ошибка страницы. Если страница находится в резервном списке середина (то есть уже находится в основной памяти середина) или используется совместно Если страница не используется другим процессом, ошибка страницы не приведет к извлечению страницы с диска. | ||
PhysicalDisk | % Disk Time | Процент времени, в течение которого выбранный диск обслуживал запросы на чтение и запись. | ||
Memory | Pool Nonpaged Bytes | Количество байтов в невыгружаемом пуле середина, которое можно получить от компонентов операционной системы после выполнения ими заданных задач. Системная память, область пространства. Страницы невыгружаемого пула не могут быть выгружены в файл подкачки середина. Они с тех пор Поскольку он выделен, он всегда находится в основной памяти середина. | ||
Memory | Pages/sec | Чтобы разрешить ссылки на страницы, которых нет в памяти на момент обращения, читайте с диска или записывайте на диск. Количество страниц. Это страницы Input/secиPages Выход/сек и. Этот счетчик середина включает в себя Поток страниц представляет собой системный кеш, используемый для доступа к данным файла приложения. В это значение также входит Количество страниц, хранящихся в файлах отображенной памяти, не являющихся кэшем, или полученных из них. Если вас беспокоит чрезмерная нагрузка на память (т. системный сбой) и возможный чрезмерный пейджинг, это основной счетчик, на который следует обратить внимание. | ||
System | Total Interrupts/sec | Скорость, с которой компьютер получает и обрабатывает аппаратные прерывания. К устройствам, которые могут генерировать прерывания, относятся системные часы, мышь стандарты, линии передачи данных, сетевые карты и другое периферийное оборудование. Это количество указывает на эти Насколько занято устройство на вашем компьютере | ||
Objects | Threads | Количество потоков, которые компьютер использует при сборе данных. Обратите внимание, что это мгновенный подсчет, а не среднее значение во времени. Поток — это базовый исполняемый объект, способный выполнять инструкции процессора. | ||
Process | Private Bytes | Текущее количество байтов, выделенных исключительно этому процессу и не может быть передано другим процессам. |
Мониторинг Tomcat с помощью lr_user_data_point, который входит в состав LoadRunner.
1. Настройте пользователя для входа в Tomcat, найдите /conf/tomcat-users.xml в каталоге установки tomcat и добавьте следующую конфигурацию:
<tomcat-users>
<role rolename="manager-gui"/>
<user имя пользователя="имя пользователя" пароль="пароль" roles="manager-gui"/>
</tomcat-users>
(После настройки имени пользователя Tomcat рекомендуется проверить, может ли настроенный пользователь войти на страницу управления Tomcat)
2. В скрипте действий середина используйтеweb_set_user("username","пароль",«IP-адрес, на котором расположен tomcatсервер: порт»);
3、 Скрипт середина, пишущий web_url(); Имитировать доступ к URL-адресу Tomcat и войдите в систему
4. Используйте связанную функцию web_reg_save_parm() для динамического сбора нужных данных.
5. Наконец, используйте функцию точки lr_user_data_point («имя индикатора мониторинга», «значение индикатора мониторинга»);
Код сценария VuGen выглядит следующим образом:
lr_start_transaction("");
lr_end_transaction();
web_reg_save_param("JVMFreeMemory",
"LB=Free memory: ",
"RB= MB",
"Ord=1",
LAST);
web_reg_save_param("JVMTotalMemory",
"LB=Total memory: ",
"RB= MB",
"Ord=1",
LAST);
web_reg_save_param("JVMMaxMemory",
"LB=Max memory: ",
"RB= MB",
"Ord=1",
LAST);
web_url("status",
"URL=http://{ServerName}/manager/status",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
lr_user_data_point("Tomcat JVM Free memory", atof(lr_eval_string("{JVMFreeMemory}")));
lr_user_data_point("Tomcat JVM Total memory", atof(lr_eval_string("{JVMTotalMemory}")));
lr_user_data_point("Tomcat JVM Max memory", atof(lr_eval_string("{JVMMaxMemory}")));
(PS: Следует отметить, что,У нас есть два типа метода для использования lr_user_data_point.,1: Поместите пользовательское время и наш бизнес-запрос в Actionseедина. 2: Поместите пользовательское время только в Actionseедина;,И ставьте это действие после действия обработки бизнеса)
Мониторинг Nginx с помощью ngxtop
ngxtop По умолчанию файл конфигурации будет (/etc/nginx/nginx.conf) середина Находить Nginx Адрес журнала. Итак, мониторим Nginx , просто выполните следующую команду:
1 | $ ngxtop |
---|
Это будет список 10 сервисов Nginx, отсортированных по количеству запросов.
Показать топ-20 самых частых запросов:
1 | $ ngxtop -n 20 |
---|
Получите основную информацию о Nginx:
1 | $ ngxtop info |
---|
Вы можете настроить количество отображаемых переменных и просто перечислить переменные, количество которых вы хотите отображать. сипользовать «печать» Команда отображает пользовательские запросы.
1 | $ ngxtop print request http_user_agent remote_addr |
---|
Отображение IP-адреса клиента с наибольшим количеством запросов
1 | $ ngxtop top remote_addr |
---|
Отображение запросов с кодом состояния 404
1 | $ ngxtop -i 'status == 404' print request status |
---|
Помимо Nginx, ngtop Другие файлы журналов также могут быть обработаны, например Apache доступ к файлу. Используйте следующую команду для мониторинга Apache сервер
1 | $ tail -f /var/log/apache2/access.log | ngxtop -f common |
---|
Лично рекомендую Zabbix
Zabbix — это решение корпоративного уровня с открытым исходным кодом на основе WEB-интерфейса, которое обеспечивает функции мониторинга распределенной системы и мониторинга сети. Он может отслеживать различные параметры сети, чтобы обеспечить безопасную работу системы, и предоставляет гибкий механизм уведомлений, позволяющий системным администраторам быстро находить/решать различные существующие проблемы;
Zabbix состоит из двух частей: сервера zabbix и дополнительного компонента zabbix-агента.
zabbix Сервер может передавать SNMP, zabbix agent,ping,Мониторинг Метод портов et обеспечивает надежный удаленный мониторинг состояния сервера/сети, сбор данных и другие функции. Он может работать в Linux, Solaris, HP-UX, AIX, Free. BSD,Open BSD,OS на X и других платформах.
Основные функции Zabbix:
- загрузка процессора
- Использование памяти
-использование диска
- Статус сети
- Мониторинг портов
- Мониторинг журналов.
Я не буду вдаваться в подробности использования Zabbix. Любой, кто им пользуется, знает~~.
ЯсуществоватьучаствоватьСпециальный тренировочный лагерь Tencent Technology Creation 2023, Второй выпуск Конкурс эссе, получивший приз, чтобы разделить призовой фонд в 10 000 юаней и часы с клавиатурой