You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
exportdefaultdefineConfig({// Run your local dev server before starting the testswebServer: {command: 'npm run start',url: 'http://127.0.0.1:3000',reuseExistingServer: !process.env.CI,stdout: 'pipe',stderr: 'pipe',},});
課題
Github Actions で Playwright の E2E テストを実行するにはどうすれば良いか?
対象環境はGithub Actions 上の local 環境とし、毎回データベースはリセットして、実行単位ごとに依存しないテストがしたい
概要
たとえばサービスがフロント+バックエンドAPI構成の場合、特に変わったことをする必要はなく、以下の手順で実現できる
起動したサービス同士は すべて localhost ( 127.0.0.1 ) で接続し合うことが出来る
Github Actions Workflow の例
API から データベースの接続も localhost を設定すれば良い
たとえばRailsのdatabase設定であれば以下のように
補足: モックの課題
Playwright にはHTTPレスポンスの結果をモックできる関数 ( fullfill ) があり有用だが、モックを使うほど実環境のテストから乖離してしまう。あとはモックの値自体の管理も大変だ。
このためHTTPレスポンスをモックしないテストが出来る方が良い。
ただ純粋なE2Eはテストケースの組み方自体にコツが必要なので、そこは対策しなければいけない。
E2E のテストケースの組み方
ちゃんとしたE2Eテストをする場合、モックを使うよりもテストケースの組み方自体は難しくなる。
なぜなら1個のテストケースが実環境のデータを変えてしまうので、後続のテストケースはそれを考慮した作りにしておく必要があるからだ。
(E2Eテストなのでそれが正しい)
以下が対策となるだろう。
Playwrightの設定でWebサーバーを起動する
https://playwright.dev/docs/test-webserver
Workflow上でWebサーバーを起動しなくても、Playwrightの config に設定することも出来るようだが、 playwright コマンド自体を複数回に分ける上の例では、サーバー起動も複数回に分かれてしまい、時間がかかってしまう
なのであくまでworkflow上でWebサーバーを起動した方が良さそうだ
もしこの機能を使う場合は標準出力を有効にしておくと実行結果が分かりやすくなるだろう
これを設定した場合は、上の例のWebサーバー起動のバックグランド実行や、Webのレスポンスを待ち受ける処理は必要なくなりそう
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
プロフィール・経歴
https://github.com/YumaInaura/YumaInaura
The text was updated successfully, but these errors were encountered: