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の影響を受けない。