ITツールの機能紹介-Playwrightの事前・事後処理関数

つ~じ~です。ブログのネタが無さ過ぎて『ネタネエ』『ネタネエヨ』『ネタガネイヤ』と呪文が進化しそうです。最近ド〇クエも色々新作出してますね、マクドナルドのドラ〇エコラボでイオナズンネタが出たのは良い意味で驚愕しました。あ、今回のブログはゲームネタではないです。ネタが無くて毎月うんうん唸っていても何とかブログ皆勤続けてること誰か誉めてほしい。『ホメテ』『ネーホメテ』『ホメテノバセ』唱えます。

さて、今回は自動テスト方面の内容、最近新たな処理を開拓したので簡潔にご紹介いたします。

Playwright:test事前処理関数『beforeAll』『beforeEach』

// 各テストの前処理。ここに共通の前処理を書く
test.beforeAll(async ({ page }) => {
    // ENV.enviromentが「本番」の場合、確認ダイアログを表示して続行確認を行う
    if (ENV.enviroment=='本番')   {
      let dialogResult;
      // ページ内でJavaScriptを実行してダイアログを生成
      page.waitForEvent('dialog'); // ダイアログイベントを待機

      // OKキャンセルのダイアログを表示し、キャンセルの場合はエラーをスロー
      dialogResult = await page.evaluate(() => {
        return confirm('【PROD】『本番環境』設定になっております、続行する場合は『OK』を押してください。\nNGの場合は『キャンセル』を押してください。');
      });    
    
      if (!dialogResult) {throw new Error('【ERROR】キャンセルが選択されました。エラー判定とし、テストを停止します。');}
      else{console.log(`【CONFIG】${ENV.enviroment}環境でテストを実行します`);}
  }
});

『test.beforeAll(async ({ page }) => {  });』

この「beforeAll」関数の{  }の中に処理を記述すると、test関数が開始される直前に共通処理として中のコード実行してくれるようになります。
この類似関数として「beforeEach」という関数もあります。

『beforeAll』『beforeEach』の違い

「beforeAll」と「beforeEach」には大きな違いとして以下の差異があります。

  • beforeAll:呼び出されるのは全test処理の中で1回のみ
  • beforeEach:test関数が始まる度に毎回呼び出される

例えば以下のようなテストがあった場合、

▷ボタンを押すと下位のtest関数が全て順番に実行されますが、この時、「beforeAll関数に書いた処理は最初に1度だけ実行」「beforeEach関数に書いた処理はtestが始まる度に実行」という差異が生まれます。

連続実行しない場合はどちらの関数を使っても基本的に同じ挙動となります。状況に応じて使い分けましょう。
主な使い分けとしては以下の通りです。(ChatGPT談)

  • beforeAll:各describeやテストスイートの最初に1回だけ実行されるセットアップ処理。全テスト共通の初期化や重い処理(例:DB接続、ログインなど)に使います。
  • beforeEach:各テスト(itやtest)の前に毎回実行されるセットアップ処理。テストごとに初期化したい内容(例:ページのリロード、データのリセットなど)に使います。

また、事前処理関数とは逆の事後処理関数も存在しており、関数名は『afterAll』『afterEach』です。違いについては事前処理関数の考え方と同じです。
主な使い分けとしては以下の通りです。(ChatGPT談)

  • afterAll: テストスイート(describeブロックやファイル全体)の全テストが終わった後に1回だけ実行されるクリーンアップ処理。例:DB切断、ファイル削除など。
  • afterEach: 各テスト(itやtest)の実行後に毎回実行されるクリーンアップ処理。例:テストごとのデータリセット、モックのクリアなど。

こちらも状況に応じて使い分けましょう。


情報を知っているかいないかで大きな差が出ます、情報を知らない事にはAIに聞く事すら叶いません。今回も良い勉強になりました。

今後も知識を深めて参りましょう。今回は『コレニテ』『コレニテノシ』『コレニテマル』