Use Cases

高需求 e-commerce checkout 的 CAPTCHA 测试

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

checkout 的 CAPTCHA 配置错了,大概率是大促当天流量涌进来才被发现——那时再排查已经晚了。

更稳妥的做法是挪到发布之前:在自有 staging 环境里,用虚拟商品和测试支付 token 把 checkout 链路连同 CAPTCHA 校验一起跑一遍。下面用 CaptchaAI 演示做法,全程不接触真实商店或真实支付。

测试范围与边界

  • 仅限自有或经授权的 e-commerce QA 场景。
  • staging 环境中的 checkout 集成测试。
  • 自有 checkout 表单的 CAPTCHA 冒烟测试。
  • 虚拟库存、虚拟商品、测试支付 token。
  • 内部 endpoint 上的会话连续性测试。
  • 不模拟真实购买,不涉及第三方商店。

为什么要在上线前测

国内电商的大促节点(双 11、618)和海外的限时发售,共性是 checkout 峰值流量集中在极短时间。CAPTCHA 响应变慢、token 校验失败率升高,往往只有真实流量打过来才暴露,那时已没有回滚余地。

把 CAPTCHA 集成排进 staging 压测清单,提前揪出 sitekey 配错、token 时效不对这类问题,是不少 QA 团队的标准动作。

搭建 staging checkout 环境

尽量复制生产架构:把 checkout 前端和订单后端一起部署到 https://staging.example.com/checkout-test,配一个带虚拟 SKU 的独立数据库副本,支付网关切到 sandbox 模式。国内网络环境下搭这套环境,装依赖时用国内镜像(比如 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests)能省不少等待时间。

构造虚拟商品与测试支付数据

先准备好测试数据,不要用任何真实 SKU 或真实支付信息:

FAKE_PRODUCTS = [
    {'sku': 'QA-SKU-001', 'price_cents': 9900, 'stock': 1000},
    {'sku': 'QA-SKU-002', 'price_cents': 19900, 'stock': 500},
]

FAKE_PAYMENT_TOKEN = 'qa_pm_token_demo'
STAGING_CHECKOUT = 'https://staging.example.com/checkout-test'

用 CaptchaAI 提交任务

有了测试数据,接下来在自有 staging checkout 上触发 Turnstile 校验,用 CaptchaAI 拿到可提交的 token:

import os, time, requests

API_KEY = os.environ['CAPTCHAAI_API_KEY']
SITEKEY = os.environ['QA_TURNSTILE_SITEKEY']

def solve_turnstile():
    r = requests.post('https://ocr.captchaai.com/in.php', data={
        'key': API_KEY,
        'method': 'turnstile',
        'sitekey': SITEKEY,
        'pageurl': STAGING_CHECKOUT,
        'json': 1,
    }).json()
    task_id = r['request']
    while True:
        time.sleep(5)
        rr = requests.get('https://ocr.captchaai.com/res.php', params={
            'key': API_KEY, 'action': 'get', 'id': task_id, 'json': 1,
        }).json()
        if rr['status'] == 1:
            return rr['request']

在自有 QA endpoint 校验 token

把上一步拿到的 token 以 cf-turnstile-response 字段提交到内部订单 endpoint(https://staging.example.com/qa-checkout)。

QA endpoint 负责校验 token、核对虚拟 SKU,再回一个模拟订单号——这一步验证的是你自己后端的校验逻辑,跟 CaptchaAI 无关。

记录关键指标

给每个 qa_case_id 记下:求解耗时(秒)、后端返回码、端到端时延、重试次数。

汇总中位数、P90、P99 和成功率——这些数字只对你自己的 staging 环境有参考价值,不是生产承诺。

可观测性与链路追踪

给每次 QA 运行打上结构化日志,采集 token 总耗时、HTTP 响应码、任务编号、队列深度。development、staging、pre-production 走独立日志通道,再用 OpenTelemetry 之类的链路追踪串起 correlation id,方便凭一个 id 重放整个场景排查问题。

常见故障与处理

问题 处理方式
测试找不到 widget 检查 staging 环境中的选择器与等待时机
CaptchaAI 返回 ERROR_NO_SLOT_AVAILABLE 在内部 pipeline 中按指数退避重试
后端 QA 拒绝 token 对照真实配置核对 action / sitekey / secret
端到端时延偏高 在自有环境中重新测量并检查内部网络抖动

上线前检查清单

  • 测试范围限定在自有或经授权的资源。
  • CaptchaAI key 存放在 CI secret 或 vault,不进源代码。
  • 记录每次调用耗时与响应状态码。
  • 为瞬时错误配置幂等重试与上限。
  • 测试能在 CI 中可复现地重复运行。

完整示例:一次 QA 调用

下面这段 Python 示例展示了在自有 staging 环境中,通过 CaptchaAI 测试一个 CAPTCHA widget 的最小流程:

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()

常见问题

会接触生产流量吗?

不会,所有示例都指向 staging.example.com 或你自己的 QA 域名,请在 staging 副本里复现生产配置。

API key 能写在代码里吗?

不能。用 CI secret 管理器或 vault 注入;已提交进仓库的 key 要立即轮换。

瞬时错误怎么重试?

指数退避(1s、2s、4s)加上限。网络错误、5xx、ERROR_NO_SLOT_AVAILABLE 适合重试;鉴权错误重试没用。

只能测 Turnstile 吗?

不是,method 换成 userrecaptchageetest,配对应 sitekey / gt 参数,同样能测 reCAPTCHA v2、v3 和 GeeTest v3。

相关阅读

把这套流程接进你的 CI,用 CaptchaAI 在每次发布前验证 checkout 的 CAPTCHA 集成。

该文章已禁用评论。