Практика испытаний на эффективность борьбы с саранчой
Практика испытаний на эффективность борьбы с саранчой
1: Теоретические знания по тестированию производительности
1.1: Тестирование производительности и его цель

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

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

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

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

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

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

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

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

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

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

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

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

1.2.2 Нагрузочное тестирование

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

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

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

1.2.4: Проверка производительности

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

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

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

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

в реализации Тестирование В процессе производительности общий рабочий процесс равен 1: Анализ Тестирование производительностинуждаться->2:дизайн Тестирование производительностиплан->3:развивать Тестирование производительности Скрипт->4:строить Тестирование производительностисреда->5:Выполнение тестов->6:После анализа результатов проведите несколько раундов тестирования для проверки и оптимизации.->7:писать Тестирование производительности Отчет->8:писать Тестирование производительности Подвести итог Отчет

2: Выбор инструментов измерения давления

Наша команда использует два инструмента стресс-тестирования: Jmeter и Locust.

Сегодня я объясню только Locust.

2.1 Что такое саранча?

Адрес официального сайта саранчи: https://www.locust.io/

2.2 Разработка сценария испытаний на саранчу средним давлением
Язык кода:javascript
копировать
# -*- coding = utf-8 -*-
 
 from locust import HttpUser, TaskSet, task, constant, between
 import random
 import re
 import json
 import hashlib
 from assertpy import assert_that
 import time
 from faker import Faker
 
 fake = Faker(locale='zh_CN')
 
 # Создать случайную дату в формате гггг-мм-дд.
 random_date = fake.date(pattern="%Y-%m-%d", end_datetime=None)
 # текущие миллисекунды в формате времени unix
 current_mis_time = int(round(time.time() * 1000))
 
 app_header = {'Host': 'pt2dingtalkf.zjk.taeapp.com',
 'Accept': 'application/json, text/plain, */*',
 'Origin': 'https://pt2dingtalkf.zjk.taeapp.com',
 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36',
 'sign': 'd44e27d775d6160b9f3961e1561d1ab58de3b1617263fecb249e7cc88e6af3be',
 'Content-Type': 'application/json;charset=UTF-8',
 'Referer': 'https://pt2dingtalkf.zjk.taeapp.com/pro/index.html?corpid=dinga93c84f4d89688bf35c2f4657eb6378f&appid=2576&dd_nav_bgcolor=ffff943e',
 'Accept-Encoding': 'gzip, deflate',
 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
 'Connection': 'keep-alive'}
 
 
 app_token = '193bfbec50530ff9932f6f8479b14388c95f666782f9b6d1920cf230bf08bb48'
 app_data_save_url = 'https://pt2dingtalkf.zjk.taeapp.com/pro/v1/form/data/add'
 
 
 class UserTasks(TaskSet):
 # Заменить некоторые данные в сообщении запроса
 def process_request_data(self, init_data, expected_to_be_replace, need_replace_to_data):
 page_pattern = re.compile(expected_to_be_replace)
 
 matchers = page_pattern.findall(str(init_data))
 for matcher in matchers:
 init_data = str(init_data).replace(str(matcher), str(need_replace_to_data))
 return init_data
 
 def process_headers(self, init_headers, request_parameters, token):
 parameters = str(str(request_parameters) + str(token)).encode('utf-8')
 sign_code = hashlib.sha256(parameters).hexdigest()
 init_headers['sign'] = sign_code
 return init_headers
 
 # Добавляйте клиентов в фоновом режиме приложения
 def add_save_customer_on_app(self):
 init_param = «Параметры запроса»
 request_param = self.process_request_data(init_param, «Клиент стресс-тестирования», str(fake.address()))
 request_header = self.process_headers(app_header, request_param, app_token)
 add_customer_result = self.client.post(url=app_data_save_url, data=request_param.encode('utf-8'),
 headers=request_header).text
 # Возвращает идентификатор нового клиента
 return json.loads(add_customer_result)['result']['dataId']
 
 
 # Добавить заказ по контракту в фоновом режиме приложения
 @task
 def add_save_order_on_app(self):
 init_param = ''
 request_param = self.process_request_data(init_param, «Приказ о заключении договора на стресс-тестирование», str(fake.address()))
 # Замените идентификатор клиента, связанный при создании нового контракта.
 customer_id = self.add_save_customer_on_app()
 final_param = self.process_request_data(request_param, str(325388), str(customer_id))
 request_header = self.process_headers(app_header, final_param, app_token)
 add_order_result = self.client.post(url=app_data_save_url, data=final_param.encode('utf-8'),
 headers=request_header).text
 
 Assert_that(str(add_order_result)).contains("Операция успешна")
 
 
 class WebsiteUser(HttpUser):
 wait_time = between(1, 3)
 tasks = [UserTasks]

2.3 Использование Locust для моделирования импульсных нагрузок
Язык кода:javascript
копировать
class StagesShape(LoadTestShape):
 stages = [
 {"duration": 60, "users": 1, "spawn_rate": 0.5},
 {"duration": 120, "users": 2, "spawn_rate": 0.5},
 {"duration": 240, "users": 3, "spawn_rate": 0.5},
 {"duration": 300, "users": 0, "spawn_rate": 1},
 ]
 
 def tick(self):
 run_time = self.get_run_time()
 
 for stage in self.stages:
 if run_time < stage["duration"]:
 tick_data = (stage["users"], stage["spawn_rate"])
 return tick_data
 
 return None

2.4 Используйте более эффективный http-клиент
Язык кода:javascript
копировать
from locust.contrib.fasthttp import FastHttpUser
# Добавляйте клиентов в фоновом режиме приложения
 @task
 def add_save_customer_on_app(self):
 init_param = «Параметры запроса»
 request_param = self.process_request_data(init_param, «Клиент стресс-тестирования», str(fake.address()))
 request_header = self.process_headers(app_header, request_param, app_token)
 add_customer_result = self.client.post(path=app_data_save_url, data=request_param.encode('utf-8'),
 headers=request_header).text
 
 Assert_that(str(add_customer_result)).contains("Операция успешна")
class WebsiteUser(FastHttpUser):
 wait_time = between(1, 3)
 tasks = [UserTasks]

2.5 Распределенное параллельное выполнение
Язык кода:javascript
копировать
Locustиз Распределенное параллельное выполнениеиспользоватьmaster-workerмодель:
Запустите процесс главной роли:
locust -f stage_load.py --master --host=https://pt2dingtalkf.zjk.taeapp.com
Запускаем процесс рабочей роли:
locust -f stage_load.py --worker --master-host=127.0.0.1

Третье: завершить экземпляр (обновление архитектуры).
3.1: Предыстория реализации

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

3.2: Стратегия тестирования

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

3.3: Разработка сценария стресс-тестирования

Сборник топ-30 запросов на интерфейсы производственной среды (App+Web)

1: Мобильный терминал

1.1 Детали документа URL-адрес интерфейса:/mobile/form/data/get Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.2 Основная информация о документах URL-адрес интерфейса:/mobile/form/data/basic/detail Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.3 Просмотр статистических результатов в центре диаграммы URL-адрес интерфейса:/chart/result Стресс-тестирование бизнеса: клиенты, контракты, последующие записи.

1.4 Список URL-адрес интерфейса:/mobile/list/customer Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.5 Создать новое сохранение URL-адрес интерфейса:/mobile/form/data/add Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.6 Новая страница /мобильный/форма/данные/добавить/получить Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.7 Список связанных данных URL-адрес интерфейса:/mobile/detail/tab/linkAdd/get Стресс-тестирование бизнеса: связанный список данных в подчиненной форме.

2: Веб-сервер

1.8 Новая страница веб-документа /pro/v1/form/data/get Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.9 Подробности веб-документа URL-адрес интерфейса:/pro/v1/form/data/detail Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.10 Страница веб-списка URL-адрес интерфейса:/pro/v1/list/customer Стресс-тестирование бизнеса: клиенты, контракты, PaaS-формы.

1.11 Веб-статистические показатели URL-адрес интерфейса:/pro/v1/chart/result/value Стресс-тестирование бизнеса: клиенты, запрос графика контрактов.

3.4: Разработка сценария стресс-тестирования

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

4.1 Создайте нового и сохраненного клиента в фоновом режиме в Интернете.

Язык кода:javascript
копировать
# Добавьте клиентов в веб-интерфейс
@task
def add_save_customer_on_web(self):
    init_param = «Параметры запроса»
    request_param = self.process_request_data(init_param, «Клиент стресс-тестирования», str(fake.address()))
    request_header = self.process_headers(web_login_header, request_param, web_token)
    add_customer_result = self.client.post(url=web_data_detail_url, 		   data=request_param.encode('utf-8'),headers=request_header).text

    Assert_that(str(add_customer_result)).contains("Операция успешна")

4.2. Переверните страницу списка контрактов веб-сервера для просмотра.

Язык кода:javascript
копировать
# Список контрактов веб-сервера
@task
def order_list_on_web(self):
    init_param = '{\"corpid\":\"dinga93c84f4d89688bf35c2f4657eb6378f\",\"userId\":\"030917160122954929\",\"platform\":\"web\",\"sortMap\":{},\"formId\":3497,\"saasMark\":1,\"businessType\":201,\"subBusinessType\":201,\"timeFilter\":{},\"listGroupId\":0,\"defaultGroup\":1,\"commonFilter\":{},\"del\":0,\"page\":1,\"pageSize\":20,\"conditions\":[],\"statusFilter\":2,\"appId\":64,\"isSync\":true}'
    # Количество заменяемых страниц
    final_param = self.process_request_data(init_param, '\"page\":1',
                                            str('\"page\":' + str(random.randrange(1, 229))))
    request_header = self.process_headers(web_login_header, final_param, web_token)
    order_list_result = self.client.post(url="https://pt2pcf.zjk.taeapp.com/pro/v1/list/contract", data=final_param.encode('utf-8'),
                                           headers=request_header).text

    Assert_that(str(order_list_result)).contains("Операция успешна")

4.3 Просмотр сведений о данных формы PaaS в фоновом режиме Интернета

Язык кода:javascript
копировать
# Веб-фон для просмотра сведений о данных формы PaaS
@task
def paas_detail_on_web(self):
    init_param = '{\"corpid\":\"dinga93c84f4d89688bf35c2f4657eb6378f\",\"userId\":\"030917160122954929\",\"platform\":\"web\",\"menuId\":\"3503\",\"appId\":110,\"dataId\":5125,\"saasMark\":2,\"businessType\":0,\"subBusinessType\":404}'
    # Заменить идентификатор формы
    final_param = self.process_request_data(init_param, str(5125), str(random.randrange(4066, 5125)))

    request_header = self.process_headers(web_login_header, final_param, web_token)
    add_paas_result = self.client.post(url=web_data_detail_url, data=final_param.encode('utf-8'),
                                           headers=request_header).text

    Assert_that(str(add_paas_result)).contains("Операция успешна")
Четвертое: реализация стресс-тестирования
4.1 Создайте новый и сохраните фоновый веб-клиент

Тест 2. Новое сохранение фонового веб-клиента.

Среда стресс-тестирования: Тест 2 (обновление архитектуры) Стресс-тестирование бизнеса: создание новых и сохранение клиентов веб-сервера Пиковое количество запросов в секунду: 5,6 Пиковая RT: 9,8 секунды Среднее число запросов в секунду: 3,8 Средняя RT: 7,5 секунд Процент неудачных транзакций: 0% Период выполнения теста: 15:05~15:35.

Тест 3. Новое сохранение фонового веб-клиента.

Среда стресс-тестирования: тест 3 (обновление архитектуры) Стресс-тестирование бизнеса: создание новых и сохранение клиентов веб-сервера Пиковое количество запросов в секунду: 11 Пиковая RT: 3,7 секунды Среднее число запросов в секунду: 7,2 Средняя RT: 2,5 секунды Процент неудачных транзакций: 0% Период выполнения теста: 15:45~16:15.

4.2 Создание и сохранение новых контрактных заказов в фоновом режиме через Интернет

Тест 2. Создайте новый и сохраните контрактный заказ в фоновом режиме через Интернет.

Среда стресс-тестирования: Тест 2 (обновление архитектуры) Стресс-тестирование бизнеса: создание и сохранение контрактов веб-сервера Пиковое количество запросов в секунду: 5,6 Пиковая RT: 11 секунд Среднее число запросов в секунду: 3,6 Средняя RT: 7 секунд Процент неудачных транзакций: 0% Период выполнения теста: 17:09~17:39.

Тест 3. Создайте новый и сохраните контрактный заказ в фоновом режиме в Интернете.

Среда стресс-тестирования: тест 3 (обновление архитектуры) Стресс-тестирование бизнеса: создание и сохранение контрактов веб-сервера Пиковое количество запросов в секунду: 6,9 Пиковая RT: 6,3 секунды Среднее количество запросов в секунду: 4,4 Средняя RT: 4,9 секунды Процент неудачных транзакций: 0% Период выполнения теста: 16:33~17:03.

Пятое: Анализ результатов испытаний под давлением
5.1 Создайте новый и сохраните фоновый веб-клиент

Перед обновлением:

Среда стресс-тестирования: Тест 2 (обновление архитектуры) Стресс-тестирование бизнеса: создание новых и сохранение клиентов веб-сервера Пиковое количество запросов в секунду: 5,6 Пиковая RT: 9,8 секунды Среднее число запросов в секунду: 3,8 Средняя RT: 7,5 секунд Процент неудачных транзакций: 0% Период выполнения теста: 15:05~15:35.

После обновления:

Среда стресс-тестирования: тест 3 (обновление архитектуры) Стресс-тестирование бизнеса: создание новых и сохранение клиентов веб-сервера Пиковое количество запросов в секунду: 11 Пиковая RT: 3,7 секунды Среднее число запросов в секунду: 7,2 Средняя RT: 2,5 секунды Процент неудачных транзакций: 0% Период выполнения теста: 15:45~16:15.

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

5.2 Создание и сохранение новых контрактных заказов в фоновом режиме через Интернет

Перед обновлением:

Среда стресс-тестирования: Тест 2 (обновление архитектуры) Стресс-тестирование бизнеса: создание и сохранение контрактов веб-сервера Пиковое количество запросов в секунду: 5,6 Пиковая RT: 11 секунд Среднее число запросов в секунду: 3,6 Средняя RT: 7 секунд Процент неудачных транзакций: 0% Период выполнения теста: 17:09~17:39.

После обновления:

Среда стресс-тестирования: тест 3 (обновление архитектуры) Стресс-тестирование бизнеса: создание и сохранение контрактов веб-сервера Пиковое количество запросов в секунду: 6,9 Пиковая RT: 6,3 секунды Среднее количество запросов в секунду: 4,4 Средняя RT: 4,9 секунды Процент неудачных транзакций: 0% Период выполнения теста: 16:33~17:03.

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

я участвуюНа втором этапе специального тренировочного лагеря Tencent Technology Creation 2023 года будут отмечены призовые эссе, которые разделят призовой фонд в 10 000 юаней и часы с клавиатурой.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.