1. やりたいこと
Webブラウザの評価を行うとき、毎回確認ログイン処理するのは、億劫ですしテストの実行が遅くなる可能性があります。これを防ぐために、既存の認証状態を新しいブラウザコンテキストで再利用して、ログイン処理を省略できるようにします。
2. 環境
playwrighとpytestが入っている環境を用意します。環境構築方法は、別記事に記載しています。
・macOS 12.4(monterey)
・Python 3.7.6
・pip 22.1
・pytest 6.2.5
・playwright 1.16.2
フレームワーク | コンテンツ |
---|---|
playwright | マイクロソフト社が実行ブラウザを自動化する |
pytest | Pythonで、このプログラムをする |
3. 実現方法
playwrightには、ログインを省略する直接的な機能はありませんので少しばかり工夫が必要です。
具体的には、下記のように一度ログインし、認証状態を再利用することを組み合わせて、ログイン処理を省略できるようにします。
(1) テストの開始前にUIを介してログインし、認証状態を取得します。
(2) 取得した認証情報をローカルに保存します。
(3) 各テスト関数で認証情報を読み込ませて、テスト実施する。
4. 環境設定
rootフォルダの直下に実行ファイルと認証情報を保管するためのjsonファイルを作成します。
※ 実行ファイルのファイル名は、pytestの仕様上「test_xxx.py」としてください。
root
|- state.json
|- test_login.py
|- test_001.py
5. コード
実行ファイルに下記のようなプログラムを書きます。state.jsonは、記述なしで構いません。
import pytest
from playwright.sync_api import Playwright, sync_playwright
# ログイン関数
def test_login(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto(ログインページ)
page.fill(ユーザーフィールド, UserID)
page.fill(パスワードフィールド, Password)
page.click(ログインボタン)
context.storage_state(path="state.json") #認証情報をローカルに保存
import pytest
from playwright.sync_api import Playwright, sync_playwright
# ログイン後のテスト関数
def test_001(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.new_context(storage_state="state.json") #ローカルに保存した認証情報を取得
page = context.new_page()
page.goto(ログイン後のページ) #ログイン処理なしで、ログイン後のページに遷移
6. 実行
ターミナルを起動後rootフォルダーに移動し、「test_login.py」でログイン処理を実行します。実行後、state.jsonに認証情報が保存されています。
pytest test_login.py
state.jsonに認証情報が保存された状態で、「pytest」を実施します。
pytest
ログイン処理をしないtest_001.pyの実行結果もPassedとなり、ログイン処理省略してテスト実現することができました。
7. 関連記事
・【python】playwrightでE2E評価環境を作る
・【python】playwrightの実行中の操作を録画する方法
・【python】playwrightでパラメータテストする方法