Розроблення нагрузочних тестів для сайтів (JMeter)
Apache JMeter — зрілий інструмент нагрузочного тестування на Java. Підтримує HTTP, HTTPS, WebSocket, JDBC, LDAP, FTP. Багатий GUI для побудови тест-планів, плагіни для розширення функціональності, широко використовується в enterprise.
Архітектура тест-плану
Test Plan
├── Thread Group (група користувачів)
│ ├── HTTP Request Defaults (загальні настройки)
│ ├── HTTP Cookie Manager
│ ├── HTTP Header Manager
│ ├── Login Sampler (POST /api/auth/login)
│ ├── Think Time (таймер очікування)
│ ├── Products Sampler (GET /api/products)
│ └── Assertions
├── Results Tree Listener
├── Aggregate Report Listener
└── Response Time Graph
Створення тест-плану через JMX (XML)
<!-- test-plan.jmx -->
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0">
<hashTree>
<TestPlan testname="E-commerce Load Test">
<hashTree>
<ThreadGroup testname="User Flow" enabled="true">
<stringProp name="ThreadGroup.num_threads">100</stringProp>
<stringProp name="ThreadGroup.ramp_time">60</stringProp>
<stringProp name="ThreadGroup.duration">300</stringProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<hashTree>
<HTTPSamplerProxy testname="Login">
<stringProp name="HTTPSampler.domain">${BASE_URL}</stringProp>
<stringProp name="HTTPSampler.path">/api/auth/login</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<!-- ... -->
</HTTPSamplerProxy>
</hashTree>
</ThreadGroup>
</hashTree>
</TestPlan>
</hashTree>
</jmeterTestPlan>
Запуск через командну строку (без GUI)
# Базовий запуск
jmeter -n -t test-plan.jmx \
-l results.jtl \
-e -o html-report/ \
-JBASE_URL=https://staging.example.com \
-JN_USERS=100 \
-JRAMP_UP=60
# З плагінами з командної строки
jmeter -n -t test-plan.jmx \
-Jjmeterengine.force.system.exit=true \
-l results.jtl \
-JBASE_URL=https://staging.example.com
Змінні та параметризація
# users.csv — дані тестових користувачів
email,password
[email protected],pass123
[email protected],pass456
[email protected],pass789
У JMeter: Add → Config Element → CSV Data Set Config:
- Filename:
${__P(data_dir)}/users.csv - Variable Names:
email,password - Sharing Mode: All threads
Assertions
Response Assertion:
- Response Code: equals 200
- Response Body: contains "access_token"
Duration Assertion:
- Duration in milliseconds: <= 1000
JSON Path Assertion:
- JSON Path: $.data[0].id
- Expected Value: (не пусто)
Beanshell/Groovy Post-processor
// Groovy JSR223 PostProcessor — витягнути JWT з відповіді
import groovy.json.JsonSlurper
def response = prev.getResponseDataAsString()
def json = new JsonSlurper().parseText(response)
vars.put("auth_token", json.access_token)
vars.put("user_id", json.user.id.toString())
Розподілене тестування
# Конфігурація master-slave
# remote_hosts у jmeter.properties
remote_hosts=192.168.1.11,192.168.1.12,192.168.1.13
# Запуск на всіх вузлах
jmeter -n -t test-plan.jmx -r -l results.jtl
Інтеграція з Grafana через InfluxDB
# jmeter.properties
backend_listener_client=kg.apc.jmeter.reporters.influxdb2.InfluxDbBackendListenerClient
# Backend Listener Config
influxDBHost: localhost
influxDBPort: 8086
influxDBToken: your-token
influxDBOrganization: myorg
influxDBBucket: jmeter
Строк реалізації
Розроблення тест-плану JMeter з 5–7 сценаріями нагрузки: 3–6 днів.







