增加测试-2

This commit is contained in:
yml2213
2026-07-02 12:21:05 +08:00
parent 664a7b03f8
commit c0d7652524
2 changed files with 47 additions and 18 deletions
@@ -246,7 +246,13 @@ const prepParams = buildSignedParams(appKey, {
certActualStartTime: Date.now(),
certActualEndTime: Date.now() + 30 * 24 * 60 * 60 * 1000,
}, signMethod)
await post('/send-code', prepParams, {})
const prepResult = await post('/send-code', prepParams, {})
if (prepResult.data?.result === 1) {
console.log(` 数据准备完成 (${prepResult.ms}ms)`)
} else {
console.log(` ⚠ 数据准备失败: result=${prepResult.data?.result} error_msg="${prepResult.data?.error_msg}" (${prepResult.ms}ms)`)
console.log(` 请确认服务端已配置正确的 appKey/signSecret 且未触发限流`)
}
for (const endpoint of endpointsToTest) {
console.log('')
@@ -256,16 +262,21 @@ for (const endpoint of endpointsToTest) {
console.log('╚══════════════════════════════════════════════════════╝')
const result = await runLoadTest(endpoint, targetTps, testDuration, loadTestOid)
console.log(` 实际 TPS : ${result.actualTps.toFixed(1)}`)
console.log(` 成功 TPS : ${result.successTps.toFixed(1)} (业务 result=1)`)
console.log(` 总请求数 : ${result.totalReqs}`)
console.log(` 成功 : ${result.successes}`)
console.log(` 失败 : ${result.failures}`)
console.log(` 业务成功 : ${result.successes}`)
console.log(` 业务失败 : ${result.bizErrors}${result.bizSample ? ` (示例: ${result.bizSample})` : ''}`)
console.log(` 被限流 : ${result.rateLimited}`)
console.log(` 平均耗时 : ${result.avgMs.toFixed(1)} ms`)
console.log(` P50 : ${result.p50Ms.toFixed(1)} ms`)
console.log(` P95 : ${result.p95Ms.toFixed(1)} ms`)
console.log(` P99 : ${result.p99Ms.toFixed(1)} ms`)
console.log(` 最小耗时 : ${result.minMs.toFixed(1)} ms`)
console.log(` 最大耗时 : ${result.maxMs.toFixed(1)} ms`)
if (result.rateLimited > result.totalReqs * 0.1) {
console.log(` ⚠ 注意: ${((result.rateLimited / result.totalReqs) * 100).toFixed(0)}% 请求被限流,建议调高 KUASHOU_INDUSTRY_RATE_LIMIT_MAX`)
}
}
console.log('')
@@ -315,10 +326,12 @@ async function runLoadTest(
duration: number,
oid: string,
): Promise<{
actualTps: number
successTps: number
totalReqs: number
successes: number
failures: number
bizErrors: number
bizSample: string
rateLimited: number
avgMs: number
p50Ms: number
p95Ms: number
@@ -326,13 +339,14 @@ async function runLoadTest(
minMs: number
maxMs: number
}> {
const interval = Math.max(1, Math.floor(1000 / tps))
const totalRequests = Math.min(tps * duration, 10000)
const latencies: number[] = []
let successes = 0
let failures = 0
let bizErrors = 0
let rateLimited = 0
let bizSample = ''
const startedAt = Date.now()
const deadline = startedAt + duration * 1000
const intervalMs = Math.max(1, Math.floor(1000 / tps))
const worker = async () => {
while (Date.now() < deadline) {
@@ -360,17 +374,30 @@ async function runLoadTest(
}
const params = buildSignedParams(appKey, bizParams, signMethod)
const { ok, ms } = await post(`/${endpoint}`, params, { oid })
const { ok, data, ms } = await post(`/${endpoint}`, params, { oid })
latencies.push(ms)
if (ok || (endpoint === 'destroy-code' && ms < 500)) {
if (ok) {
successes++
} else if (data?.error_msg && String(data.error_msg).includes('频繁')) {
rateLimited++
} else if (data?.result === 4010003 && String(data?.error_msg || '').includes('频繁')) {
rateLimited++
} else if (data?.result != null && data?.result !== 1) {
bizErrors++
if (!bizSample) {
bizSample = `result=${data.result} "${data.error_msg}"`
}
} else {
failures++
bizErrors++
if (!bizSample) {
bizSample = `HTTP ${ms}ms ${JSON.stringify(data).slice(0, 100)}`
}
}
const elapsed = Date.now() - startedReq
const sleep = interval - elapsed
const sleep = intervalMs - elapsed
if (sleep > 0) {
await delay(sleep)
}
@@ -384,10 +411,12 @@ async function runLoadTest(
latencies.sort((a, b) => a - b)
return {
actualTps: successes / Math.max(1, (Date.now() - startedAt) / 1000),
successTps: successes / Math.max(1, (Date.now() - startedAt) / 1000),
totalReqs: latencies.length,
successes,
failures,
bizErrors,
bizSample,
rateLimited,
avgMs: avg(latencies),
p50Ms: percentile(latencies, 50),
p95Ms: percentile(latencies, 95),