Dmitri Tikhanski is a Contributing Writer to the BlazeMeter blog.

Learn JMeter in 5 Hours

Start Learning
Slack

Run massively scalable performance tests on web, mobile, and APIs

Jun 10 2016
En

3 つの簡単な手順で JMeter アサーションを使用する方法

JMeter アサーションは間違いなく重要であり、それが「パス」とみなされるかどうかを判断するために設定した基準を備えてます。JMeter アサーションを使用し、サンプルとそのサブサンプルに対して実行すると、返された値が予想された値と一致することを確認できます。また、それらを JMeter 変数に適用することもできます。

 

でも、アサーションを効率的に使用していますか。ピットフォールの回避方法を知っていますか。この記事では、アサーションを使用するための 3 つの主な手順について説明します。これには、設定時に考慮する要素、一般的に使用されるアサーションの例、および結果の表示方法が含まれています。

 

1. アサーションの設定前の考慮事項

 

JMeter アサーションの費用

 

すべてのアサーションには、CPU またはメモリの消費の観点からのコストが伴います。ただし、一部のアサーションは、その他より大きなコストがかかります。「JMeter Performance and Tuning Tips (JMeter のパフォーマンスとチューニングに関するヒント)」ガイドによると、Response アサーションおよび Duration アサーションは通常影響度の低いオプションである一方、Compare アサーションおよび XPath アサーションのようなその他の XML ベースのアサーションは、CPU とメモリをより多く消費します。

 

JMeter アサーションのスコープ

 

アサーションを設定する場合は、スコープを考慮する必要もあります。アサーションは、主なサンプルとそのサブサンプル、またはサブサンプルにのみ適用できます。Response アサーションまたは Size アサーションのような一部のアサーションは、JMeter 変数に対しても使用できます。コード ベースのアサーション(Beanshell、BSF およびJSR223 など)には、スコープを識別する GUI 要素がありません。つまり、スコープを含む、すべてのアサーションのロジックを手動で実装する必要があります。


アサーションには、以下に示すように、同じレベル(より大きなスコープ)のサンプルまたは親サンプル(より小さいスコープ)を適用させることができます。


Using JMeter's Transaction Controller (JMeter のトランザクション コントローラの使用)」で説明したように、全体のトランザクション コントローラに障害を発生させるアサーションを適用する場合は注意してください。

 

アサーションの結合

 

複数のアサーションをサンプラ、コントローラ、スレッド グループ、またはテスト計画に追加することができます。アサーションが失敗する場合は、影響を受けるすべてのサンプルに障害が発生するため、注意が必要です。

 

2. 一般的に使用されるアサーションおよびその使用方法

 

Response アサーション

 

最も一般的に使用されるアサーションは、Response アサーションです。これは、応答テキスト/本文/コード/メッセージ/ヘッダに指定されたパターンが含まれているか、これらと一致するか、またはこれらと等しいかどうかを確認します。パターンは、次のいずれかを指定できます。

 

パターンは、次のいずれかを指定できます。

 

  1. 「Equals」の「string」、または「Substring」句
  2. 「Contains」の「Perl5-style」正規表現、または「Matches」句

 

確認できる応答エンティティは、以下のとおりです。

 

  1. Text response - これは、ブラウザで表示可能な応答です。
  2. Document (text) - これは、Apache Tika でサポートされているものすべてに対応しています(JMeter インストールの /lib フォルダ内にある apache-tika.jar の存在を前提としています)。これには、PDF、Office、オーディオ、およびビデオ形式を含めることができます。これは高ロードのメモリを消費する可能性があるため、注意してください。
  3. URL Sampled - 要求された URL に対してこのアサーションを使用し、期待値と一致することを確認します。たとえば、パスのどこかでリダイレクト URL にエラーが含まれていないことを確認することができます。
  4. Response Code - これは、応答コードが予想されることを確認します。4 xx および 5 xx 応答コードについては、[Ignore Status]ボックスをオンにしたことを確認してください(詳細な説明については、以下を参照してください)。
  5. Response Message - これは、応答メッセージが予想どおりに表示されることを検証します。
  6. Response Headers - これは、応答ヘッダに対して使用し、特定の HTTP ヘッダが存在するかしないかを参照します。
  7. Ignore Status - JMeter が追加設定なしですべての 4 xx および 5 xx 応答を失敗とみなします。テスト ケースが負の値、たとえば、404 エラーが予想される場合は、このボックスをオンにし、JMeter の組み込みステータス コードの確認を抑制して、独自のステータス コード アサーションに置き換えます。

 

Duration アサーション

 

Duration アサーションは非常に単純です。Response アサーションと合わせて使用されるため、アサーションが必要なユース ケースの 90 パーセントを占めます。使用率は非常に単純です。最大期間(ミリ秒単位)を提供し、指定された値よりも長い要求が継続する場合は、サンプルが失敗としてマークされます。Duration アサーションが失敗した場合は、次のような出力が表示されます。



 

Size アサーション

 

Size アサーションは、応答長を確認し、予想されるサイズと等しい/と等しくない/より大きい/より小さいかどうかをバイト単位で表示します。以下に適用できます。

 

  1. Full response (本文およびヘッダ)
  2. Response headers
  3. Response body
  4. Response code
  5. Response message

 

応答サイズを確認する最も簡単な方法は、[View Results Tree Listener]を使用することです(後述 – 「Tracking Results」を参照してください)。以下に、サンプル出力の例を示します。

 

 

 

[Full Response]アサーションでは、「=」比較タイプおよび 1591 バイトをテストする必要があります。

 

  1. [Response Body]の場合 - 1270 バイト
  2. [Response Headers]の場合 - 321 バイト


 


XML アサーション

 

XML アサーションは、返された応答本文が XML 準拠であることを確認します。構文のみが確認されます。外部リソースは、ダウンロードも検証もされません。無効な XML コードがある場合、失敗の理由は「Assertion Failure」メッセージでレポートされます。


たとえば、以下の XML テストでは、最終行に閉じられていないルート タグ()があります。

 

   Tove

   Jani

   Reminder

   

/note>

 

^

そのため、XML アサーションは影響を受けるすべてのサンプラに失敗し、アサーションの失敗メッセージの理由をレポートします。このメッセージの例については、以下を参照してください。

 

Beanshell アサーション

 

Beanshell アサーションでは、Beanshell スクリプトを使用してサンプラ上で追加チェックを実行できます。Beanshell スクリプトで使用可能な JMeter API 省略形の詳細については、「BeanShell の使用方法: JMeter の有力な組み込みコンポーネント」を参照してください。さらに、Beanshell アサーションは、以下の変数を提供します。

 

  1. Failure - boolean (true|false)。これは、サンプラが成功とみなされているかどうかを示します。
  2. FailureMessage - string。これは、アサーション失敗のメッセージとして表示されるカスタム メッセージです。
  3. ResponseData - byte。応答データを表すバイト配列。
  4. ResponseCode - string。これは、応答コードを表します。
  5. ResponseMessage - string。これは、応答メッセージを保持します。
  6. ResponseHeaders - string。これには、応答ヘッダが含まれます。
  7. SampleResult - org.apache.jmeter.samplers.SampleResultこれは、上記サンプラの結果を含む JMeter SampleResult クラス インスタンスです。複数の親サンプラがある場合(つまり、「Transaction Controller」または「Retrieve all Embedded resources」)、このメソッドはネストされているすべての要求の配列を返します

 

たとえば、「blazemeter」という単語が URL パス内に表示されない場合、以下の Beanshell アサーション コード スニペットはエラーを返します。

 

String path = SampleResult.getURL().getPath();

if (!path.contains("blazemeter")) {
   Failure = true;
   FailureMessage = "URL Path: didn't contain \"blazemeter\"" + System.getProperty("line.separator") + "URL Path detected: " + path;

}

 

 

MD5Hex アサーション

 

MD5Hex アサーションは、予想される MD5 ハッシュに対する実際の応答の MD5 チェックサムを確認します。1 文字でもフル HD ビデオ ファイルでも、内容はその長さにかかわらず 32 桁の 16 進数として表されます。大規模なデータの整合性チェックについては特に有用です。ファイルダウンロードのパフォーマンスをテストし、ダウンロードしたファイルの内容の確認を実行する必要がある場合は、MD5 ハッシュのみのアサーション チェックを実行してメモリ内にメガバイト単位のデータを格納することを回避できます。

 

MD5 チェックサムを計算するためのさまざまなオンライン サービスとアプリケーションがあります。

 

  1. WinMD5Free - Windows 用
  2. md5sum - Linux および Unix 用
  3. md5 - MacOSX 用

 

JMeter Beanshell スクリプト拡張機能を使用して、MD5 16 進数を計算することもできます。以下に、Beanshell コードの例を示します。

 

import org.apache.commons.codec.digest.DigestUtils; // necessary class import

String toMD5 = "blazemeter";   // source data (can be byte array, String or InputStream)

String md5Hex = DigestUtils.md5Hex(toMD5); // calculate MD5 checksum

log.info(md5Hex); // print MD5 checksum to jmeter.log

 

Beanshell が有効なテスト要素から呼ばれるこのコードでは、以下の行が生成されます。

 

INFO  - jmeter.util.BeanShellTestElement: d21529e5b05b406d4c3c5235978f2a18

 

ここで、d21529e5b05b406d4c3c5235978f2a18 は、「blazemeter」文字列の MD5 16 進数です。MD5Hex アサーションは、空の応答には適用できません。空の応答が発生した場合、サンプルが失敗します。以下に、MD5Hex Assertion エラー出力の例を示します。

 

 

HTML アサーション

 

HTML アサーションは、応答 HTML 構文が整形式の HTML/XHTML/XML ドキュメントであることを確認します。このため、Web アプリケーションまたはサイトにゼロ HTML 検証エラーが必要である場合に便利です。最新のブラウザでも無効な HTML ページを表示しますが、検索エンジン ロボットまたはサードパーティの統合には耐性がない場合があります。

 

HTML アサーションに関する公式のドキュメントは、非常に包括的です。アサーション結果ビジュアル化について、レポートは限られた数の警告およびエラーのみ表示します。完全なレポートを表示するには、以下の例で示すように、「Write JTidy report to file」に任意の値を入力し、正確な位置と問題の説明を取得する必要があります。

 

line 6 column 5 - Warning: meta lacks "content" attribute

InputStream: Doctype given is ""

InputStream: Document content looks like HTML 4.01

1 warning, no errors were found!

 

 

XPath アサーション

 

XPath アサーションでは、Web サーバの応答に対して XPath 評価を許可し、指定されたエンティティが存在することや、要素の属性値が期待値と一致することを確認できます。相関に対する XPath の使用方法の詳細については、「Using the XPath Extractor in JMeter (JMeter での XPath エクストラクタの使用)」を参照してください。XPath アサーションの最も適切なユース ケースは、SOAP Web サービス XML 応答をテストすることです。XPath エクストラクタに対する同じニュアンスが、XPath アサーションに適用されます。

 

  1. 応答が XML/XHTML 準拠でない場合は、[Use Tidy]をオンにする必要があります。
  2. 応答が外部 DTD を使用している場合は、関連ボックスをオンにする必要があります。
  3. ネームスペースを使用している場合は、「xpath.namespace.config」プロパティを介して指定する必要があります。

 

操作方法について理解するために、以下に example.com ドメイン上のいくつかのアサーションを示します。


//title/text()='Example Domain'- checks

 

 

 

 

 

 

 

 

count(//a)=2 - checks that there are 2 links () on the page - will FAIL

//meta/@charset='UTF-8' - checks that

 

 

 

 

 

 

 

 

tag  “charset” attribute equals UTF-8 will FAIL

 

XML Schema アサーション


XML Schema アサーションは、XML 応答が指定された特定の XSD スキーマと一致するかどうかを確認します。
BlazeMeter でテストを実行する場合は、テスト スクリプトと共に参照スキーマ ファイルのみを提供します。

 

BSF および JSR223 アサーション

 

BSF アサーションおよび JSR223 アサーションのユース ケースは、Beanshell アサーションと同じです。唯一の違いはパフォーマンスです。JSR223 は、Groovy 言語と組み合わせることにより、ネイティブ Java コードおよび Beanshell とほとんど同じパフォーマンスがもたらされますが、他の言語にはパフォーマンス制約があります。スクリプト アサーション コードが十分に「重い」場合は、JSR223 サンプラおよび Groovy の使用を考慮してください。詳細については、「Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For! (Beanshell、JSR223、Java の JMeter スクリプト記述の比較: 待機しているパフォーマンスオフ)」比較ベンチマークを参照してください。

 

Compare アサーション

 

Compare アサーションは、応答内容を確認するか、またはアサーション スコープ下のすべてのサンプラの応答時間が等しいことを確認します。要求とアサーションは、テスト計画で同じレベルにする必要があります。アサーション パラメータ:

 

アサーション パラメータ:

1. 比較内容 | TRUE|FALSE

  • TRUE の場合、すべての影響を受けるサンプラの内容を確認し、同じであることを確認します。違いがあれば、アサーションが失敗します。
  • FALSE の場合、内容の確認が省略されます。

2. 時間比較 | -1 | 0 | number

  • -1 の場合 - 応答時間の確認が省略されます。
  • 0 の場合 - すべての影響を受けるサンプラの応答時間を確認し、同じであることを確認します。1 ミリ秒でも違いがあれば、アサーションが失敗します。
  • >0 の場合、すべての影響を受けるサンプラの応答時間を確認し、指定された値とは異なっていないことを確認します。しきい値を超過した場合、アサーションは省略されます。


内容と時間の両方の確認が指定されている場合は、時間の確認が優先されます。

 

すでに説明したように、高ロードの場合はこのアサーションの使用を回避してください。多くの CPU と RAM を消費するため、テストに支障をきたし、多くの貴重な時間を無駄にする可能性があります。

 

SMIME アサーション


SMIME アサーションは、Mail Reader Sampler から返される応答を署名するかどうかを確認します。アサーションが署名者証明書を確認するかどうかに関係なく、代替の句(メッセージに署名はありません)を指定することもできます。このアサーションにはサードパーティ ライブラリが必要であるため、JMeter クラスパスには次のライブラリを必ず含めるようにしてください。

  1. bcmail-*.jar
  2. bcprov-*.jar
  3. bcpkix-*.jar

 

これら 3 つの jar は、Bouncy Castle ダウンロード領域からダウンロードする必要があります。Bouncy Castle ライブラリ用の JDK が JMeter の現在の JDK 要件と一致していることを必ず確認してください。Blazemeter を使用している場合は、以下のスクリーンショットに示すように、.jmx スクリプトと共にファイル アップロード領域にファイルをドロップするだけです。

 

 

 

その他のアサーションの場合のように、[Load Report]の[Errors]タブ内に、失敗しているアサーションのすべての情報が表示されます。



 

 

3. アサーションの結果の表示


アサーション結果ビジュアル化


以下に、応答をテストするためのサンプルおよびアサーションはあるが、応答に問題があるかどうかを判断する方法を示します。

GUI モードには、失敗したアサーションを検査できる以下の 2 つの方法があります。
 

  1. [Assertion Results]リスナ。これにより、すべてのアサーションを取得したラベルが表示されます。


 

 

  1. [View Results Tree]リスナ。これにより、テスト計画のすべてのアサーションが表示されます。

 

 

 

注意: この両方は大量のメモリを消費するため、ロード テスト中に使用しないでください。非 GUI での実行によって生成された .jtl ファイルのデバッグまたはこれを開くときにのみ使用する必要があります。非 GUI モードでは、以下のプロパティを使用できます。

 

  1. jmeter.save.saveservice.assertions=true | false
  2. jmeter.save.saveservice.assertion_results_failure_message=true | false
  3. jmeter.save.saveservice.assertion_results= none | first | all

 

コマンド ライン モード

 

 

BlazeMeter

 

失敗したアサーション レポートは、BlazeMeter ロード レポート インターフェースの[Errors]タブで参照してください。

 

 

Response アサーション レポート フィールド

 

以下の 3 つの主なフィールドが記録されます。

  1. Assertion Error (true|false) - これはアサーションが成功したかどうかを示します。たとえば、Beanshell アサーション内の正しくない Beanshell スクリプトなどアサーションに問題がある場合、または Size アサーションに「バイト単位のサイズ」が指定されていない場合、アサーション エラーは true になります。アサーション エラーによって、影響を受けるサンプルが失敗します。

  2. Assertion Failure (true|false) - これは、アサーションが予想と一致したかどうかを示します。実際のアサーション結果が予想される結果と一致する場合は true、そうでない場合は false になります。Assertion Failure = false の場合は、影響を受けるサンプラが失敗したと考慮してください。

  3. Assertion Failure Message (string) - これは、アサーション失敗の詳細を明確にする組み込みメッセージまたはカスタム メッセージです。


詳細情報

 

JMeter を使ったことがなく、詳細を知りたい場合は、無料のオンライン JMeter トレーニング コースにサインアップしてください。

 

JMeter の経験が豊富なユーザは、オンデマンド Web キャスト「How to Create Advanced Load Testing Scenarios with JMeter (JMeter を利用して高度なロード テスト シナリオを作成する方法)」を視聴してください。

 

リソースのすべての JMeter リストを必ず参照してください。

 

最後に、BlazeMeter クラウドのスケール設定とレポート作成で JMeter からより大きな値を取得する方法については、1 対 1 のライブ デモを予約してください。

 

Interested in writing for our Blog?Send us a pitch!

Your email is required to complete the test. If you proceed, your test will be aborted.