pbezpal5
(Pavel)
11.Август.2020 13:07:25
#1
Всем привет! Дошли наконец-то до нагрузочных тестов нашего сервера, нагружать хотим Socket.IO . Нашёл два инструмента, наверное самые популярные и распространённые.
Artillery.IO
Gatling
Я не знаком ни с JS, ни со Scala. Есть опыт в Java. Подскажите какой из этих инструментов лучше выбрать? Или может ещё какой вариант предложите. Спасибо.
pbezpal5
(Pavel)
11.Август.2020 15:33:04
#3
Здесь пишут, что JMeter не очень хорошо тестирует сокеты
BabyRoot
(Vasily)
11.Август.2020 15:52:04
#4
А с чего вы взяли, что там на сокетах? Из названия фрейморка?
pbezpal5
(Pavel)
12.Август.2020 07:19:21
#5
Все 3 поддерживают работу с сокетами
pbezpal5
(Pavel)
17.Август.2020 10:08:36
#6
Выбрал artillery.io , написал сценарий:
config:
#target: "wss://testing2.ros.chat:8080/socket.io/?EIO=3&transport=websocket&sid=gOrWuD9oxZpMBrULAADL"
target: "https://testing.ros.chat:8080"
#processor: "./loginonserver.js"
ensure:
p95: 200
maxErrorRate: 1
socketio:
transports: ["websocket"]
phases:
- duration: 1 # Test for 60 seconds
arrivalRate: 1 # Every second, add 10 users
maxVusers: 1
#rampTo: 10 # And ramp it up to 100 users in total over the 60s period
name: "Ramping up the load"
#- duration: 20 # Then resume the load test for 120s
# arrivalRate: 1 # With those 100 users we ramped up to in the first phase
# maxVusers: 1
# rampTo: 1 # And keep it steady at 100 users
# name: "Pushing a constant load"
ws:
# Ignore SSL certificate errors
# - useful in *development* with self-signed certs
rejectUnauthorized: false
payload:
path: "./users0.csv"
fields:
- "login"
- "password"
- "level"
skipHeader: true
order: sequence
scenarios:
- name: "Scenario login user and get user params"
engine: socketio
flow:
- log: "Login users {{ login }} on server"
- emit:
channel: "login"
data: {"login":"{{ login }}","password":"{{ password }}","APILevel":"{{ level }}"}
acknowledge:
match:
json: "$.0.status"
value: "ok"
- emit:
channel: "get-user-params"
data: null
acknowledge:
match:
json: "$.0.httpServer"
value: "testing.ros.chat:80"
- think: 2
- emit:
channel: "logout"
Запускаю тест
sudo artillery run getUserParams.yml --output result.json
В результате получаю всегда ошибку
Started phase 0 (Ramping up the load), duration: 1s @ 12:37:05(+0300) 2020-08-17
Login users 9000 on server
Report @ 12:37:09(+0300) 2020-08-17
Elapsed time: 4 seconds
Scenarios launched: 1
Scenarios completed: 1
Requests completed: 3
Mean response/sec: 0.86
Response time (msec):
min: 0.7
max: 1420.6
median: 2.6
p95: 1420.6
p99: 1420.6
Codes:
0: 3
All virtual users finished
Summary report @ 12:37:09(+0300) 2020-08-17
Scenarios launched: 1
Scenarios completed: 1
Requests completed: 3
Mean response/sec: 0.85
Response time (msec):
min: 0.7
max: 1420.6
median: 2.6
p95: 1420.6
p99: 1420.6
Scenario counts:
Scenario login user and get user params: 1 (100%)
Codes:
0: 3
Log file: result.json
ensure condition failed: ensure.p95 < 200
Ставил разные значение p95 (0,10,100), но результат всегда один и тот же. Подскажите, в чём может быть проблема?
pbezpal5
(Pavel)
17.Август.2020 11:55:05
#7
Разобрался)
ensure:
maxErrorRate: 1
p95: 1450