UIパフォーマンステストが通常測定しているもの
初回読み込み、つまり最初の描画までの時間、操作可能になるまでの時間、バンドルサイズです。初回訪問では確かに重要で、既存のツールでも十分に測定でき、そしてその多くはセッションごとに一度きりのコストです。
ユーザーが実際に気づくもの
操作の応答遅延
クリックしてから、目に見えて何かが起きるまでの間のことです。
読み込みとは違い、1セッションに何百回も発生します。
体感的な反応の良さ
そもそも操作を受け付けたことを、UIが示したかどうかです。
100ミリ秒以内にスピナーが出る方が、400ミリ秒間何も起きないより速く感じられます。実際にはそちらの方が遅いとしてもです。
データ量による性能劣化
10行なら問題なく、2,000行では使い物になりません。
クリーンなテスト環境では表面化しません。
3つ目は本番環境に最も多く流出します。テスト環境は小さく、顧客のアカウントはそうではないからです。
重要なのに、たいてい欠けている測定
同じフローを、現実的な規模のデータセットに対して実行してください。負荷テストではありません。実際の顧客が持つデータ量のアカウントに対して、ユーザー1人で実行するだけです。10行なら80ミリ秒で描画されるリストが、2,000行では4秒かかるなら、それは欠陥です。そしてクリーンな環境でどれだけ負荷テストを重ねても、それは見つかりません。
ここでも動作の正しさが先である理由
リクエストが黙って失敗したために即座に描画される画面は、速いとは言えません。何かを測定する前に、そのフローが本来の動作をしているかを確認し、それからその所要時間を測定してください。順序が逆だと、壊れた画面について自信満々の数値が出来上がります。
誰も保守しないシードデータ入りアカウント
このページで勧めている内容の大半は、現実的なデータを持つ環境があることを前提にしています。そして、チームがそれを用意できない理由には、正面から触れておく価値があります。
用意すること自体は簡単です。難しいのは、それを現実的なまま保つことです。スキーマは変わり、シードスクリプトは古びていき、2四半期も経てば、もはや何にも似ていないアカウントが出来上がります。そうなると誰もそれを信用しなくなり、また10行でのテストに戻ってしまいます。
生き残るのは、固定のスクリプトではなく本番のデータの姿から生成する方式です。実際のアカウントが持つレコード数の分布を取り、その90パーセンタイルに当たるテストアカウントを作ります。継続的に保守する必要はなく、ときどき再生成すれば済みますし、実際の顧客が持っているデータから導かれているため、現実とずれません。
絶対値よりも、劣化の検出を
ベンチマークから借りてきた絶対的な目標値が、そのまま当てはまることはほとんどありません。同じ環境で自分たちの数値を記録し、その変化を見てください。役に立つアラートは、今週このフローが遅くなったという通知であって、誰かが決めた数値を超えたという通知ではありません。
ターミナル
npm install -g @testsprite/testsprite-cli
testsprite setup
ローカルにインストールしたくない場合は、ダッシュボードでも同じ範囲をカバーできます。コマンドの全容は CLIリポジトリにあります。
パイプラインが別のチームの管轄なら、最も摩擦が少ないのは GitHub App です。これはWebhookであり、リポジトリには何も変更を加えず、ビルドが新しいバージョンの公開を通知した時点で実行されます。そうではなく、チェックをリポジトリ上で見えるようにしたい場合は、 GitHub Actions のステップでそれができます。
TestSpriteが最初に検証すること
動作の正しさです。これは、あらゆるパフォーマンスの数値が意味を持つための前提になります。リクエストが黙って失敗したために即座に描画される画面は、見事なスコアを出します。TestSpriteが捉えるのは、まさにその種の不具合です。
テストは製品そのものから生成され、変更のたびにデプロイ済みのアプリケーションに対して実行されます。そこには、現実的なデータ量を投入したアカウントに対する実行も含まれます。本番環境まで到達する性能劣化が実際に姿を現すのは、そこだからです。
計測やプロファイリングは、専用のツールの担当領域です。ここで得られるのは、測定しているフローがきちんと動いているという確信と、リストがスケールしなくなったときの早期のシグナルです。変わるのは時間だけでなく、挙動そのものだからです。
TestSpriteはUIのパフォーマンスを測定しますか?
TestSpriteが検証するのは、フローが正しく動作するかどうかであり、それが前提条件になります。計測とプロファイリングは、別の道具の役割です。
最初に追うべき指標はどれですか?
最もよく使われる3つの操作について、現実的な規模のアカウントで測る操作の応答遅延です。読み込み時間よりも、ユーザーの不満に近い指標です。
現実的なデータ量はどうやって用意しますか?
大口顧客と同じ規模までテストアカウントにデータを投入し、それを維持してください。スケールしなくなったリストを一度でも捕まえられれば、その手間は十分に報われます。
体感的なパフォーマンスに手をかける価値はありますか?
あります。しかもコストは小さくて済みます。操作を受け付けたことをすぐに伝える方が、実際のミリ秒を削るよりも体験を大きく変えます。
パフォーマンスを理由にリリースを止めるべきですか?
よく使う操作で大きな劣化が出たなら、止めるべきです。小さなばらつきなら、止める必要はありません。さもないと、しきい値の調整に時間を費やすことになります。