2017-09-13 236 views
2

我有一個HTTP採樣器,產生JSOn字符串。我使用Groovy JSonSlurper更新用戶參數pollOver解析JSON片段:JMeter JSR223後處理程序不更新用戶參數

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從不更新,雖然記錄從常規後處理表明它具有正確的價值:

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 

如果我將pollOver定義爲用戶定義的變量,它可以正常工作。當然,我需要X對於不同的線程是不同的,因此更喜歡使用用戶參數而不是UDV。

這裏有個遺漏,我錯過了嗎?我能否在JSR223常規後處理器中使用vars.put(...)更新用戶參數?

這裏是雖然控制器,其終止通過UDV「pollOver」確定(pollOver在UDV部分被定義爲「創建網站參數」): [雖然控制器根據UDV] [3]

這裏是後處理器,更新UDV pollOver使控制器終止: [此處輸入圖像的描述] [4]

感謝名單,

ř

+0

我無法發佈圖像。這裏是我的口頭描述:(簡單控制器{(UDV pollOver){(雖然控制器取決於pollOver){(HTTP採樣器){JSR223 groovy後處理器來更新pollOver)}}}。後處理程序在日誌中正常輪詢pollOver,但pollOver UDV仍然爲「false」,從而導致循環從不終止。 – Maverick

回答

0

User Parameters是在其範圍內的採樣器之前運行的預處理器。由於您沒有提供測試計劃的屏幕截圖,因此我無法確定它會影響哪種採樣器,但很可能它會在採樣器之前運行並刪除變量中商店的價值。

爲您的使用情況下,定義用戶參數作爲第一採樣的線程組一個孩子,這樣它的範圍並不刪除被JSR223 PostProcessor

見計算值:

從您的評論,似乎我的回答是好的,要解決它,添加之前,而控制器測試行動:

  • 暫停模式和睡眠0

移動它裏面的用戶參數元件,使得它僅運行一次初始化pollOver。

我只是使用暫停= 0的測試操作來避免生成無用的SampleResult。我也可以使用調試採樣器。

您遇到的主要問題是,我解釋過您的用戶參數範圍太大,因此它適用於覆蓋您的後處理器更新值的所有請求。

+0

正如我在上次編輯中所述,我有一個時間控制器,其終止取決於後處理器更新的用戶參數pollOver。如果我將用戶參數定義爲While的子項,則立即終止(因爲未定義門控變量)。因此,我在用戶參數下面定義了while控制器。 – Maverick

+0

謝謝!你最後一次關於使用0秒停頓的測試動作的建議奏效,儘管我不明白爲什麼我需要這樣做。如果你能解釋,那將是美好的! – Maverick

+0

我接受。但我的upvote表面上不會顯示,因爲我沒有足夠的徽章。再次感謝! – Maverick

相關問題