Upgrade to Pro — share decks privately, control downloads, hide ads and more …

E2E自動テストのFlakyに対処しようと思ってAPIでArrangeしてみたの

1.6k

 E2E自動テストのFlakyに対処しようと思ってAPIでArrangeしてみたの

SmartHR 品質保証部

April 16, 2024
Tweet

Transcript

  1. AAAパターンのArrangeを指しています。AAAパターンは、テストコードの可読性を高めるためのパターンです。以下3 つの頭文字を合わせた名称になっています。 • Arrange (準備) ◦ テストを行うための状態をセットアップします。これには、オブジェクトの生成、値の設定、依存関係の注 入などが含まれます。 • Act

    (実行) ◦ テスト対象のコードを実行します。通常は、一つのメソッドや機能に対して実行が行われます。 • Assert (検証) ◦ Actで行われた操作の結果が期待通りであることを確認します。これには、戻り値のチェックやオブジェク トの状態の検証などが含まれます。 Arrangeとは
  2. テスト手順 1. 管理者でログインする 2. 管理者でお知らせを作成し、送信する • 「年末調整の回答依頼が発行されたので確認してね」という内容 3. 従業員でログインする 4.

    従業員でお知らせをクリックする 5. 年末調整画面が表示されること 題材:[お知らせ]から[年末調整画面]への動線をテストしたい AAAパターンに当てはめると以下のようになる。  Arrange(準備):1 ~ 3  Act(実行):4  Assert(検証):5
  3. 以下のように、Arrangeの部分のステップが多い。 1. ログイン画面を表示する 2. 管理者のメールアドレス・パスワードを入力し、ログ インする 3. お知らせ管理画面に遷移する 4. お知らせの内容を入力する

    5. お知らせを送信する 6. 別セッションのブラウザでログイン画面を表示する 7. 従業員のメールアドレス・パスワードを入力し、ログ インする AAAをすべてEnd to Endで書く場合
  4. ArrangeをAPI Requestに置き換えた場合 「管理者でお知らせを送信する」が1ステップに。 1. ログイン画面を表示する 2. 管理者のメールアドレス・パスワードを入力し、ログ インする 3. お知らせ管理画面に遷移する

    4. お知らせの内容を入力する 5. お知らせを送信する 6. 別セッションのブラウザでログイン画面を表示する 7. 従業員のメールアドレス・パスワードを入力し、ログ インする
  5. • APIに置き換えたことで安定し、 Flakyは起きなくなりました ◦ 実行ステップの削減と、 APIの高い安定性を用いることで Flakyに対処できました • また、副次的にテストの実行速度が向上しました ◦

    画面遷移やUIのレンダリング、フォームへの入力待ちの時間が削減されたためです ▪ APIとE2Eでは35倍の速度差があるケースも ▪ UI Automation Vs API Automation - Quality Spectrum APIに置き換えた結果...
  6. • APIに置き換えた部分は End to Endではなくなるということには留意しなければいけません ◦ APIに置き換える部分は別のテストで担保されている必要があります ◦ 今日の題材でいうと「管理者でログイン〜お知らせを送信する」の部分です •

    また、APIに置き換えなくとも、テストのステップを削減する方法はあるので、それらの利用も検討し ましょう ◦ 例えば、Playwrightにはセッション情報をあらかじめ用意しておく仕組みがあり、用いることで ログインのステップを省略することができます ◦ https://playwright.dev/docs/auth#session-storage APIに置き換えるときに気にすること