フレーキーテストの原因
テストを実行すると、以前パスしていたテストが失敗する場合があります。テストを再実行すると問題が解決します。これはテストが信頼できないということを意味します。
フレーキーなテストにはさまざまな原因があります。
実行順序に依存したテスト
実行順序に依存したテストはシリアルで実行する場合は時間効率がよくなる場合がありますが、並列実行した場合に失敗することがあります。
テストを並列実行したい場合や、失敗したテストだけを再実行したい場合はできるだけ実行順序に依存しないテストを記述するようにします。
Stale element error
デバイスとキャッシュの間で画面要素が同期できていない場合はエラーになる場合があります。
shirates-core に組み込まれた同期メカニズムは可能な限り同期をサポートします。
セッションの破損
Appium Serverのセッションはアプリの起動/終了/再起動などによって破損する場合があります。セッションの破損はさまざまな種類のエラーの原因となります。
この場合はAppium Serverへ再接続するようにします。
仮想デバイスの低品質
仮想デバイス(Android emulator/iOS simulator)は品質が安定していないことが多いです。
トラブルが発生した時はデバイスを再起動します。
CPU/IOの高負荷
CPU/IOが高負荷になるとタイムアウトによるエラーが発生しやすくなります。多数の仮想デバイスを使用して並列にテストを実行するとこの問題が発生する場合があります。
高負荷にならないように検討します。仮想デバイスの起動はリソースを激しく消費するので、インターバルを設けながらシリアルに仮想端末を起動するのが良いプラクティスです。