如何在POST方法中从csv文件发送JSON数据?

时间:2013-02-18 14:47:29

标签: json csv jmeter load-testing

在我的项目中,我使用Jmeter进行负载测试 我创建了一个测试计划如下:

  1. 使用csv文件登录应用程序,该文件有10个唯一的用户名和密码(已成功完成)
  2. 正则表达式提取器将从响应中获取会话ID,该响应将在下一个采样器中用于提交请求。 (sessionId已成功提取)
  3. 下一个采样器将提交请求。该采样器接受两个参数:sessionId& licenseRequest。 java脚本的一些细节如下:

    url: "groovy/enqueue",
    type: "POST",
    global: false,
    data: {sessionId: uSessionId, licenseRequest: JSON.stringify(requestJSON) },
    dataType: "text",
    
  4. 为了提交请求,我创建了一个csv文件 csv类似于:

    条目1:
    {"activations":["<activation-code>","<activation-code>"],"email":"<emailIdofUser>","csvEntries":[{"model":"<modelname>","serial":"<serialNo>"}],"comment":"testing jmeter"}

    我发现在第二个采样器中提交请求时,发布请求格式不正确:

    POST data:
    sessionId=vZNjFjW38cid&licenseRequest=%3CEOF%3E
    

    正如您所看到的,licenseRequest的值不正确。它正在发送EOF,这是不可取的。

    enter image description here

1 个答案:

答案 0 :(得分:5)

确保您正确拥有CSV Data Set Recycle on EOFStop Thread on EOF值:

  • 如果您计划多次迭代文件,则必须设置Recycle on EOF = True(即指示jmeter移回CSV文件的顶部);
  • 如果您使用的是循环控制器,则设置Stop Thread on EOF = False Stop Thread on EOF = True如果您使用的是while控制器,并希望在读取整个csv数据集后停止;
  • 如果你需要N个线程中的每一个读取并使用来自csv-file的单个和唯一的行,你必须为CSV数据集配置设置Sharing mode: Current thread group(在这种情况下,csv-entries的数量应该是与线程编号相同,否则应设置Recycle on EOF? False;;
  • 如果您需要N个线程中的每个线程读取并使用csv文件中的所有行,则必须为CSV数据集配置设置Sharing mode: Current thread

不要忘记查看jmeter.log或使用Log Viewer来检测csv使用的任何问题。


最简单的情况如下:


Test Group
Number of Threads = 10
    CSV Data Set Config (User Logins)
    Filename: ... (your csv-file should have 10 entries)
    Recycle on EOF = False
    Stop Thread on EOF = True
    Sharing Mode = All threads
    CSV Data Set Config (License Request)
    Filename: ... (your csv-file should have 10 entries)
    Recycle on EOF = False
    Stop Thread on EOF = True
    Sharing Mode = All threads
    Login Sampler
    License request Sampler

这将产生10个线程,每个线程都有来自csv的单独登录条目和许可证请求条目。