自動テストにおけるCAPTCHA対応手法の実践ガイド

Webアプリケーションの自動テストや負荷テストを行う際、ログイン時に表示されるCAPTCHA(画像認証・計算式・漢字入力など)は大きな障壁となる。以下に、現実的な解決策を複数紹介する。

開発環境での一時無効化

最も単純な方法は、テスト環境限定で認証コードのチェック処理をコメントアウトすること。本番環境では使用不可だが、CI/CDパイプライン内での安定したテスト実行には有効。

マスターキー方式の導入

セキュリティを維持しつつテストを可能にするため、特定の固定値(例: "9999")を入力すると常に認証成功とする「裏口」を設ける手法。

# -*- coding: utf-8 -*-
import random

def generate_challenge():
    challenge_code = random.randint(1000, 9999)
    print(f"システム生成コード: {challenge_code}")
    user_input = int(input("認証コードを入力: "))
    
    if user_input == challenge_code or user_input == 9999:
        print("✅ 認証成功")
    else:
        print("❌ 再入力してください")

generate_challenge()

random.randint(a, b) は a ≤ x ≤ b の範囲で整数をランダム生成。マスターキー "9999" は開発チームと共有し、テスト専用として利用。

OCRによる画像解析

Python-tesseractなどのOCRライブラリを使用して画像内の文字を認識。ただし、歪み・ノイズ・フォント変更がある現代のCAPTCHAでは精度が不安定。商用サービス(2Captcha等)との連携も検討可。

Cookieによるセッション継続

UIテストでは、事前に取得した認証済みCookieをブラウザに注入することでログインフローをスキップ可能。

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://example.com")

# 事前に取得した認証Cookieを設定
driver.add_cookie({'name': 'SESSION_ID', 'value': 'valid_token_abc123'})
driver.add_cookie({'name': 'USER_ROLE', 'value': 'tester'})

# リロードで自動ログイン
driver.get("https://example.com/dashboard")
time.sleep(2)
driver.quit()

Cookie名の特定には driver.get_cookies() で現在のセッション情報をダンプし、開発者ツールやネットワークタブで確認するのが確実。

APIレベルでの認証バイパス

バックエンドAPIがJWTやBearer Tokenを発行する場合、直接トークンを取得してヘッダーに付与。UIを介さないためCAPTCHAの影響を受けない。

タグ: Python Selenium 自動テスト CAPTCHA OCR

5月15日 09:42 投稿