You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.3 KiB
85 lines
2.3 KiB
|
4 weeks ago
|
#!/usr/bin/env bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
MODE="${MODE:-loadtest}"
|
||
|
|
TARGET="${TARGET:-http://localhost:8080}"
|
||
|
|
USERS="${USERS:-200}"
|
||
|
|
DURATION="${DURATION:-30s}"
|
||
|
|
RAMP_UP="${RAMP_UP:-10s}"
|
||
|
|
TIMEOUT="${TIMEOUT:-5s}"
|
||
|
|
WEBSOCKET_TIMEOUT="${WEBSOCKET_TIMEOUT:-15s}"
|
||
|
|
WEBSOCKET_RATIO="${WEBSOCKET_RATIO:-0.05}"
|
||
|
|
WEBSOCKET_MAX_CONNECTIONS="${WEBSOCKET_MAX_CONNECTIONS:-20}"
|
||
|
|
MONITOR_INTERVAL="${MONITOR_INTERVAL:-1s}"
|
||
|
|
WEBSOCKET_COMMAND="${WEBSOCKET_COMMAND:-Get-Location}"
|
||
|
|
SEARCH_START_USERS="${SEARCH_START_USERS:-100}"
|
||
|
|
SEARCH_STEP_USERS="${SEARCH_STEP_USERS:-100}"
|
||
|
|
SEARCH_MAX_USERS="${SEARCH_MAX_USERS:-2000}"
|
||
|
|
MAX_FAILURE_RATE="${MAX_FAILURE_RATE:-1.0}"
|
||
|
|
MAX_P95="${MAX_P95:-1s}"
|
||
|
|
INSECURE="${INSECURE:-false}"
|
||
|
|
|
||
|
|
SCRIPT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_ROOT="$(cd "${SCRIPT_ROOT}/.." && pwd)"
|
||
|
|
RUNTIME_ROOT="${PROJECT_ROOT}/runtime"
|
||
|
|
BIN_ROOT="${RUNTIME_ROOT}/bin"
|
||
|
|
CACHE_ROOT="${RUNTIME_ROOT}/cache"
|
||
|
|
GO_CACHE="${CACHE_ROOT}/go-build"
|
||
|
|
GO_TMP="${CACHE_ROOT}/go-tmp"
|
||
|
|
LOADTEST_BIN="${BIN_ROOT}/teraclone-loadtest"
|
||
|
|
|
||
|
|
mkdir -p "${BIN_ROOT}" "${GO_CACHE}" "${GO_TMP}"
|
||
|
|
|
||
|
|
find_go_executable() {
|
||
|
|
if command -v go >/dev/null 2>&1; then
|
||
|
|
command -v go
|
||
|
|
return
|
||
|
|
fi
|
||
|
|
|
||
|
|
local candidates=(
|
||
|
|
"/usr/local/go/bin/go"
|
||
|
|
"${HOME}/go/bin/go"
|
||
|
|
)
|
||
|
|
|
||
|
|
for candidate in "${candidates[@]}"; do
|
||
|
|
if [[ -x "${candidate}" ]]; then
|
||
|
|
echo "${candidate}"
|
||
|
|
return
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "go 실행 파일을 찾을 수 없습니다. Go를 설치하거나 PATH에 추가해주세요." >&2
|
||
|
|
exit 1
|
||
|
|
}
|
||
|
|
|
||
|
|
GO_EXE="$(find_go_executable)"
|
||
|
|
export GOCACHE="${GO_CACHE}"
|
||
|
|
export GOTMPDIR="${GO_TMP}"
|
||
|
|
|
||
|
|
"${GO_EXE}" build -o "${LOADTEST_BIN}" ./cmd/loadtest
|
||
|
|
|
||
|
|
ARGS=(
|
||
|
|
"-mode" "${MODE}"
|
||
|
|
"-target" "${TARGET}"
|
||
|
|
"-users" "${USERS}"
|
||
|
|
"-duration" "${DURATION}"
|
||
|
|
"-ramp-up" "${RAMP_UP}"
|
||
|
|
"-timeout" "${TIMEOUT}"
|
||
|
|
"-ws-timeout" "${WEBSOCKET_TIMEOUT}"
|
||
|
|
"-ws-ratio" "${WEBSOCKET_RATIO}"
|
||
|
|
"-ws-max-conns" "${WEBSOCKET_MAX_CONNECTIONS}"
|
||
|
|
"-monitor-interval" "${MONITOR_INTERVAL}"
|
||
|
|
"-ws-command" "${WEBSOCKET_COMMAND}"
|
||
|
|
"-search-start-users" "${SEARCH_START_USERS}"
|
||
|
|
"-search-step-users" "${SEARCH_STEP_USERS}"
|
||
|
|
"-search-max-users" "${SEARCH_MAX_USERS}"
|
||
|
|
"-max-failure-rate" "${MAX_FAILURE_RATE}"
|
||
|
|
"-max-p95" "${MAX_P95}"
|
||
|
|
)
|
||
|
|
|
||
|
|
if [[ "${INSECURE}" == "true" ]]; then
|
||
|
|
ARGS+=("-insecure")
|
||
|
|
fi
|
||
|
|
|
||
|
|
"${LOADTEST_BIN}" "${ARGS[@]}"
|