本記事はAzure DevOps Advent Calendar 2018の14日目の投稿になります。
VSTSがAzure DevOpsと名前をかえてはや3ヶ月が立ちますが皆さん利用してますでしょうか?私は仕事で結構利用していますがお世辞抜きに便利です。
今回はAzrueDevOpsのテスト機能の一つであるロードテスト機能について記載していきます。ロードテスト自体はVSTSの頃からある機能なので目新しいものではありませんが、AzureDevOpsになってからUIが若干使いやすくなった印象はあります。クラウドベースでロードテストを行うメリットとしては複数のDC拠点からマルチに負荷をかけれることです。より実態に近いサイトアクセスを実現できるのでロードテストの精度を高めることができます。
※この記事は2018年12月14日時点の情報になります。
※AzureDevOpsプロジェクトのアカウント開設・作成方法等については割愛します。
ロードテストとは
ロードテストは負荷テストの一つでインフラ設計時に想定した負荷をかけ性能や耐久性を計測するテストになります。想定される範囲で負荷をかけていきどの時点で性能劣化や異常が発生するかを計測するために行われます。
ピーク時に想定される負荷に耐えられるかテストする場合は「ピークロードテスト」、想定外の負荷をかけてテストする場合は「ストレステスト」と呼び目的によってロードテストとは違う呼称があります。「負荷テスト」という言葉でひとくくりにしがちですが目的によって呼称や検証内容が変わってくるので注意が必要です。
Azure DevOpsのロードテスト
AzureDevOpsのロードテストについて説明していこうと思います、がその前に「TestPlans」が表示されていない場合があるので「TestPlans」が表示されていない方は左メニューの一番下にある「Project Settings」→「TestPlans」をOnにして画面をリロードしてメニューに「TestPlans」が表示されているのを確認してください。
「Azure Articacts」と「Azure Test Plans」はデフォルトで表示されていないのは有償ユーザ向けの機能だからです。無償ユーザでは利用できません。また、有償ユーザでも同一組織で5人までは無料で使えますが6人以降は費用が発生するので注意しましょう。Azure DevOpsの機能表とライセンス別に利用可能なマトリックスに関しては下記のサイトを参考にして下さい。
メニューの「Test Plans」→「Load Test」の順で遷移していくとロードテストのポータル画面が表示されます。
AzureDevOpsにはロードテストの手法が4種類用意されています。見た目上は5つなのですが「VisualStudio Web Test」と「VisualStudio IDE」はテストの実行をVisual Studioから行うかDevOpsポータルから行うかの差でしかないので4種類としています。
それでは一つづつ見ていきましょう。
HTTP archive
HTTP archiveはブラウザで実行した手順を.harファイル形式で保存して読み込ませることで実行するテストです。ブラウザで実行した手順通りにE2Eぽくテストを実施することが可能です。FiddlerやChrome、FireFox、IE、Edge、Safari等の主要ブラウザで作成することが出来ます。テスト自体もharファイルを読み込ませて実行するだけなので比較的簡単にロードテストを実施できます。
各種ブラウザのharファイルの作成方法については下記のサイトに詳細がまとまっているのでこちらを参考にしてください。
Visual Studio webtest
Visual Studio webtestはVisual Studioで作成したテストシナリオファイルを読み込ませることで実行するテストです。Visual Studioでテストシナリオを作成して読み込ませることで実行するテストです。作成したテストシナリオはVisual Studioから実行することも可能です。
VSTSの時の情報になりますが興味があれば下記の記事を参照してください。
Apache JMeter
Apache JMeterは昔からある有名な負荷テストツールです。Apache JMeterで作成したテストシナリオファイルを読み込ませることでテストが可能なので既存のjmxスクリプトファイルを読み込ませてロードテストすることが可能です。テスト用のスクリプトファイルはApache JMeter IDEを利用して作成します。他のテストと違うのは設定がJMeterに準じていることで、Agentの数(Numer of agents)や負荷を掛ける時間(Load duration)などを設定します。
URL Based Test
URLはHTTP Methodベースにテストを行う方法です。主にRestAPI等のUIを持たない機能のテストに利用します。テスト可能なHTTP MethodはGET・POST・PUT・PATCH・DELETE・HEAD・OPTIONです。HTTP Methodの種類によって設定できるパラメータが変わります。比較的シンプルに実行できますが複雑なリクエストを作成するときはharファイルによるインポートも可能なのでブラウザやFiddlerなどで操作したシナリオを読み込ませてテスト実行しましょう。
Azure DevOpsのロードテストの実行
ここで試しにAzure DevOpsでロードテストを実行してみようと思います。シナリオは「HTTP archive」を利用して本ブログサイトのトップページの負荷計測を実施します。前提として本ブログはAzureの東日本DCにWebAppsでサイトを構築しています。
「New」から「HTTP Archived BaseTest」を選択してテストプロジェクトを作成します。今回はブラウザでブログサイトにアクセスしたharファイルを事前に作成しておいて読み込ませてあります。余計なアクセス履歴などがある場合は削除するなどして調整しましょう。
「Settings」タブに遷移してテスト実行環境の設定をしましょう。今回はデフォルトのままで実行します。Locationは香港DCにしているので香港DCから東日本DCにロードテストを実行するという形になります。
「WebScenarios」タブに戻って「RunTest」からテストリクエストを行います。すぐにテストが実行されるわけではなく、まずはキューイングしその後テスト実行環境が立ち上がるので実際にテストが開始されるまでそこそこかかります。
実際にテストが開始されると実行時間が表示されます。終わるまで座して待ちましょう。
テストが完了すると結果が表示されます。1リクエストの平均レスポンスタイムや1秒間の平均リクエスト数からトータルリクエスト数などが確認できます。「Charts」タブに移動すると折れ線グラフで確認することもできます。
レスポンスタイムが少し長めにかかっているように見えるのでWebAppsのサイズをスケールアップしてみる、といった感じの指標になります。
※本家のチュートリアルのリンクを記載しておきます。
Azure DevOpsのロードテストの費用
ロードテストは1か月あたり20,000仮想ユーザ分が無料でそれ以降はVUM(Virutal User Minutes)ごとに課金が発生します。計算方式は2つあってコア数毎の仮想ユーザの使用数で分岐するみたいです。
・コア数あたり25以上の仮想ユーザが使用される場合
VUM = (テスト実行の仮想ユーザの最大負荷) × (テスト実行時間(分))
・コア数あたり25未満のユーザが使用される場合
VUM = (Agentのコア数) × (1コアあたり25仮想ユーザ) × (テスト実行時間(分))
上記のテストで実行した設定で算出すると
VUM = (テスト実行の仮想ユーザの最大負荷) × (テスト実行時間(分))
が適用されるので250VUM消費することになります。ここら辺よくわかってないのですがテスト実行の仮想ユーザの最大負荷は何かしらの制限がかかっている場合は250がマックスなようです。
もちろん設定を変更して時間やコア数を増減すればそれに応じて費用が変動します。最小利用数は「仮想ユーザ数:25」・「実行時間:1分」になるので最低でも25VUMを消費することになります。テスト実行結果に利用したVUMの数が表示されるので使用量の結果は確認できます。それにしても相変わらず分かりづらい価格の算出設定になっているのでもう少しわかりやすくして欲しいなと思います。
VUMの価格表が公式サイトで見当たらなかったのですが海外のサイトでドル換算の金額表を見つけたので転記しておきます。
- 仮想ユーザ数 1 – 20,000:FREE
- 仮想ユーザ数 20,001 – 2,000,000 : $0.004/1仮想ユーザ
- 仮想ユーザ数 2,000,001 – 10,000,000 : $0.002/1仮想ユーザ
- 仮想ユーザ数 10,000,001 – : $0.001/1仮想ユーザ
Azure DevOpsの現段階であまり多くないので下記のサイトを参考にするといいです。特にFAQは非常に役に立ちます。もし業務利用などを考えているのであれば下記のサイトを熟読することをお勧めします。
Azure DevOpsはPipelinesやBoardsがよく焦点に充てられますが他にも有用な機能がたくさんあるのでどんどん使っていきましょう。
コメント