Use Cases

在自有运费计算器上对 CAPTCHA 进行 QA 测试

安全范围: 本指南仅适用于你自有或经授权的 QA、staging 与预发布环境。内容覆盖针对你自己 CAPTCHA 集成的诊断、测试与可观测性模式 — 不涉及第三方站点或未授权流程。

先给结论:运价用例不该因为一个 CAPTCHA 被标成 skip。在 staging 把识别接进用例即可——提取 sitekey,拿到 token,写回表单字段,请求照常打到运价后端,报价与附加费逻辑就都在覆盖里。

第一步:先造一批固定的虚拟运单

生产订单不能跑回归:数据会变,断言没有基线。改用写死的合成运单,覆盖计费分叉的路径:同城小件走最低计费重量;跨省重货走 max(实重, 体积重);跨境件带 HS 编码;缺邮编或超尺寸走报错路径。国内再加一条:偏远地区派送费单独计费,基线里放一个新疆地址,否则这一档永远测不到。

第二步:在 staging 里把 token 拿到手

把 widget 的 data-sitekey 连同 pageurl 提交给 CaptchaAI,轮询结果后写入对应字段:reCAPTCHA v2 是 g-recaptcha-response,Turnstile 是 cf-turnstile-response。API Key 走环境变量。

国内有个特有干扰项:reCAPTCHA 依赖 Google 托管脚本,境内加载不稳。用例在境外 CI 通过、自建 runner 超时,多半是 widget 没渲染,不是识别失败。

成本按线程算:BASIC $15/月、5 线程,STANDARD $30/月、15 线程,套餐内不限次。发版当天集中跑用例是脉冲负载,按并发上限估算。完整流程见 CaptchaAI 快速入门

第三步:断言要落在后端,不是页面上

用例的价值在断言:状态码 200、响应体是合法 JSON;档位数量与基线一致;每档运价为数值且大于 0;同一运单连提两次结果一致。

第四步:日志要能重放整条链路

用例红了能不能快速定位,取决于运行留下了什么。落一份结构化日志:

  • token 耗时与 HTTP 响应码分开记,区分识别慢还是承运商慢;
  • 任务编号与队列深度,看并发是否排队;
  • 一个 correlation id,用 OpenTelemetry 串起浏览器侧、识别调用与运价接口。

示例:最小识别调用

可直接放进用例 setup:

import os
import requests

API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL']  # 例如 https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']


def submit_qa_recaptcha() -> str:
    payload = {
        'clientKey': API_KEY,
        'task': {
            'type': 'NoCaptchaTaskProxyless',
            'websiteURL': QA_PAGE_URL,
            'websiteKey': QA_SITE_KEY,
        },
    }
    response = requests.post(
        'https://api.captchaai.com/createTask',
        json=payload,
        timeout=30,
    )
    response.raise_for_status()
    return response.json()['taskId']


def fetch_qa_result(task_id: str) -> dict:
    payload = {'clientKey': API_KEY, 'taskId': task_id}
    response = requests.post(
        'https://api.captchaai.com/getTaskResult',
        json=payload,
        timeout=30,
    )
    response.raise_for_status()
    return response.json()

排错速查表

问题 处理方式
reCAPTCHA 脚本超时 确认 runner 能否访问 Google 资源
ERROR_NO_SLOT_AVAILABLE 线程跑满,按指数退避重试
后端拒绝 token 核对 action / sitekey / secret
运价与页面不一致 检查附加费字段是否漏传
找不到 widget 检查选择器与等待时机

前提是运价页归你所有,采集仅限自有系统,符合网络安全法与数据安全法。

常见问题

跑一次回归要多少识别调用?

运单数 × 承运商数,套餐内不限次。

reCAPTCHA v2 和 Turnstile 接入差别大吗?

只差 method 参数与 token 字段名。参见 reCAPTCHA v2 识别Turnstile 识别

国内物流站常见的滑块验证码支持吗?

支持 GeeTest(极验)v3,v4 即将支持。hCaptcha 与 FunCaptcha 不支持;CaptchaFox、Friendly Captcha、Lemin 为测试版。

API Key 可以写在用例代码里吗?

不可以。用 CI secret 或 vault 注入,进过仓库的 key 要轮换。

安全相关指南

CaptchaAI 把运价链路纳入回归。

该文章已禁用评论。