feat(tcaptcha): 完成腾讯天御点选纯协议全自动化客户端与雨云业务适配器
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
"""
|
||||
腾讯天御点选验证码纯协议端到端实战压测基准脚本
|
||||
连续发起 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)
|
||||
Reference in New Issue
Block a user