Trường Hợp Sử Dụng

Giảm gián đoạn CAPTCHA trong kiểm thử QA của bạn

Phạm vi an toàn: Hướng dẫn này chỉ áp dụng cho môi trường QA, staging hoặc pre-production thuộc sở hữu hoặc được uỷ quyền của bạn. Nội dung bao gồm các mẫu chẩn đoán, kiểm thử và quan sát cho tích hợp CAPTCHA của chính bạn — không áp dụng cho bên thứ ba hoặc luồng không được phép.

Muốn suite QA bớt vướng CAPTCHA thì việc cần làm không phải giải nhanh hơn, mà giảm số lần phải giải: gom bước cần token vào một case, cache token khi còn hợp lệ, giữ phiên staging sống hết lần chạy suite. Phần còn lọt qua để API CaptchaAI xử lý trong pipeline.

Nhớ hai con số: token reCAPTCHA v2 hợp lệ khoảng hai phút, và CaptchaAI tính tiền theo thread — BASIC ($15/tháng, 5 thread) có số lượt giải không giới hạn.

Gom bước để một token đi hết một case

Hãy có một con số: log mỗi lần lấy token kèm tên test và trạng thái fresh hay cached. Lượt giải thường dồn vào một fixture đăng nhập lặp ở mọi test file. Nguyên tắc: mỗi qa_case một token.

  1. Đưa fixture đăng nhập lên scope="session" hoặc scope="module".
  2. Gộp assertion dùng chung một phiên vào một test function.
  3. Đặt bước chậm (chờ render, chờ API) sau khi nộp token.
  4. Test chỉ chạm backend thì bỏ trình duyệt: lấy token qua API rồi POST thẳng vào endpoint, theo hướng dẫn reCAPTCHA v2 qua API.

Bước 4 hiệu quả nhất: test validation phía server không cần Chromium.

Cache token trong khoảng còn hợp lệ

Khi retry trên cùng qa_case, đừng giải lại. Cache token với TTL ngắn hơn hạn thật — 90 giây cho token sống hai phút. Ba chi tiết hay bị bỏ sót:

  • Khoá cache phải gồm sitekey pageurl; trộn token giữa hai widget sinh lỗi khó truy vết.
  • Lệch đồng hồ CI và backend đủ để token "còn 3 giây" bị từ chối.
  • Xoá cache khi backend báo lỗi xác thực.

Giữ phiên staging sống lâu hơn

Nhiều widget chỉ hỏi lại khi phiên bị coi là mới, và trên staging bạn kiểm soát được: lưu cookie phiên QA sau lần đăng nhập đầu, dùng storage_state của Playwright giữa các test file, cho phiên sống trọn lần chạy suite. Với Cloudflare Turnstile, phiên ổn định càng đáng giá vì widget hay hiện lại khi điều hướng.

Ví dụ: đội QA thuê ngoài ở TP.HCM

Một đội QA tại TP.HCM bảo trì 180 test Playwright cho khách hàng nước ngoài, chạy hai lượt mỗi đêm trong cửa sổ bảo trì 3 giờ. Riêng phần chờ token đã đẩy job CI vượt cửa sổ đó, và sáng nào lead cũng phải phân loại lại test đỏ vì timeout.

Ba thay đổi đủ để gỡ: fixture đăng nhập lên scope session, gom case checkout, retry dùng lại token còn hạn. Nếu suite chạm dữ liệu cá nhân thật, giữ log tối thiểu theo Nghị định 13/2023/NĐ-CP; API key nằm trong CI secret.

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Không thấy widget Selector hoặc lúc load đổi Kiểm tra wait_for_selector
ERROR_NO_SLOT_AVAILABLE Hàng đợi đầy tạm thời Thử lại với backoff
Backend từ chối token Sai action/sitekey/secret Đối chiếu cấu hình
Token hết hạn giữa chừng Bước chờ sau lúc lấy token Lấy token sát lúc nộp
Cache trả nhầm token Khoá thiếu pageurl Ghép cả hai trường

Ví dụ gọi QA

Luồng tối thiểu: gửi task rồi đọc kết quả theo ID.

import os
import requests

API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL']  # ví dụ 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()

Bọc hai hàm trong lớp cache trên, khoá theo sitekey+pageurl.

Câu hỏi thường gặp

Bao nhiêu thread là đủ cho một suite QA chạy đêm?

Đếm số test chạy song song có bước CAPTCHA, không phải tổng số test. Suite 200 test chạy 5 worker hiếm khi cần quá 5 thread, nên BASIC ($15/tháng, 5 thread) thường đủ; lên STANDARD ($30/tháng, 15 thread) khi thêm worker.

CaptchaAI có giải hCaptcha cho môi trường QA không?

Không. hCaptcha và FunCaptcha (Arkose Labs) không được hỗ trợ, GeeTest v4 sắp ra mắt. Dùng được: reCAPTCHA v2/v3, Turnstile, Cloudflare Challenge, GeeTest v3, image/OCR, grid, BLS; CaptchaFox, Friendly Captcha, Lemin ở mức beta.

Nên retry thế nào khi gặp lỗi tạm thời?

Thử lại idempotent kèm exponential backoff (1s, 2s, 4s) và giới hạn trên. Lỗi mạng và 5xx nên thử lại; lỗi xác thực không.

Hướng dẫn liên quan an toàn

Kiểm chứng tích hợp CAPTCHA với CaptchaAI.

Os comentários estão desativados para este artigo.