2017-09-13 5 views
2

私はJSOn文字列を生成するHTTPサンプラを持っています。私はUserParameter pollOverを更新するために、グルーヴィーJSonSlurperを使用してJSONフラグメントを解析:JMeter JSR223ポストプロセッサがユーザパラメータを更新しない

2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: response = [response:[version:1505333033161, data:138bdb6e-f0e9-48c0-8dd6-5bb14154d816, startTime:1505333033161, endTime:1505333033264, My Service, isError:false, operationIdList:[2ca8719c-152c-4baa-8cfc-8ec1022cdc09], progress: created successfully, rootId:570ef302-89a2-4bc1-bd1a-4d06fba306a0, id:570ef302-89a2-4bc1-bd1a-4d06fba306a0], version:1.0] 
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: isError = false 
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: error = false 
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: data = 138bdb6e-f0e9-48c0-8dd6-5bb14154d816 
2017-09-13 13:03:54,296 INFO o.a.j.e.JSR223PostProcessor: pollOver = true 
:グルーヴィーなポストプロセッサからのログは、それが正しい値を持っていることを示しているが

import groovy.json.JsonSlurper 

def jsonSlurper = new JsonSlurper() 
def response = jsonSlurper.parseText(prev.getResponseDataAsString()) 
def isError = response.response.isError 
def error = isError ? "true":"false" 
def data = response.response.data 
def pollOver = data?.trim() || isError 
log.info("response = " + response) 
log.info("isError = " + isError) 
log.info("error = " + error) 
log.info("data = " + data) 
log.info("pollOver = " + pollOver) 
vars.put("pollOver", pollOver ? "true":"false") 
vars.put("data", data) 
vars.put("error", error) 

は、残念ながら、ユーザーパラメータpollOverは、更新されることはありません

私はユーザー定義変数としてpollOverを定義するとうまくいきます。もちろん、別のスレッドではXが区別される必要があるため、UDVではなくUser Parametersを使用することをお勧めします。

ここに私が行方不明になっている問題がありますか? JSR223 groovyポストプロセッサでvars.put(...)を使用してユーザーパラメータを更新できませんか?

ここ終了UDVによって決定される「pollOver」(pollOverが「サイトパラメータを作成」UDVセクションで定義されている)一方のコントローラである。 [コントローラUDVに応じながら] [3]

はこちらコントローラを終了するためにUDV pollOverを更新後処理: [ここで、画像の説明を入力] [4]

ありがとう、

R

+0

画像の掲載に問題があります。ここで私の言葉の説明は次のとおりです:(単純なコントローラ{(UDV pollOver){(コントローラはpollOverに依存します){(HTTPサンプラ){JSR223 groovyポストプロセッサはpollOverを更新します}}}} postprocessor dipslay pollOverはlogでは正しくpollOver UDVは "false"のままであり、結果としてループは終了しません。 – Maverick

答えて

0

User Parametersは、そのスコープ内にあるサンプラーの前で実行されるプリプロセッサーです。テストプランのスクリーンショットを提供していないので、どのサンプラーに影響するのかはわかりませんが、おそらくサンプラーの前で実行され、変数がストアに格納されている値が消去されます。あなたのユースケースについては

、その範囲はJSR223 PostProcessor

によって計算された値は、参照してください。消去しないようにスレッドグループ内の第1サンプラーの子としてユーザパラメータを定義します。

あなたのコメントから、それは私の答えは、それを修正するには、コントローラの前にテストアクションを追加すると大丈夫だと思われる:

  • ポーズモードとスリープてユーザパラメータ要素内を移動

0にそれだけでpollOverを初期化するために、一度実行されるようにします。

無駄なSampleResultの生成を避けるために、Pause = 0のテストアクションを使用するだけです。デバッグサンプラーも使用できました。

私が説明したように、主な問題は、ユーザーパラメータスコープが大きすぎて、ポストプロセッサが更新した値を上書きするすべての要求に適用されたことです。

+0

最後の編集で説明したように、ポストプロセッサによって更新されたUser Parameter pollOverに依存して終了するコントローラがあります。ユーザパラメータをWhileの子として定義すると、Whileはすぐに終了します(ゲート変数が定義されていないため)。私はこのため、ユーザー・パラメータの下にwhileコントローラを定義しました。 – Maverick

+0

ありがとうございました!なぜ私はそれを行う必要があるのか​​分からないが、0秒の一時停止でテストアクションを使用することについての最後の提案が働いた。あなたが説明できるなら、それはすばらしいことでしょう! – Maverick

+0

私は受け入れました。しかし、私は十分にバッジされていないので、表面上は表示されません。再度、感謝します! – Maverick

関連する問題