84 lines
3.1 KiB
Python
84 lines
3.1 KiB
Python
"""
|
|
腾讯天御点选验证码纯协议端到端实战压测基准脚本
|
|
连续发起 N 轮真实线上验证请求,统计:
|
|
1. 首检通过率 (Success Rate)
|
|
2. 端到端耗时分布 (Min / Mean / Max Latency)
|
|
3. 异常与失败分类
|
|
"""
|
|
|
|
import argparse
|
|
import sys
|
|
import time
|
|
from pathlib import Path
|
|
from typing import List
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
|
if str(PROJECT_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(PROJECT_ROOT))
|
|
|
|
from tcaptcha.client import TencentCaptchaClient
|
|
from tcaptcha.solver import CaptchaSolver
|
|
|
|
|
|
def run_benchmark(rounds: int = 10, aid: str = "2039519451", interval: float = 3.0):
|
|
print("=" * 65)
|
|
print(f" 🚀 开始腾讯天御验证码纯协议线上压力基准测试 (AppID: {aid})")
|
|
print(f" 测试轮数: {rounds}, 请求间隔: {interval}s")
|
|
print("=" * 65)
|
|
|
|
# 预加载模型,避免把模型初始化耗时算入单次请求
|
|
print("[*] 正在预加载 YOLO 目标检测器与 ResNet18 分类器模型...")
|
|
solver = CaptchaSolver()
|
|
client = TencentCaptchaClient(aid=aid, solver=solver)
|
|
print("[*] 模型就绪,开始线上请求...\n")
|
|
|
|
results: List[dict] = []
|
|
latencies: List[float] = []
|
|
successes = 0
|
|
|
|
for i in range(1, rounds + 1):
|
|
print(f"--- [Round {i}/{rounds}] ---")
|
|
res = client.solve()
|
|
results.append(res)
|
|
latencies.append(res["elapsed_ms"])
|
|
|
|
if res["success"]:
|
|
successes += 1
|
|
print(f" ✅ 成功! 耗时: {res['elapsed_ms']}ms | randstr: {res['randstr']} | ticket: {res['ticket'][:24]}...")
|
|
else:
|
|
print(f" ❌ 失败! 耗时: {res['elapsed_ms']}ms | 原因: {res['error']}")
|
|
|
|
# 间隔停顿模拟真实请求,避免瞬间高频触发频控
|
|
if i < rounds and interval > 0:
|
|
time.sleep(interval)
|
|
|
|
# 汇总报表
|
|
success_rate = (successes / rounds) * 100
|
|
avg_latency = sum(latencies) / len(latencies) if latencies else 0
|
|
min_latency = min(latencies) if latencies else 0
|
|
max_latency = max(latencies) if latencies else 0
|
|
|
|
print("\n" + "=" * 65)
|
|
print(" 📊 纯协议实战基准测试统计汇总")
|
|
print("=" * 65)
|
|
print(f"总测试轮数: {rounds}")
|
|
print(f"成功次数: {successes}")
|
|
print(f"失败次数: {rounds - successes}")
|
|
print(f"综合首检通过率: {success_rate:.2f}%")
|
|
print(f"平均单次耗时: {avg_latency:.1f} ms")
|
|
print(f"最短单次耗时: {min_latency} ms")
|
|
print(f"最长单次耗时: {max_latency} ms")
|
|
print("=" * 65)
|
|
|
|
return success_rate, avg_latency
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Tencent Captcha Benchmark Tool")
|
|
parser.add_argument("--rounds", type=int, default=10, help="Number of test rounds (default: 10)")
|
|
parser.add_argument("--interval", type=float, default=3.0, help="Interval between rounds in seconds (default: 3.0)")
|
|
parser.add_argument("--aid", type=str, default="2039519451", help="AppID (default: 2039519451)")
|
|
args = parser.parse_args()
|
|
|
|
run_benchmark(rounds=args.rounds, aid=args.aid, interval=args.interval)
|