Azure

Azure Load Testingを試してみましたが便利です。

はじめに

Azureではロードテストが行えるツールが公開されています。Azure Load Testingです。プレビューですので今後仕様変更など行われる可能ですがあります。

Jmeterでテストを作成してアップロードして利用するロードテストツールです。

クイックスタート: Azure Load Testing を使用してロード テストを作成して実行する | Microsoft Docs
クイックスタート: Azure Load Testing を使用してロード テストを作成して実行する | Microsoft Docs

このクイックスタートでは、Azure Load Testing リソースを作成し、Azure portal を使用して外部 Web サイトに対する高スケールのロード テストを実行する方法について説明し ...

docs.microsoft.com

構築時間

約15分

前提条件

テスト対象として仮想マシンなどhttpでアクセスできる対象を用意します。

作成

Load Testingを作成します。

  • Name:一意

作成します。

ロールの割り当て

作成直後はLoad Testingのテストを作成するためにはロールを割り当てる必要があります。ログインユーザーが所有者であっても必要になります。

ロールの割り当てを行います。

ロードテスト共同作成者、もしくはロードテスト所有者を割り当てます。

 

テストを作成

テストを作成します。

必要事項を入力します。

  • Test name:任意
  • Run test after creation:チェックと入れると作成後にテストが実行されます。

Jmeterで作成したテスト用のファイルをアップロードします。

サンプルのテストファイル

SampleTest.jmx

your-endpoint-urlを書き換えます。仮想マシンの場合はIPアドレスを入力します。

 

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Azure Load Testing Quickstart" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <intProp name="LoopController.loops">-1</intProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">5</stringProp>
        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
        <boolProp name="ThreadGroup.scheduler">true</boolProp>
        <stringProp name="ThreadGroup.duration">120</stringProp>
        <stringProp name="ThreadGroup.delay">5</stringProp>
        <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
      </ThreadGroup>
      <hashTree>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Homepage" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments"/>
          </elementProp>
          <stringProp name="HTTPSampler.domain">your-endpoint-url</stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path"></stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

アップロードの完了を確認します。

パラメーターはテストファイルに合わせて入力することが出来ますが、今回のテストでは入力省略します。

並列して行う場合はインスタンス数を増やします。

テスト条件を入力します。今回は省略します。

モニタリングの設定は省略します。

テストの実行と確認

テストは手動でも実行できます。

 

テスト結果では下記の結果を得られます。

  • Load
  • Duration
  • Response time
  • Error percentage
  • Throughput

メトリクスとしてグラフ化されて表示されます。

  • Virtual Users (Max)
  • Response time (successful responses)
  • Requests/sec (Avg)
  • Errors (total)

 

まとめ

Load Testingを使ってみました。簡単にテストを行えることはとても便利です。ただし、Jmeterでテストを作成する必要があるため、違う意味で敷居が高いと思います。

ある程度の簡単なテストの場合にはポータルのみで利用できるようになるととても便利になると思いました。

-Azure
-