📙

初めての性能試験まとめ

2022/07/24に公開

なぜこの記事を書くのか

仕事で性能テストを任されたのですが、全く知見がなく、
「脆弱性テストとか負荷テストっていう言い方もあるけど何か違うのか?」
というレベルで非常に苦労しました。

そんなタスクの中で勉強していった知識をまとめます。
記事の中で間違いなどがあればコメントでフィードバックしていただければ幸いです。

性能テストとは

簡単にいうと、「システムが処理する能力を測るテスト」のこと。

例えば、ECサイトを運営していて、商品購入ボタンを押してから完了するまで20秒近くかかってしまうと、ユーザーが離れる原因になる。そのため、事前に性能テストを行うことで、システムがどの程度のリクエスト数をどれくらいのレスポンス時間で処理できるかなどを測るテスト。

負荷テストというテストもあるが、性能テストの中の一つとして負荷テストがあるということらしい。
また、脆弱性テストはシステムの脆弱性を見るテストのため、別物です。

性能テストの目的

システムが「運用時にどれくらいのユーザー数を処理できるのか?」ということを知るために実施を行う。
実施するタイミングとしては一般的に結合テストの最終段階に行われます。

先ほど説明した通り、システムのレスポンス時間が長いとユーザービリティに欠け、ユーザーが離れる原因になるため、事前に想定ユーザー数でテストを行うことにより、リリース前に問題点の改善を実施することが可能になる。
 
ただ、「運用時にどれくらいのユーザー数を処理できるか?」という観点は非常に漠然としたもので、これを完全にカバーするには「ユーザーのアクセスパターンの網羅」や「ユーザー数の数値的な指標」などのさまざまな条件を準備・検討する必要がある。
そのため、テストではある程度観点を絞って実施するのが一般的。

性能テストで見る指標

性能テストを実施する中で主に注意してみられるのは以下の項目になる。

レスポンスタイム

サーバーにリクエストを送って、レスポンスが帰ってくるまでの時間
サーバーがどれくらい早くレスポンスを返せるかを見る指標になる。

スループット

ある一定期間における処理件数。rps(response per second), tps(transaction per second)などの単位が使われる。
例)1秒あたり50件のリクエストを処理できる → 50rps
サーバーがどれくらいの量のリクエストを捌けるのかを見る指標になる

スループットについては、注意点がある。

  • 通信環境が悪いと正しい結果が計測できない
  • CPU利用率が100%に近くなると正確な数値が出ない。

CPU使用率に関しては、それはそれで問題なため対応することが必要だと思われますので、性能テストを実施する際にはCPU使用率を平行してみておく必要があります。

スループットの基準値

レスポンスタイムについては以下の記事などから最長でも10秒など検討をつけることができるが、
スループットの基準値については、よくわからずここを参考に行った以下のように算出します。

基準値 = (想定ユーザー数 * 1ユーザーあたりのページ数 / 想定時間(s)) * ピーク時特性

想定ユーザー数:システムを使用する際の想定されるアクセス数
1ユーザーあたりのページ数:1ユーザーが訪問するページの平均数
想定時間(s):テストの想定時間
ピーク時特性:システムを使うユーザー数は常に一定ではないため、ピーク時の割合を乗じた数。詳しくはこちら

上の基準値から大きく外れる場合は設定に問題があるかもなど気にしてみてもいいかもしれない。

ツール

性能テストを行う上で一つの端末で複数のユーザーでアクセスさせるようにするツールがあります。代表的なものは

  • Jmeter
  • ApacheBench
    などがある。

まとめ

実際のシステムのテストをする際には、要件定義の段階でレスポンス時間はどれくらいを許容するのか、スループットをいくらにするのかなど決めることもありますが、「100人同時アクセスに耐えれる」など抽象的な観点が出てきた場合は、そのシステムがどういう場面で使われるのか、使用されるピークはいつになりそうか、同時アクセスの「同時」とは何なのか。という部分をブレイクダウンしてテストシナリオに落とし込む必要があります。ここは経験していかないことにはなかなか身につかないと思うので、これからの仕事の中で経験値を貯めていければと思っています。

Discussion