JMeter - 如何在一个帖子请求中使用csv文件中的几组变量?

时间:2018-04-03 13:37:40

标签: csv jmeter http-post

是否可以使用csv文件中的1000组lat,lon运行请求。 这应该在一个POST请求中。 请求如下所示:

{
  "data": [
    {
      "id": "1",
      "lat": ${random_lat},
      "lon": ${random_lon}
    },
    {
      "id": "2",
      "lat": ${random_lat},
      "lon": ${random_lon}
    },
    {
      "id": "3",
      "lat": ${random_lat},
      "lon": ${random_lon}
    }
    ...
  ]
}

csv文件如下所示:

51.3054489472673,-117.2031134800404
54.5883543433925,-98.0338493138702
58.2433547520569,-115.0488099947172
50.3905178887011,-138.4806899125170
41.8205185112055,-115.7196913326360
55.5866340199235,-95.6419879448747

请求应如下所示:

{
  "data": [
    {
      "id": "1",
      "lat": 51.3054489472673,
      "lon": -117.2031134800404
    },
    {
      "id": "2",
      "lat": 54.5883543433925,
      "lon": -98.0338493138702
    },
    {
      "id": "3",
      "lat": 58.2433547520569,
      "lon": -115.0488099947172
    }
    ...
  ]
}

我得到了这个但是所有的lat,lon都是来自csv文件的第一行。

4 个答案:

答案 0 :(得分:0)

听起来像是Random CSV Data Set Config

的理想用例
  1. 如果您的JMeter中没有随机CSV数据集配置,您可以使用JMeter Plugins Manager
  2. 进行安装
  3. 放置随机CSV数据集配置并进行配置,其方式与“普通”CSV数据集配置的方式非常相似

    JMeter Random CSV Data Set Config

    确保勾选Random order

  4. 就是这样,您现在可以在线程组中的任何位置使用引用变量名称,它们将包含CSV数据中的随机单元格

    Random CSV Data Set Config in action

答案 1 :(得分:0)

你可以用我能想到的多种方式来做到这一点。

1-将多个csv用于输入变量。

2 - 使用单个csv作为输入变量。

3-使用随机csv数据集配置或jp @ gc - 来自csv的变量。

所以,计划将是...... 线程组> CSV数据集配置> HTTP请求>查看结果树

我正在显示选项2,单个csv,放置变量如下所示: -

random_lat1,random_lon1,random_lat2,random_lon2,random_lat3,random_lon3

51.30544895,-117.2031135,58.24335475,-115.04881,41.82051851,-115.7196913

...

.......

因此,首次运行将获得多个变量的单个请求中的所有值。

Multiple Values in Single Request

如果你想在csv中垂直寻找变量设定值,那么选择选项3并使用jp@gc - Variables from CSV files

但这需要相应地改变json,如下所示: -

{       " id":" 1",       " lat":$ {random_lat 1 },       " lon":$ {random_lon 1 }     }  {       " id":" 2",       " lat":$ {random_lat 2 },       " lon":$ {random_lon 2 }     } ....

希望它可以帮助您完成您的方案。

答案 2 :(得分:0)

问题:您需要提取' lat' &安培; ' LON' CSV文件中包含lan&的值lon由line分隔并使用所有lat&在单一请求中。

<强>解决方案: 有不同的方法来实现这种情况。但最可靠和最简单的方法是使用贝壳采样器&#39; JMeter的元素:

  • 在线程组中添加Beanshell采样器作为第一个请求,并添加以下代码:enter image description here

String path =&#34; C:/Users/ravsharma/Desktop/ABC1.csv" ;;

文件文件=新文件(路径);

BufferedReader bufRdr = new BufferedReader(new FileReader(file));

String line = null;

整数i = 1;

while((line = bufRdr.readLine())!= null){

的System.out.println(线);

String [] lat_lon = line.split(&#34;,&#34;);

vars.put(&#34; random_lat&#34; + i,lat_lon [0]);

vars.put(&#34; random_lon&#34; + i,lat_lon 1);

我++;

}

bufRdr.close();

  • 此代码将获取lat&amp;来自你的csv文件。
  • 您可以在POST请求中进一步将这些变量用作$ {random_lat1},$ {random_lon1},$ {random_lat2},$ {random_lon2} ....

以下是Optimize Your JMeter Test Plan

的一些提示

答案 3 :(得分:0)

@Ravi Sharma - 我仍然不知道如何在JMeter中做到这一点。所以我编写了python脚本来生成它,然后我手动将输出粘贴到body数据。谢谢你们的帮助。

filename = "C:/Users/r/data/file_to_save.csv"

range1 = 1000
i = 0
with open(filename, 'a') as ff:
    while True:
        i += 1
        if i < range1:
            text="    {\n\
        \"entity_id\": \"%i\",\n\
        \"lat\": ${random_lat%i},\n\
        \"lon\": ${random_lon%i}\n\
    },\n" % (i, i, i)
        else:
            break
        ff.write(text)
ff.close()