

Webアプリの負荷テストをするために、JMeterでテスト計画を作っているのですが、
WebアプリのPOSTデータでUUIDをランダムにPOSTする必要があるため、BSF
PreProcessorでUUIDをランダム生成し、POSTの中で使おうとしています。

複数回のHTTPリクエストで同じUUIDを使ってPOSTしてほしいのですが、なぜかPreProcessorが何度も実行されているようで、UUIDがHTTPリクエスト毎に変わってしまう問題にぶち当たりました。

テスト計画の構成は

[code]

    スレッドグループ
    －Pre Processor（この中でJavaScriptを使ってUUIDをランダム生成しvars.putでパラメータ化。パラメータ名は連番を与える）
    －ユーザーパラメータ（ユーザー毎の値を設定。authkeyなど）
    －HTTPリクエスト（JSONをPOST。ここで連番のパラメータ名のUUIDを使う。）
    －ループコントローラ
    －－HTTPリクエスト（上記のPOSTに関連したJSONをPOST。この際に同じUUIDを使う。ループのカウントで連番のパラメータ名を指定）
    
[/code]

です。 ループ内のUUIDが変わってしまうため、POSTデータの関連性が失われてWebアプリのテストが正常に行えないのです。

UUIDを最初のリクエストで全部投げて、以降のループでUUID毎に１つずつ詳細内容をPOSTするため、パラメータ名は連番です。（例：UUID1,
UUID2....） なのでユーザーパラメータで${__UUID()}を使って羅列するのは非常に厳しいです。

ググってみても、Pre Processorの挙動について書かれた記事が見当たりません。 どなたか解決策を知っている方、教えてください。
よろしくお願いします。


CC BY-SA 3.0
2015-01-06T08:15:43.027
3178
2015-01-07T04:20:43.847
2015-01-06T08:37:53.023
3709
3709
question
javascript java
JMeterのBSF PreProcessorの挙動について


BSF PreProcessorをBSF Samplerに変えたらどうでしょうか？


CC BY-SA 3.0
2015-01-06T21:42:38.137
3219
2015-01-06T21:42:38.137
2325
3178
answer


ドキュメントとしては、[4.7 Pre-Processor
Elements](http://jmeter.apache.org/usermanual/test_plan.html#preprocessors)からリンクされている、[4.10
Scoping
Rules](http://jmeter.apache.org/usermanual/test_plan.html#scoping_rules)に以下のようにあります。

  * JMeterのテスト計画を構成する要素は、 主に ordered (順列的) (controller と sampler) であると考えられるものと、 hierarchical (階層的) (それ以外) なものに分類できる

> Some elements in the test trees are strictly hierarchical (Listeners, Config
> Elements, Post-Procesors, Pre-Processors, Assertions, Timers), and some are
> primarily ordered (controllers, samplers).

    * Pre-Processorは、種別としては hierarchical である
  * hierarchical な要素は、その親要素に属するすべてのリクエストに適用される

> If its parent is a Controller, then it affects all requests that are
> descendants of that Controller.

  * 各リクエストを処理する時には、テスト計画のツリーを自分の位置から根っこまで親から親へと辿っていき、訪問した要素に属する configuration (hierarchical) 要素を集めて適用する、と考えると分かりやすい

> imagine each Request being passed up the tree branches, to its parent, then
> to its parent's parent, etc, and each time collecting all the configuration
> elements of that parent

このセクションにテスト計画の例があるほか、[4.9 Execution
Order](http://jmeter.apache.org/usermanual/test_plan.html#executionorder)にも実行順の例があります:

以下のテスト計画があったとすると

  * Controller 
    * Post-Processor 1
    * Sampler 1
    * Sampler 2
    * Timer 1
    * Assertion 1
    * Pre-Processor 1
    * Timer 2
    * Post-Processor 2

以下のように実行される:

[code]

    Pre-Processor 1
    Timer 1
    Timer 2
    Sampler 1
    Post-Processor 1
    Post-Processor 2
    Assertion 1
    
    Pre-Processor 1
    Timer 1
    Timer 2
    Sampler 2
    Post-Processor 1
    Post-Processor 2
    Assertion 1
    
[/code]


CC BY-SA 3.0
2015-01-07T04:20:43.847
4226
2015-01-07T04:20:43.847
30
3178
answer