スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JMeterのアサーション

今までよく知らなかったんだけど仕事で使うことになったので急遽調べることに
そもそもこの機能って何のためにあるんだろうってところから調べ始めた。

ユーザーマニュアルにはアサーションはサーバーから受信した応答を本質的に「テスト」するためのもの
といった感じの記述がある。

まぁ、今自分がテストしているWebのアプリケーションでいうと、
HTTPのレスポンスコードは200なんだけど、ちゃんと画面って思い通りに遷移してるんだよね?
っていうのを厳密にチェックするための機能といった感じの理解になる。

実際に利用する場面を見てみよう。
たとえばこんな簡単なHTMLを書いてWebサーバーに「sample.html」として置く。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">

<title>Insert title here</title>

</head>

<body>

<form action="sample.html" id="form1">

</form>

</body>

んで、JMeter側で以下のようなHTTPサンプラーを用意して
httpsampler_assertion.png

パスがEvernoteAPIのテストっぽいのはご愛嬌(゚ω゚ )
さらにその子として以下のようなアサーションをぶら下げる。
assertion.png

Apply to:

 Main sample and sub-samples
テストするレスポンスフィールド:
 テキストのレスポンス
パターンマッチングルール
 含む
テストパターン
 <form action="(.*?)" id="(.*?)">


テストパターンにはPerl互換の正規表現が使える模様。
上記の条件に合致した場合にはこのアサーションをぶら下げたサンプラーが成功し、
上記の条件に合致しなかった場合には同サンプラーが失敗する。

たとえば、そのままこのサンプラーを実行した場合にはちゃんと成功するけど
HTMLのformタグのid属性を消して実行すると正規表現のテストパターンに合致しなくなるので
このサンプラーは「失敗」する。
failed.png
こんな感じ。


もともと「アサーション」という言葉をキチンと理解せず、
さらにこの部分をよく理解しておらず、加えてうっかり否定とか使い出したもんだから
やってて何がなんだかわからなくなってしまっていた。
※今回の目的はこんがらがった頭を整理するためのポストだったりします。

ちなみにアサーションとは以下のようなもの。

プログラミング言語などの仕様・機能の一つで、プログラムの前提として満たされるべき条件を記述し、
実行時にそれが満たされていない場合にエラーや例外を発生させたり、メッセージを表示して
処理を中断したりする機能。プログラム中のバグや不具合、論理の矛盾を発見するのに使われる

引用:
http://e-words.jp/w/E382A2E382B5E383BCE382B7E383A7E383B3.html


ちなみに、エラーを検知したら後続の処理に流さないって言うのが正しいやり方なんだろうけど
そのあたりはおそらくスレッドグループのお仕事なので今度調査する。

最近はこんなお仕事ばっか。( ・ω・)

続きを読む

スポンサーサイト

テーマ : 役立つツール
ジャンル : コンピュータ

JMeterの正規表現抽出

今までお仕事でこういう込み入ったところまで使ったことがなく、
実際に動かすまでに大分時間がかかったのでメモしておく。

正規表現抽出機能
この機能は自分の理解した範囲で言うと、JMeterのHTTPサンプラーの
リクエスト?URL、ヘッダ情報、応答データ、応答メッセージから
正規表現にてデータを抽出し、JMeterの変数に格納するという機能みたい。

主な使いどころとしては
ユーザーごと、画面遷移ごとに動的なパラメータを生成し、次の画面に引き渡すような場合。
こういった場合、正規表現で動的なパラメータ部分を抽出し、JMeterの変数にセットしてあげて
次のサンプラーでその変数を参照してやるって感じになるかと思う。

実際の設定画面
RegularExpression.png


各種設定欄には以下のような値を設定する。
  1. Apply to:
    未調査
  2. Response Field check
    レスポンスのHTMLから抽出したい場合にはBody、LocationヘッダのURLから
    抽出したい場合などはHeader、リクエストURLから抽出したい場合はURLくらいの理解。
    突っ込んだところまでは未調査。
  3. 参照名
    正規表現で抽出した文字列を格納する変数名。以降のサンプラーとかで${参照名}のような形で参照できる。
  4. 正規表現
    マッチさせたい正規表現の式を記述する。
  5. テンプレート
    $1$とか$2$とかを記述する。JMeterのヘルプによるとここには正規表現で記述した
    何番目のグループ(()でくくった文字列)をとってくるかを記述する模様。ちなみに$0$を設定すると
    正規表現に記述した式にマッチした文字列全体が取れてくるみたい。
  6. 一致番号
    正規表現に記述した式に複数マッチする場合に何番目を取得したいか。(グループではないことに注意。)
  7. 初期値
    正規表現の欄に記述した式にマッチしなかった場合、参照名に設定した変数に設定される値。
    引っかからなかったら特定の値にしておきたい場合(アサーションやIFコントローラでマッチさせたい時とか)
    に設定する。
と、いろいろ説明したところでわからないので実際に使ってみる。
たとえばこのブログのトップ、右側の月別アーカイブの欄。
実際のHTMLとしては、以下のようになっている。

<dl class="sidemenu_body">

<dt class="plg_title" style="text-align:left">月別アーカイブ</dt>

<dd class="plg_body" style="text-align:left"><ul>

<li style="text-align:left">

<a href="http://ramblog.blog129.fc2.com/blog-date-201109.html" title="2011/09">2011/09 (6)</a>

</li><li style="text-align:left">

<a href="http://ramblog.blog129.fc2.com/blog-date-201004.html" title="2010/04">2010/04 (2)</a>

</li><li style="text-align:left">

<a href="http://ramblog.blog129.fc2.com/blog-date-201003.html" title="2010/03">2010/03 (7)</a>

</li><li style="text-align:left">

<a href="http://ramblog.blog129.fc2.com/blog-date-201002.html" title="2010/02">2010/02 (3)</a>

</li></ul></dd>

これらのリンクをためしに正規表現抽出してみることにする。
ブログトップにアクセスするサンプラーを作って・・・
HTTPSampler.png

そのサンプラーに正規表現抽出をぶらさげ、以下のように設定し、さらに後続に変数確認用にDebugSamplerを並べる。
RegularExpression.png

参照名:regex
正規表現:

<a href="http://ramblog.blog129.fc2.com/blog-date-([0-9]{6}).html" title="(.*?)">(.*?)</a>

テンプレート:$0$
一致番号:-1

ここで、一致番号に-1と記述してやるのがミソ。
そうすることによって、変数に以下のように設定される。
DebugSampler.png

一致番号が0とかだとregex_1_???とかひとつしかとってこれない。
単純なものであればそれでよいが、ちょっと複雑な、しかも複数マッチするような場合には
この指定方法は重宝する・・・はず(゚ω゚ )

ルールとしてはこんな感じになっているみたい。

regex(参照名)_n(何番目にヒットした文字列)_gn(何番目のグループか)

このあたりは「JMeterのヘルプ」が詳しい。自分はユーザーマニュアル内では見つけられなかった。
2010年2月のリンク文字列は${regex_4_g0}、
2010年3月のリンク文字列は${regex_3_g0}、
2010年4月のリンク文字列は${regex_2_g0}、
2011年9月のリンク文字列は${regex_1_g0}
といった感じでとってこれ、後続のサンプラーとかで参照できる。

まだ未調査の部分が残っているのでそのあたりは後日追記していく。

テーマ : 便利ツール
ジャンル : コンピュータ

プロフィール

ラム君(モヒカンVer)

Author:ラム君(モヒカンVer)
都内でプログラマのようなものをやっています。
まだまだ初心者ですがよろしくお願いします。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。