QAエンジニア|Playwrightで環境(URL)違いを選んでテストする方法

QAエンジニア

PythonでPlaywrightの自動テストを書いていると、「stg と test を切り替えたい」「でもURLやパスワードを直書きするのは危ないし面倒」と思うことはありませんか?
私も最初はコードに書き込んでしまって、環境を変えるたびに修正してはミスしていました。

でも実は、設定ファイルをちょっと工夫するだけで、コードは1本のまま
実行時に「環境を選ぶだけ」で、自動的に正しいURLやログイン情報を読み込んでテストできるようになります。

この記事では Gitを使わない前提 で、ローカル専用の運用方法に絞って解説します。
コーディング初心者でも、そのまま手順通りにコピペすれば動きます。


結論(最短手順)

  1. .env を環境ごとに作る(ローカル専用の場所に保存)
  2. launch.json は1つだけ(起動時に環境を選択できる)
  3. コード側は .env.{環境} を読むだけ

Step1:.env を環境ごとに作る

📌 例:プロジェクト直下 に保存

  • .env.stg
  • .env.test

例:.env.stg

URL=https://stg.example.app/login
TENANT=example-tenant
EMAIL=user@example.com
PASSWORD=your-password-here

例:.env.test

URL=https://test.example.app/login
TENANT=example-tenant
EMAIL=user@example.com
PASSWORD=your-password-here

👉 クラウド同期フォルダ(デスクトップ自動同期など)には置かないのが無難です。
迷ったら、プロジェクト直下に置けばOK(あなたのPC内だけで使う想定)。


Step2:VS Code の launch.json(1つだけ)

📌 作成場所:.vscode/launch.json

{
  "version": "0.2.0",
  "inputs": [
    {
      "id": "env",
      "type": "pickString",
      "description": "実行する環境を選択",
      "options": ["stg", "test", "dev", "prod"],
      "default": "stg"
    }
  ],
  "configurations": [
    {
      "name": "Run Tests (選択式)",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/run_tests.py",
      "args": ["--env", "${input:env}"]
    }
  ]
}

👉 F5するとポップアップが出て、stg / test / dev / prod を選べるようになります。


Step3:環境読み込みのヘルパー(modules/config_loader.py)

from dataclasses import dataclass
from pathlib import Path
import os
from dotenv import load_dotenv

@dataclass
class Auth:
    url: str
    tenant: str
    email: str
    password: str

def load_auth(env_name: str | None = None) -> Auth:
    env = env_name or os.getenv("APP_ENV", "stg")
    root = Path(__file__).resolve().parents[1]
    # 1) プロジェクト直下 .env.{env}
    env_file = root / f".env.{env}"
    # 2) フォールバック: プロジェクト直下 .env
    if not env_file.exists():
        env_file = root / ".env"
    if not env_file.exists():
        raise FileNotFoundError(f"環境ファイルが見つかりません: {env_file}")

    load_dotenv(env_file)
    for k in ["URL", "TENANT", "EMAIL", "PASSWORD"]:
        if not os.getenv(k):
            raise RuntimeError(f"{k} が .env にありません")

    return Auth(
        url=os.getenv("URL", ""),
        tenant=os.getenv("TENANT", ""),
        email=os.getenv("EMAIL", ""),
        password=os.getenv("PASSWORD", ""),
    )

Step4:メインスクリプト(run_tests.py)

import argparse
from modules.config_loader import load_auth
from modules.login_flow import login_and_get_page  # 既存の関数を利用

if __name__ == "__main__":
    p = argparse.ArgumentParser()
    p.add_argument("--env", choices=["stg", "test", "dev", "prod"])
    args = p.parse_args()

    auth = load_auth(args.env)
    page = login_and_get_page(
        url=auth.url, tenant=auth.tenant,
        email=auth.email, password=auth.password
    )
    # ...以降テスト処理

👉 これで コードは1本のまま、直書きのURLやID/パスワードは不要になります。


Step5:使い方

  1. F5 を押す。
  2. 「環境を選択(stg / test / dev / prod)」ポップアップが出る。
  3. 選んで実行。

「Gitなし」運用での注意点(かんたん版)

  • .env は あなたのPCだけで使う想定。共有の必要が出るまで特に気にしなくてOK。
  • 自動クラウド同期(OneDriveやiCloudなど)が効いている場所は避けると安心。

ちょっと安心テク

  • Windowsなら .env.xxx を右クリック → プロパティ → 「読み取り専用」にしておくと誤編集防止に。
  • 「隠しファイル」にすると目立たなくなり、うっかり開くミスを減らせます。

さらに安全にしたい人向け(任意)

「パスワードだけはファイルに書きたくない」場合は、OSの資格情報を使えます。
Pythonなら keyring が便利です。

インストール

pip install keyring

パスワードを登録(1度だけ)

python -c "import keyring; keyring.set_password('retail-app','stg','your-password-here')"
python -c "import keyring; keyring.set_password('retail-app','test','your-password-here')"

読み出し

import keyring
pwd = keyring.get_password("retail-app", env)  # env は 'stg' など

👉 これで .env の PASSWORD を空にしても運用できます。
初心者はまず「全部 .env」にまとめ、慣れてきたら「パスワードだけ keyring」に移行すると楽です。


最後のチェックリスト

  •  .env.stg / .env.test を作った(ローカル専用の置き場所)
  •  コードから直書きのURL/TENANT/EMAIL/PASSWORDを削除した
  •  launch.json を「1構成+起動時選択」にした
  •  F5 → 環境選択 → 実行できることを確認
  •  (任意)パスワードを keyring に移行

まとめ

  • .env で環境ごとに設定を分離すれば、コードは1本のまま。
  • VS Codeの構成は1つだけで、起動時に環境を選べる。
  • Gitを使わなくても、自分のPCで安全に環境切替を運用できる。

👉 QAエンジニアが「選ぶだけ」でテストを回せる環境が整います。

タイトルとURLをコピーしました