Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Jmeter中使用Groovy从JSON响应中提取随机值_Json_Groovy_Jmeter_Load Testing - Fatal编程技术网

在Jmeter中使用Groovy从JSON响应中提取随机值

在Jmeter中使用Groovy从JSON响应中提取随机值,json,groovy,jmeter,load-testing,Json,Groovy,Jmeter,Load Testing,我试图将两个变量纬度,经度设置为JSON响应中的随机Lat/Long值。JSON响应包含一个Locations数组,其中包含一个Lat/Long值列表。每次运行此脚本时,我都希望将变量设置为Locations数组中的随机lat/long值。Groovy脚本是一个JSR223后处理器,在POST HTTP请求中嵌套了。下面我将发布一个响应示例和Groovy代码来实现这一点 { "Result": { "Locations": [ { "Latitude":

我试图将两个变量
纬度
经度
设置为JSON响应中的随机Lat/Long值。JSON响应包含一个
Locations
数组,其中包含一个Lat/Long值列表。每次运行此脚本时,我都希望将变量设置为Locations数组中的随机lat/long值。Groovy脚本是一个JSR223后处理器,在POST HTTP请求中嵌套了。下面我将发布一个响应示例和Groovy代码来实现这一点

{
  "Result": {
    "Locations": [
      {
        "Latitude": 38.657,
        "Longitude": -120.377997
      },
      {
        "Latitude": 38.6566,
        "Longitude": -120.3791
      },
      {
        "Latitude": 38.658399,
        "Longitude": -120.3804
      },
      {
        "Latitude": 38.655499,
        "Longitude": -120.38496
      },
      {
        "Latitude": 38.654,
        "Longitude": -120.3819
      },
      {
        "Latitude": 38.6537,
        "Longitude": -120.3897
      },
      {
        "Latitude": 38.6544,
        "Longitude": -120.382604
      },
      {
        "Latitude": 38.655602,
        "Longitude": -122.386402
      }
    ]
  }
}
我使用的Groovy脚本是:

import groovy.json.*

//Parse JSON
def jsonSlurper = new JsonSlurper();
def response = jsonSlurper.parseText(prev.getResponseDataAsString())
def LocationsList = JsonOutput.toJson(response.Result.Locations)

//Get the size of Locations Array and Generate Random Number based on array size
Random random = new Random()
int max = LocationsList.size()
int randomNumber = random.nextInt(max)

//Get Latitude
def GetLatitude (number) {
    return LocationsList[number].Latitude
}
def Latitude = GetLatitude(randomNumber)

//Get Longitude
def GetLongitude (number) {
    return LocationsList[number].Longitude
}
def Longitude = GetLongitude(randomNumber)

//Set the env vars
vars.put("Latitude", Latitude)
vars.put("Longitude", Longitude)
我得到的回复很长,所以我将发布重要部分

     Problem in JSR223 script, CurrentGPS
javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: LocationsList for class: Script18
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-all-2.4.13.jar:2.4.13]
    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.13.jar:2.4.13]
    at javax.script.CompiledScript.eval(CompiledScript.java:92) ~[java.scripting:?]

您的脚本中有几个问题:

  • 位置列表
    获取的值不正确
  • LocationsList
    正在这两种方法中访问,这两种方法不属于范围。您可以使用
    闭包
以下是固定脚本:

def json = new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString())
def locations = json.Result.Locations
def randomNumber = new Random().nextInt(locations.size())
def latitude = locations[randomNumber].Latitude
def longitude = locations[randomNumber].Longitude

您可以快速尝试联机

脚本中有几个问题:

  • 位置列表
    获取的值不正确
  • LocationsList
    正在这两种方法中访问,这两种方法不属于范围。您可以使用
    闭包
以下是固定脚本:

def json = new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString())
def locations = json.Result.Locations
def randomNumber = new Random().nextInt(locations.size())
def latitude = locations[randomNumber].Latitude
def longitude = locations[randomNumber].Longitude

您可以快速尝试联机

,以防JSON路径表达式返回多个匹配项,您可以在不使用任何脚本的情况下随机获得一个匹配项。该组件是可用的,因为如果您提供
0
作为“Match No”,它将从JSON路径表达式匹配的任何内容返回随机值。配置如下所示:

文本表示法:

  • 已创建变量的名称:
    纬度;经度
  • JSON路径表达式:
    $…纬度;$。。经度
  • 匹配号:
    0
  • 默认值:
    NA;不适用

如果JSON路径表达式返回多个匹配项,则无需使用任何脚本即可随机获得一个匹配项。该组件是可用的,因为如果您提供
0
作为“Match No”,它将从JSON路径表达式匹配的任何内容返回随机值。配置如下所示:

文本表示法:

  • 已创建变量的名称:
    纬度;经度
  • JSON路径表达式:
    $…纬度;$。。经度
  • 匹配号:
    0
  • 默认值:
    NA;不适用

谢谢@Rao!这很有魅力。我唯一要做的就是将toString()添加到纬度/经度变量中,使其看起来像这样:def latitude=locations[randomNumber]。latitude.toString()def longitude=locations[randomNumber]。longitude.toString()谢谢@Rao!这很有魅力。我唯一要做的就是将toString()添加到纬度/经度变量中,使其看起来像这样:def latitude=locations[randomNumber]。latitude.toString()def longitude=locations[randomNumber]。longitude.toString()谢谢@Dmitri T!我不知道可以使用JSON提取器将随机值分配给多个变量。这非常有用。谢谢@Dmitri T!我不知道可以使用JSON提取器将随机值分配给多个变量。这是非常有用的。