Небольшая проверка ваших навыков — полный пример поможет вам изучить тестирование производительности LR (Часть A).
Небольшая проверка ваших навыков — полный пример поможет вам изучить тестирование производительности LR (Часть A).

Путь чрезвычайно прост, его легко понять, но трудно сделать; единство знания и действия ведет к совершенству.

Я хотел бы посвятить эту статью всем студентам, которые идут вперед по пути тестирования~~

1: Теоретические знания по тестированию производительности

(ps: давайте сначала разберемся с теоретическими аспектами тестирования производительности)

1.1: Тестирование производительности и его цель

Определение тестирования производительности:

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

Методы тестирования производительности:

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

Общие цели, для которых мы проводим тестирование производительности, следующие:

а: Оцените производительность системы (в тестовой среде локальной сети или производственной среде оцените уровень обслуживания текущей системы посредством анализа результатов тестирования).

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

c: Проверьте результаты настройки (подтвердите, эффективна ли стратегия оптимизации производительности, сравнив результаты тестов после оптимизации и до оптимизации).

1.2 Типовая разбивка тестирования производительности

1.2.1 Стресс-тест:

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

Стресс-тестирование заключается в постепенном увеличении нагрузки, чтобы определенные ресурсы системы достигли критических точек.

1.2.2 Нагрузочное испытание:

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

1.2.3 Проверка стабильности:

Нагружая систему определенной деловой нагрузкой (например, использование ресурсов ЦП от 70% до 90%), запустите ее на некоторое время, чтобы проверить, стабильна ли система. Поскольку запуск занимает много времени, обычно можно проверить, нет ли в системе утечек памяти и других проблем.

1.2.4: Проверка емкости:

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

1.2.5 Тест конфигурации:

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

1.3 Процесс реализации тестирования производительности

(PS: В процессе реализации тестирования производительности общий рабочий процесс выглядит следующим образом: 1: Анализ требований к тесту производительности-2: Разработка плана тестирования производительности 3: Разработка сценария теста производительности-4: Создание среды тестирования производительности-5: Выполнение теста-:6 : Несколько раундов тестирования для проверки и оптимизации после анализа результатов -7: Написание отчета о тестировании производительности -8: Написание сводного отчета о тесте производительности)

2: Анализ требований к производительности

(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: Полный план тестирования производительности, просто используйте его~ Хе-хе~)

3.1. Цель, объем и задачи тестирования.

3.1.1 Цель испытания

Основная цель этого теста производительности заключается в следующем:

 Протестируйте комплексную производительность завершенной системы и проверьте, соответствуют ли возможности обработки транзакций или системы требованиям к производительности работы системы;  Выявлять узкие места в производительности транзакций и устранять их;  Имитировать единичные отказы с высокой вероятностью возникновения для проверки надежности системы;

3.1.2. Объем функции тестирования.

серийный номер

Название компании

приоритет

Примечание

1

Войдите в систему

середина

2

Добавить тестовый пример

высокий

3

Выполнить вариант использования

высокий

4

Сообщить об ошибке

высокий

5

Устранение ошибок

высокий

6

Закрыть ошибку

высокий

8

Подтвердить ошибку

высокий

9

10

3.1.3. Диапазон индикатора проверки.

/***Четко перечислите определение и объем тестовых показателей, на которые необходимо обратить внимание в этом тесте, а также должны быть перечислены тестовые показатели, на которые не нужно обращать внимание. Следующий контент предназначен только для справки. ***/

Показатели производительности, которые необходимо получить для этого теста производительности, следующие:

Отзывчивость транзакций: то есть время отклика системы под нагрузкой, вызванной одной транзакцией и смешанным сценарием, имитирующим производственные транзакции.  Количество транзакций, обрабатываемых в секунду: то есть количество транзакций, завершенных прикладной системой за единицу времени (TPS). Количество одновременно работающих пользователей, которое может поддерживать система.

Ограничительными показателями для этого теста производительности являются:

 Использование системных ресурсов: при нормальной нагрузке уровень занятости ЦП и памяти сервера приложений и сервера базы данных должен быть менее 80% и 80% соответственно, а уровень занятости пространства хранения базы данных и файловой системы должен быть менее 80%. .  Процент успешных транзакций: Процент успешных транзакций составляет не менее 99,5%.

Показатели, которые не требуют внимания в этом тесте производительности:

Охват бизнес-процессов/путей. Полнота и корректность бизнес-данных.  Прочее содержание, такое как удобство использования и управляемость системы, является специальными тестами.

3.1.4. Цели тестирования.

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

 Среднее время ответа одной бизнес-операции для разных типов транзакций  Значение TPS для одной бизнес-транзакции для разных типов транзакций  Среднее время отклика одной бизнес-транзакции под нагрузкой  Значение TPS для одной бизнес-транзакции под нагрузкой  Комплексное значение TPS системы под нагрузкой

3.2 Тестовые ресурсы

3.2.1. Физическая архитектура производственной среды системы.

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

3.2.2. Физическая архитектура среды тестирования производительности.

///*Опишите физическую архитектуру среды тестирования производительности этого проекта, которая может быть представлена ​​в виде диаграммы физической архитектуры. *///

Вы можете использовать Visio для рисования схем топологии сети тестовой и производственной среды.

Схема топологии сети тестовой среды (один веб-сервер + один сервер базы данных) очень проста и здесь опущена.

3.2.3. Сравнение ресурсов среды тестирования производительности и производственной среды.

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

сервер

Среда тестирования производительности (планирование)

Производственная среда (планирование)

Конфигурация оборудования

Конфигурация программного обеспечения и 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

--

--

3.3. Подготовка к тесту.

3.3.1. Установка тестовой среды.

/*Опишите ситуацию установки тестовой среды для этого теста. */

Интегрированная среда 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)

3.3.2. Инструменты тестирования.

/*Опишите инструменты тестирования и мониторинга, использованные в этом тесте. */

Браузер: IE11, Chrome43.

Захват протокола: HttpWatch9.3

Сценарий производительности: LoadRunner 11

Инструменты мониторинга: Monyog MySQL и контроллер LoadRunner11.

Создание диаграммы тестовых данных: ECharts

3.3. Тестовые сценарии, данные и предварительная проверка.

/**Описывает тестовый сценарий, тестовые данные и соотношение транзакций смешанных сценариев для этого теста. **/

3.3.1: Основные данные испытаний

пользователь системы:Пользователи, которые разрабатывают роли40индивидуальный Роль тестируют 20 пользователей.

Проекты: 3 проекта (Хранение, Обучение, Клинический)

3.3.2: Скрипт и его проверка
Script1: Скрипт входа в систему Zentao (zentao)

HttpWatch фиксирует запрос на вход в ZenTao:

Авторизоваться Содержимое, возвращаемое запросомсередина Нет символа, указывающего, успешен ли вход в систему или нет.

Итак: Вставить контрольную точку проверьте, включает ли контент, возвращаемый серединой по запросу Авторизоваться от сервера, строку /zentao/index.

Авторизоваться ZenTao транзакция середина Параметр UserName принимает значение имени пользователя test + development.

Язык кода:javascript
копировать
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;
}

Сценарий 2: добавьте вариант использования

успех Добавить тестовый примерчас Вернусь к Добавить с сервера вариант Определение того, является ли использование успешным

Вставьте контрольную точку, чтобы вручную определить, является ли добавленная транзакция варианта использования успешной.

Язык кода:javascript
копировать
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;
}

Сценарий 3: выполнение варианта использования

HttpWatchползти Выполнить вариант использованияпросить:

Запрос на Выполнить вариант использования не возвращает сведения об успешной транзакции со стороны сервера.

так Вставить контрольную точка Проверить, следует ли возвращать selfClose для определения вручную. вариант использование Успех или провал дел

Каждый тестовый пример может быть выполнен несколько раз без проблем с разрешениями.

Язык кода:javascript
копировать
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;
}

Script4: Сообщить об ошибке
Язык кода:javascript
копировать
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;
}

Script5: исправление ошибки
Язык кода:javascript
копировать
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;
}

Script6: закрыть ошибку
Язык кода:javascript
копировать
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;
}

Script7: ошибка подтверждена
Язык кода:javascript
копировать
//Начать транзакцию
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&nbsp;", 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);

4. Методы испытаний и конструкция корпуса.

Объясните метод тестирования (содержание), тестовые примеры и разработку сценария тестирования для этого теста. Следующие разделы предназначены для справки.

Вход в системуДизайн сцены следующий:

сцена 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 человек

4.1. Сравнительное тестирование.

После подтверждения тестовой среды и предварительной проверки сценария тестируются все онлайн-транзакции, участвующие в этом тесте. Целью является проверка тестового сценария и фоновой среды, а также первоначально проверка наличия дефектов производительности в самой транзакции.

тестметод:

использовать инструменты LoadRunner для тестирования. Отправьте запрос транзакции на сервер 192.168.10.188.,Получите и проанализируйте полученные результаты. Для выполнения планируется использовать нагрузку 10Vuser.,Возьмите среднее время ответа транзакции как показатель количества.,И посчитаем пропускную способность

4.2. Нагрузочное тестирование одного сценария.

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

тестметод:

использовать инструменты тестирования LoadRunner отправляет запрос транзакции на 206сервер, получает и анализирует возвращенные результаты.

4.3: Тест стабильности

Многосценарная система стресс-тестирования 24/7

5. Тестовый вывод

/*Описать поэтапные результаты, которые необходимо вывести после завершения теста, в качестве эталона для контрольного испытания.

После завершения теста основные документы, которые необходимо предоставить, включают, помимо прочего:

 «План тестирования производительности версии ZenTao с открытым исходным кодом v8.0.1»  «ZenTao с открытым исходным кодом версии v8.0.1. Запись теста производительности и форма отслеживания проблем»  «Отчет о тестировании производительности версии ZenTao с открытым исходным кодом v8.0.1»

6. План хода тестирования

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

серийный номер

имя

Ответственное лицо

Период строительства

время начала

время завершения

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

7. Внедрить меры по предотвращению рисков и их предотвращению.

/*Управление рисками заключается в оценке различных возможных рисков, которые могут повлиять на тестирование проекта, оценке вероятности и серьезности рисков, а также ранжировании рисков в соответствии с результатами оценки*/

Описание риска

вероятность возникновения риска

Риски Верно Цель Воздействие

Ответственное лицо

избегатьметод

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

середина

Низкий

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

Количество тестовых данных База данных середина Количество встроенных данных меньше,Время выполнения транзакций пакетной обработки, рассчитанное по времени тестирования, соответствует требованиям,Данные в производственной среде не могут быть удовлетворены.

середина

высокий

Масштабируйте пропорционально, чтобы уменьшить объем данных системы.

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

высокий

середина

Зарезервируйте время для обслуживания тестовой среды и время от времени создайте резервную копию тестовой среды и данных.

Четвертое: Подробное объяснение разработки сценария.

(PS: Независимо от того, записываете ли вы скрипты или разрабатываете их вручную, важно понимать систему сообщений протокола. Давайте сначала познакомимся с системой сообщений протокола http)

4.1 Система протокольных сообщений

Существует множество инструментов для захвата пакетов, к наиболее тяжелым из них относятся Wireshark, затем Fiddler, charles и Omnipeek. Конечно, можно использовать и легкие плагины. Например, firebug и httpwatch одновременно легкие, простые в использовании и необходимы. инструменты для захвата пакетов.

4.1.1 Система сообщений протокола http
4.1.1.2 Формат запроса протокола http

Теперь давайте посмотрим на то, что находится в сообщении запроса сверху вниз.

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.

Язык кода:javascript
копировать
Accept: text/html, application/xhtml+xml, */*

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

(PS: Accept: */* Указывает, что браузер может обрабатывать все возвращаемые типы мультимедиа;  Accept: text/html Тип обратной передачи, который может принять браузер: text/html ; Если сервер не может вернуть данные типа text/html, сервер должен вернуть ошибку 406 (не acceptable) )

Язык кода:javascript
копировать
Referer: http://ws.webxml.com.cn/WebServices/TrainTimeWebService.asmx?op=getStationAndTimeByStationName

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

(PS:

Когда мы захватываем пакет, мы можем видеть заголовок каждого запроса.,В основном все имеют значения Referer.,Значением является URL-адрес текущей страницы.

То, что делает браузер, довольно просто. Если ссылка нажата на странице А,Затем перейдите на страницу Б.,Браузер вставит заголовок Referer со страницей A в запрос середина. URL-адрес середины, введенный сам по себе, не будет защищать заголовок Referer).

Язык кода:javascript
копировать
Accept-Language: zh-CN

Укажите, какие языки принимает или предпочитает клиент (например, естественный язык, используемый в контенте)

Язык кода:javascript
копировать
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

Информация о клиентском приложении (ядро браузера, информация о ядре операционной системы и т. д.)

Язык кода:javascript
копировать
Content-Type: application/x-www-form-urlencoded

Укажите тип носителя (MIME) сообщения запроса серединавернослон.

(PS: Наши распространенные типы носителей следующие:

1. текст: используется для стандартизированного представления текстовой информации. Текстовые сообщения могут быть в нескольких наборах символов и/или в нескольких форматах; по умолчанию используется текстовый/обычный формат;

2. multipart: используется для соединения нескольких частей тела сообщения для формирования сообщения. Эти части могут представлять собой данные разных типов, по умолчанию — multipart/mix;

3. приложение: используется для передачи данных приложения или двоичных данных; по умолчанию используется приложение/октет-поток;

4. сообщение: используется для упаковки сообщения электронной почты;

5. изображение: используется для передачи данных статического изображения;

6. аудио: используется для передачи звука или звуковых данных;

7. видео: используется для передачи данных динамического изображения, которые могут представлять собой формат видеоданных, отредактированный вместе со звуком. )

Язык кода:javascript
копировать
Accept-Encoding: gzip, deflate

Указывает кодировку, принятую клиентом. Обычно указанный метод сжатия,Поддерживать ли сжатие,Какой метод сжатия поддерживается (gzip,deflate,compress;q=0.5 Это не относится к кодировке символов) 

Язык кода:javascript
копировать
Connection: Keep-Alive

Объявить механизм соединения с сервером,Такие как сохранение жизни и т. д.

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

Язык кода:javascript
копировать
Content-Length: 30

Запрошенная длина сообщения объекта

Язык кода:javascript
копировать
DNT: 1

Указывает, включать ли функцию DNT (Не отслеживать), 1 означает включение, 0 означает выключение.

Язык кода:javascript
копировать
Host: www.webxml.com.cn

Объявите информацию хоста, необходимую для запроса URI.

Язык кода:javascript
копировать
Pragma: no-cache

Поле заголовка Pragma используется для хранения инструкций, специфичных для реализации.,Наиболее часто используется Pragma:no-cache. В протоколе HTTP/1.1 середина,Его значение такое же, как и у Cache-Control:no-cache.

Язык кода:javascript
копировать
theCityName=%E6%9D%AD%E5%B7%9E

(PS: Это часть тела запроса. Я также расшифровал строку после знака =, и это Ханчжоу)

Краткое изложение заголовков запросов протокола http:

Обычно используемые стандартные заголовки запросов включают следующее:

  1. Accept, объявляет, какой ответ является приемлемым, например text\plain, application\json и т. д.
  2. Cache-Control объявляет механизм управления кэшем, например no-cache, объявляет отсутствие кэширования.
  3. Connection,Объявить механизм соединения с сервером,Такие как сохранение жизни и т. д.。
  4. Cookie, объявить информацию о файлах cookie.
  5. Content-Type объявляет MIME-тип тела запроса.
  6. Host,Объявите информацию хоста, необходимую для запроса URI.
  7. If-Match,Объявите ключ, соответствующий этому запросу,Если ETag сервера соответствует этому ключу,Считается, что запрошенный ресурс не изменился.,Клиент также может загрузить этот запрос из середина.
  8. Origin объявляет, какие доменные имена поддерживаются для доступа при выполнении междоменных запросов.
  9. User-Agent,Объявляет личность клиента, делающего этот запрос.,Если запрос сделан браузером,Вы можете использовать этот заголовок, чтобы определить, какой это браузер и его версия.

Нестандартные заголовки запроса включают следующее:

  1. X-Request-With обычно сообщает серверу через этот заголовок, что запрос отправлен XMLHttpRequest.
  2. DNT,Указывает, включать ли функцию DNT (Не отслеживать), 1 означает включение, 0 означает выключение.
  3. Front-End-Https — это пользовательский заголовок, используемый Microsoft и связанный с балансировкой нагрузки.
  4. Proxy-Connection, соответствующий стандартному заголовку Connection, является продуктом раннего протокола HTTP.
4.1.1.2 Формат ответа протокола http

Информация заголовка ответного сообщения

Язык кода:javascript
копировать
HTTP/1.1 200 OK

версия http-протокола,Код состояния ответа, возвращенный сервером,

Язык кода:javascript
копировать
Date: Thu, 18 Aug 2016 06:37:22 GMT

Дата и время создания сообщения.

Язык кода:javascript
копировать
Server: Microsoft-IIS/6.0

Информация о веб-сервере

Язык кода:javascript
копировать
X-Powered-By: ASP.NET

Объявите язык, на котором был сгенерирован этот ответ

Язык кода:javascript
копировать
X-AspNet-Version: 2.0.50727

Язык кода:javascript
копировать
Cache-Control: private, max-age=0

Указывает механизм кэширования, которому следует ответ.

PS: Cache-Control в основном имеет следующие типы:

Язык кода:javascript
копировать
(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

Язык кода:javascript
копировать
Content-Type: text/xml; charset=utf-8

Тип носителя ответного сообщения.

Content-Length: 7325

Длина тела ответного сообщения сервера — степень.

Сводная информация о заголовках ответов наиболее часто используемых протоколов http:

Язык кода:javascript
копировать
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: Статус, код состояния ответа.

Нестандартные заголовки ответов включают следующее:

Язык кода:javascript
копировать
X-Frame-Options,Объявите параметры для предотвращения атак кликджекинга,Например, Deny предотвращает отображение ответа в iframe.,Sameorigin предназначен для предотвращения отображения ответа на страницах, отличных от этого домена.
Параметры X-Content-Type помогает IE избегать сценариев таблиц стилей, которые не распознают неверные типы MIME, а также используется Chrome для загрузки своих расширений.
X-Powered-By,Объявите язык, на котором был сгенерирован этот ответ。

4.1.1.3 Определенные коды состояния и их значения

Код состояния:

Причинная фраза:

значение:

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)

4.2 Запишите сгенерированный скрипт

4.2.1 Запись сценария приложения ПК

1. Настройте сетевой прокси-сервер браузера (в качестве примера возьмем Chrome51).

«Настройки» «Сеть» «Изменить настройки прокси»

Адрес прокси-сервера установлен на 127.0.0.1, а порт должен быть незанятым (здесь 9999).

2. Настройте LoadRunner Record OptionsсерединаизPort Mapping

Язык кода:javascript
копировать
“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, а затем снова записать.

4.2.2 Сценарий приложения мобильного приложения для захвата пакетов

1. Поделитесь Wi-Fi на своем ноутбуке (здесь я использую гаджет для совместного использования Wi-Fi от Cheetah).

2. Настройте мобильный Wi-Fi-прокси.

3. Включите Fiddler для захвата пакетов (на следующем рисунке в качестве примера используется Didi Chuxing)

(PS: Изучите волшебный инструмент Fiddler~)

4.3 Полностью ручная разработка скриптов

4.3.1 Разработка сценария C-Vuser

(ps: Поняв структуру предыдущего http-сообщения, воспользуемся победой. Давайте посмотрим, как вручную разрабатывать сценарии производительности на основе содержимого перехваченного пакета)

4.3.1.1 Функции, работающие с заголовками сообщений

Добавьте информацию заголовка для следующего запроса:

Язык кода:javascript
копировать
web_add_header(“Accept-Language”,” zh-CN”)

Добавьте информацию заголовка ко всем последующим запросам:

Язык кода:javascript
копировать
web_add_auto_header("Accept–Encoding", "gzip");

Я также могу определить, какую информацию заголовка запроса необходимо сохранить через настройки при записи скрипта:

Record Options---Advanced---Headers

кроме того:web_cleanup_auto_headers()перестань оглядываться назад HTTP Попросите середину добавить пользовательские заголовки.

web_revert_auto_header

перестань оглядываться назад HTTP Запрос середина добавляет определенные заголовки, но генерирует неявные заголовки.

4.3.1.2 Функция фильтрации указанных URL-запросов
Язык кода:javascript
копировать
web_add_filter(”action=Include/Exclude”,” Attribute=xxx”,LAST)

Устанавливает URL-адреса для включения или исключения в следующем запросе середина

Язык кода:javascript
копировать
web_add_auto_filter(”action=Include/Exclude”,” Attribute=xxx”,LAST)

Установите включенные или исключенные URL-адреса для всех последующих запросов.

4.3.1.2 Функции управления файлами cookie
Язык кода:javascript
копировать
web_add_cookie("lang=zh-cn;theme=default;windowWidth=1584;windowHeight=353; sid=0lab6lvctq0hh2flm48qq520h2");

Добавьте новый файл cookie или измените существующий файл cookie.

Язык кода:javascript
копировать
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

Язык кода:javascript
копировать
web_cleanup_cookies()

Очистить все файлы cookie, сохраненные текущим пользователем.

4.3.1.4 Функция имитации отправки сообщения

Формат функции Web_url:

Язык кода:javascript
копировать
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, поэтому форматы скриптов также различаются:

Язык кода:javascript
копировать
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 выглядит следующим образом:

Язык кода:javascript
копировать
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);

Язык кода:javascript
копировать
2:multipart/form-data

Это еще один распространенный POST Как подаются данные. Когда мы используем форму для загрузки файлов, мы должны разрешить <form> форма enctyped равный multipart/form-data。

Язык кода:javascript
копировать
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

Язык кода:javascript
копировать
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.

4.3.1.5 Функции, связанные с транзакциями
Язык кода:javascript
копировать
lr_start_transaction("Имя транзакции")

Начальный идентификатор транзакции

Язык кода:javascript
копировать
lr_end_transaction("Имя транзакции",статус транзакции)

идентификатор завершения транзакции

(PS: Обратите внимание: не используйте LR_AUTO, который поставляется с LR для всех транзакций, чтобы определить, успешна транзакция или нет.,

Почему?

потому что LR_AUTO только определяет, является ли формат запроса, отправленного на сервер, правильным. Вместо того, чтобы судить о нашем бизнесе, LR недостаточно умен, чтобы четко понимать бизнес-логику каждого пользователя).

4.3.1.6 Другие часто используемые функции

Контрольная точка: web_reg_find

Язык кода:javascript
копировать
web_reg_find("Text=Welcome", "SaveCount=Welcome_Count", LAST );

Зарегистрируйте запрос (ассоциацию), сохраняющий динамические данные в качестве параметров:

Язык кода:javascript
копировать
web_reg_save_param("outFlightVal", "LB=outboundFlight value=", "RB= checked >", LAST );

Зарегистрируйте запрос, использующий в качестве параметров граничные значения динамических данных (эта функция является обновлением web_reg_save_param):

Язык кода:javascript
копировать
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)

4.3.1.7 Важность бизнес-логики

Позвольте мне рассказать вам небольшую историю, с которой я столкнулся в процессе разработки скриптов~~

Конфигурация тестовой среды:

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~~~! Сделанный!

Я также надеюсь, что все студенты Тестирования производительность Процесс разработки скриптасередина Сделайте понимание бизнеса главным приоритетом!

4.4:бегатьчаснастраивать&отлаживать

4.4.1: Правила Run-Logic

В блоке Run середина можно указать количество итераций всей логики Run. Установленное здесь количество итераций не вступит в силу при истинноInitialиEnd.

Блоксередина может содержать несколько действий, и можно установить вероятность выполнения действия. Блоксередина может содержать Block.

4.4.2: Настройки кардиостимуляции

Темп: вы можете установить временной интервал между итерациями.

4.4.3: Журнал вывода

(PS: вы можете установить флажок «Включить ведение журнала при отладке». Если вам нужно просмотреть информацию, возвращаемую сервером, мы можем выбрать «Расширенный журнал». Наиболее часто используемый сценарий — проверка подстановки параметров)

Не забудьте отключить ведение журнала при выполнении теста, иначе жесткий диск будет заполнен файлами журналов.

4.4.4: Время подумать

(PS: Время обдумывания используется для имитации времени ожидания фактического процесса работы; если вы просто хотите оценить, насколько сервер может выдержать параллелизм в определенной конфигурации среды, вы можете игнорировать время обдумывания; также: время обдумывания не должно быть помещено в сделку)

4.4.5: Эмуляция браузера. Имитация браузера.

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 ПараметрыВо время каждой итерациисерединаочистить браузерсередина Кэширование для достижения первого моделированияиндивидуальный Когда реальный пользователь впервые посещает веб-страницу,Снимите флажок, чтобы отключить этот параметр.,Разрешить виртуальным пользователям использовать кэш для хранения информации о пользователях,Для имитации пользователя, посетившего веб-страницу.

4.4.6: Фильтрация запросов на загрузку из внешних сетей

(PS:существоватьбегатьчаснастраиватьсередина Переключиться на загрузку На странице «Фильтры» выберите «Исключить». address in список, добавьте URL-адрес внешней сети, чтобы избежать загрузки внешних сетевых ресурсов)

Запустите скрипт еще раз после установки лога в середине сообщения, результаты следующие:

4.4.7: Параметризация и правила ее определения

Комбинация правил 1Sequential + Each iteration + Continue with last value

Select Next Value

Update Value On

When Out Of Values

Sequential

Each iteration

Continue with last value

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

Комбинация правил 2Sequential + Each occurence+ Continue with last value

Select Next Value

Update Value On

When Out Of Values

Sequential

Each occurence

Continue with last value

Результат значения: В одной итерации середина новое значение параметра будет приниматься по порядку каждый раз, когда параметр появляется в разных итерациях середина, новые значения будут приниматься по порядку, при недостаточном количестве параметров список параметров будет зацикливаться; принимать значения по порядку.

Комбинация правил 3Sequential + Once + Continue with last value

Select Next Value

Update Value On

When Out Of Values

Sequential

Once

Continue with last value

Результат значения: независимо от количества итераций и количества виртуальных пользователей, работающих одновременно, будет взято только одно значение.

Комбинация правил 4Random + Each iteration + Continue with last value

Select Next Value

Update Value On

When Out Of Values

Random

Each iteration

Continue with last value

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

Комбинация правил 5Random + Each occurence + Continue with last value

Select Next Value

Update Value On

When Out Of Values

Random

Each occurence

Continue with last value

Результат значения: значение будет получаться случайным образом каждый раз, когда параметр появляется в Actionsсередина.

Комбинация правил 6Random + Once+ Continue with last value

Select Next Value

Update Value On

When Out Of Values

Random

Once

Continue with last value

Результат значения: только одно значение будет случайно выбрано в Actionsсередина.

Комбинация правил 7Unique + 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

Результат значения: каждая итерация будет принимать уникальное значение параметра. Если параметров недостаточно, список параметров будет зациклен;

Комбинация правил 9Unique + Each iteration + abort Vuser

Select Next Value

Update Value On

When Out Of Values

Unique

Each iteration

abort Vuser

Результат значения: каждая итерация будет принимать уникальное значение параметра; если параметров недостаточно, выполнение Vuser будет остановлено.

Комбинация правил 10Unique + Each occurence + Continue with last value

Select Next Value

Update Value On

When Out Of Values

Unique

Each occurence

Continue with last value

Результат значения: каждый раз при появлении параметра будет приниматься уникальное значение параметра. При недостаточном количестве параметров в журнале середина будет сообщено об ошибке.

Комбинация правил 11Unique + 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

Результат значения: каждый раз, когда появляется параметр, будет взято уникальное значение параметра. Если параметров недостаточно, список параметров будет зацикливаться;

Комбинация правил 12Unique + Each occurence + abort Vuser

Select Next Value

Update Value On

When Out Of Values

Unique

Each occurence

abort Vuser

Результат значения: каждый раз, когда появляется параметр, будет взято уникальное значение параметра. Если параметров недостаточно, выполнение Vuser будет остановлено.

Комбинация правил 13Random + Once + Continue with last value

Select Next Value

Update Value On

When Out Of Values

Random

Once

Continue with last value

Результат значения: каждый пользователь Vuser будет принимать только уникальное значение параметра.

Все методы нормализованы: вы можете использовать параметры моделирования для просмотра результатов извлечения параметров.

4.4.8: Сопутствующие сценарии использования

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

Когда использовать ассоциации:

Когда нам нужно использовать динамические данные, возвращаемые со стороны сервера, нам нужна функция регистрации web_reg_save_param, чтобы сохранить данные, возвращаемые со стороны сервера, в параметр середина.

В следующей таблице перечислены свойства, доступные для web_reg_save_param.

Язык кода:javascript
копировать
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
 Находит значение длинной степени подстроки (по указанному смещению количествасередина) и сохраняет его в параметр. Значение по умолчанию: &ntilde;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);

Пятое: выполнение теста

5.1 Создайте среду дзен

Создать среду ZenTao под Windows очень просто. Загрузите сжатый пакет с официального сайта, распакуйте его и запустите.

Вот и все.

(ps: Интегрированная среда ZenTao использует базу данных mysql и интегрирует phpmyadmin для удобного управления базой данных через браузер)

5.2 Настройка сцены LR

5.2.1 Ручная сцена

Разработку сценариев можно выполнить вручную, создав группы и указав сценарии, генераторы нагрузки и количество пользователей Vuser, включенных в каждую группу;

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

Режим выполнения скрипта:

Язык кода:javascript
копировать
Real-world График: Подача давления в соответствии с проектом сцены, что позволяет обеспечить испытания ступенчатым давлением и пиковым давлением.
(PS: В реальном режиме середина, Продолжительность приоритетавысокий во время выполнения параметр)
Basic Расписание: выполнение в соответствии с итеративным методом, разработанным сценарием. Можно выполнять только испытания на пиковое давление.
Schedule by:
Сценарий: При объединении в сцену нескольких сценариев все сценарии выполняются единым образом в соответствии с разработанным режимом работы сцены.
Группа: Когда в сцену объединяются несколько сценариев, метод выполнения каждого сценария разрабатывается индивидуально.

(PS: Наши часто используемые настройки сцены соответствуют нашим потребностям в тестировании производительности следующим образом:

1) эталонтест: 

Используйте виртуального пользователя для итеративного выполнения N раз и примите среднее значение результатов теста в качестве базового эталонного значения. 

2) одна транзакциянагрузка 

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

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

3) Комплексная сценанагрузка 

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

 4) стабильностьтест 

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

)

5.2.2 Целенаправленные сценарии

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

Можно в Целенаправленном сценарийсередина Определите желаемый сценарийизследующее5типиз Цель:Количество виртуальных пользователей, кликов в секунду (только Интернет) Vuser), транзакций в секунду, страниц в минуту (только в Интернете) Vuser) или время ответа транзакции.Можетпроходитьщелкнуть【Edit Scenario Цель...] настройки, такие как тип цели, минимальное количество пользователей, максимальное количество пользователей, время работы и т. д.

(PS: Когда наши требования к тестированию производительности очень ясны, мы можем использовать целевую модель для проверки уровня системных служб; мы также можем проверить, соответствуют ли наши результаты оптимизации требованиям)

5.3 Онлайн-загрузка нескольких компьютеров

(PS: Когда нам нужно смоделировать большое количество пользователей Vuser, для генерации нагрузки необходимо несколько загрузочных машин, чтобы избежать того, чтобы загрузочная машина стала узким местом, тем самым более точно моделируя сценарии параллелизма)

1. Установка, установите loadrunner 11 на компьютер, который необходимо добавить в качестве загрузочной машины.

2 Запустите агент HP loadrunner-advanced Setting-loadrunner agaent и запустите агент LR.

3. Отключите брандмауэр загрузочной машины.

4. Добавьте загрузочную машину,Добавьте загрузочную машину к машине, на которой находится сцена, в качестве пресс-машины для текущей сцены.,Введите IP-адрес, операционную систему и другую информацию о загрузочной машине (операционную систему и временный каталог можно не указывать, будут использоваться значения по умолчанию).,Нажмите еще: появится «Карточка параметров генератора нагрузки».

5. Подключите нагрузочную машину.,Нажмите кнопку подключения, чтобы подключиться к загрузочной машине.,Столбец состояния изменится на «Готово», указывая на то, что загрузочная машина доступна.,Заголовок столбца указывает состояние ресурсов загрузочной машины.,Если он зеленый, значит, есть свободные ресурсы.,Красный означает, что сервер занят.

6. Настройте верное нажатие на ответ скрипта.,В группе можно настроить соответствующую печать для каждого сценария.,Конфигурацияметодкликload Пресс выбора генератора.

5.4 Мониторинг сервера

5.4.1: База данных мониторинга

(PS: Настоятельно рекомендуем серию инструментов Spotlight, которая представляет собой профессиональную базу данных Oracle/MySQL.

Конечно, мы также можем написать собственный скрипт оболочки или Python для мониторинга базы данных).

Давайте посмотрим на общие показатели мониторинга производительности базы данных Oracle:

--Ожидание случаев мониторинга--

Язык кода:javascript
копировать
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;

--Конфликт сегмента отката--

Язык кода:javascript
копировать
select name, waits, gets, waits / gets "Ratio"
from v$rollstat a, v$rollname b
where a.usn = b.usn;

--Отслеживать соотношение ввода-вывода табличного пространства--

Язык кода:javascript
копировать
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;

--Отслеживать соотношение ввода-вывода файловой системы--

Язык кода:javascript
копировать
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#;

--Найти все индексы определенного пользователя--

Язык кода:javascript
копировать
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 изжизньсередина Ставка--

Язык кода:javascript
копировать
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 середина --

Язык кода:javascript
копировать
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%--

Язык кода:javascript
копировать
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%--

Язык кода:javascript
копировать
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--

Язык кода:javascript
копировать
SELECT name, value
FROM v$sysstat
WHERE name IN ('sorts (memory)', 'sorts (disk)');

--монитор Текущая база данных, кто и что запускает SQLЗаявление--

Язык кода:javascript
копировать
SELECT osuser, username, sql_text
from v$session a, v$sqltext b
where a.sql_address = b.address
order by address, piece;

--монитор буфера словаря--

Язык кода:javascript
копировать
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, параметр необходимо увеличить--

Язык кода:javascript
копировать
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, параметр необходимо увеличить.

---Степень фрагментации--

Язык кода:javascript
копировать
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;

--Просмотреть таблицу фрагментов степени Ченг высокая--

Язык кода:javascript
копировать
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);

---Проверьте состояние хранения таблиц и индексов--

Язык кода:javascript
копировать
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;

--Обнаружить события в базе данных середина и подождать--

Язык кода:javascript
копировать
SELECT event, total_waits, total_timeouts,time_waited, average_wait FROM v$system_event

--Запросить события и время ожидания сеанса середина--

Язык кода:javascript
копировать
select sid, event, total_waits,average_wait from v$session_event where sid=10;

--Процесс ожидания запроса--

Язык кода:javascript
копировать
SELECT sid, seq#, event, wait_time, state FROM v$session_wait;

---Текущий оператор sql--

Язык кода:javascript
копировать
select sql_text, users_executing, executions, loads from v$sqlarea;

--Запросить скорость кэширования кэша середина середина--

Язык кода:javascript
копировать
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;

--Просмотр блокировки таблицы--

Язык кода:javascript
копировать
select * from sys.v_$sqlarea where disk_reads>100

--Ожидание случаев мониторинга--

Язык кода:javascript
копировать
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, выданных на стойке регистрации--

Язык кода:javascript
копировать
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'))

--Пространство, занимаемое таблицей данных--

Язык кода:javascript
копировать
select segment_name, tablespace_name, bytes, blocks
from user_segments
where segment_type = 'TABLE'
ORDER BY bytes DESC, blocks DESC

--Просмотр размера фрагмента табличного пространства--

Язык кода:javascript
копировать
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

--Проверьте использование дискового табличного пространства--

Язык кода:javascript
копировать
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

--Просмотр использования сеанса сегмента отката--

Язык кода:javascript
копировать
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--

Язык кода:javascript
копировать
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 середина--

Язык кода:javascript
копировать
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--

Язык кода:javascript
копировать
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 раз--

Язык кода:javascript
копировать
select * from sys.v_$sqlarea where disk_reads>100

---Наиболее часто выполняемый sql--

Язык кода:javascript
копировать
select * from sys.v_$sqlarea where executions>100

---Запрашивать пользовательские сеансы, которые используют больше процессора--

Язык кода:javascript
копировать
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

5.4.2: Мониторинг ОС

В 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

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

5.4.3: Промежуточное программное обеспечение для мониторинга
5.4.3.1: Монитор кота

Мониторинг Tomcat с помощью lr_user_data_point, который входит в состав LoadRunner.

1. Настройте пользователя для входа в Tomcat, найдите /conf/tomcat-users.xml в каталоге установки tomcat и добавьте следующую конфигурацию:

Язык кода:javascript
копировать
<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 выглядит следующим образом:

Язык кода:javascript
копировать
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едина;,И ставьте это действие после действия обработки бизнеса)

5.4.3.2: Мониторинг Nginx

Мониторинг 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

5.4.4 Мониторинг сети

Лично рекомендую 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 юаней и часы с клавиатурой

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose