チケット購入APIテストケースの設計と実装

チケット購入APIの処理フロー

チケット購入APIの設計は要件によって異なります。以下に基本的な購入フローの例を示します:

  1. ユーザーが指定日時・座席のチケット情報を問い合わせる
  2. リクエストパラメータ(日付、会場、枚数、割引コード等)を取得
  3. バックエンドデータベースから該当チケット情報を検索
  4. チケット情報と注文詳細をユーザーに返却
  5. 注文リクエストがあれば、注文情報を処理してステータスを返す
  6. 注文状態が変更された場合はユーザーに通知し、再注文または確認を促す

Python実装例

import requests

# APIエンドポイント設定
TICKET_API_ENDPOINT = "https://api.example.com/ticket_purchase"

# リクエスト・レスポンステンプレート
request_template = {
    "event_date": "2024-01-20",
    "venue": "東京ドーム",
    "ticket_count": 1,
    "promo_code": ""
}

success_response = {
    "result": True,
    "msg": "予約完了",
    "reservation_id": "RSV20240120001",
    "payment_status": "pending"
}

error_response = {
    "result": False,
    "msg": "処理失敗",
    "error_id": "ERR_001"
}

def reserve_tickets(event_date, venue, count, promo=""):
    """チケット予約実行関数"""
    query_params = {
        'date': event_date,
        'location': venue,
        'seats': count,
        'discount': promo
    }
    
    api_response = requests.get(TICKET_API_ENDPOINT, params=query_params)
    
    if api_response.status_code == 200:
        reservation_data = api_response.json()
        return reservation_data if reservation_data["result"] else error_response
    else:
        return error_response

テストケース設計

1. 正常系テスト

# テスト設定
test_endpoint = "https://api.example.com/ticket_purchase"
test_parameters = {
    "event_date": "2024-01-20",
    "venue": "東京ドーム", 
    "ticket_count": 2,
    "promo_code": ""
}

# リクエスト実行
api_result = requests.get(test_endpoint, params=test_parameters)

# レスポンス検証
if api_result.status_code == 200:
    response_body = api_result.json()
    if response_body["result"]:
        print("正常処理:予約成功")
    else:
        print("処理失敗:", response_body["msg"])
else:
    print("HTTPエラー:", api_result.status_code)

2. パラメータ付きリクエストテスト

# 割引コード適用テスト
discount_test_params = {
    "event_date": "2024-01-20",
    "venue": "東京ドーム",
    "ticket_count": 1,
    "promo_code": "SUMMER2024"
}

response = requests.get(test_endpoint, params=discount_test_params)

if response.status_code == 200:
    result_data = response.json()
    print("割引適用結果:", "成功" if result_data["result"] else "失敗")
else:
    print("通信エラー発生")

3. 不正エンドポイントテスト

# 存在しないAPIテスト
invalid_url = "https://api.example.com/invalid_path"
error_test = requests.get(invalid_url, params=test_parameters)

if error_test.status_code != 200:
    print("想定通りのエラー応答:", error_test.status_code)

4. 注文確定処理テスト

# 予約→注文確定フロー
reservation = requests.get(test_endpoint, params=test_parameters)

if reservation.status_code == 200:
    reserve_data = reservation.json()
    if reserve_data["result"]:
        print("仮予約成功")
        
        # 注文確定処理
        confirm_payload = {
            "reservation_id": reserve_data["reservation_id"],
            "order_ref": reserve_data["order_number"],
            "amount": reserve_data["total_fee"],
            "notes": "チケット購入"
        }
        
        order_result = requests.post(reserve_data["confirm_url"], data=confirm_payload)
        order_details = order_result.json()
        
        print("注文状態:", order_details["order_status"])
        print("注文内容:", order_details["order_details"])
    else:
        print("仮予約失敗")

タグ: APIテスト Python requests テストケース チケット予約システム

7月20日 19:30 投稿