JMeter:使用CSV数据将参数传递给HTTP GET请求查询字符串

时间:2015-02-09 23:48:18

标签: csv get jmeter httprequest load-testing

我是JMeter的新手,正在创建一个负载测试。我在HTTP Sampler中有一个GET请求,如下所示:

/myCalendar?c={calendarName}&l={location}&i={calendarId}&loc={locationId}&s={calendarEvent}&a={eventId}&t={epochTime}

大括号中显示的名称是我的参数的名称。这些参数中的每一个都有自己的.csv文件,因此它有自己的CSV数据集配置元素。这些参数中的每一个也都链接到HTTP采样器的“在请求中发送参数”字段中各自的CSV文件。

我的测试失败,但我可以通过点击结果树中的失败测试指示器来判断所有参数是否从我的.csv文件返回正确的值。但是,我注意到如果我只将一些值硬编码到查询字符串中,测试将在某些情况下通过。

例如,这失败了......

/myCalendar?c=calendarName&l=location&i=calendarId&loc=locationId&s=calendarEvent&a=eventId&t=epochTime

......但是这传递了:

/myCalendar?c=calendarName&l=BMJErIH4Mku4HwdHyuX2XA&i=84Rza73ERUmRGb99NWZytw&loc=locationId&s=calendarEvent&a=odH1gBRnH0moh5YN4tgczw&t=157963549

如果我通过用指向.csv文件的参数替换硬编码的epochTime来修改传递的请求,则会出现以下错误:

  

服务器在处理请求时遇到错误。例外   消息是'值不能为空。参数名称:edate

如果我将epochTime恢复为其硬编码值并将其他三个硬编码值替换为其相关参数,则会出现以下错误:

  

服务器在处理请求时遇到错误。例外   消息是'bad base64转换为GUID

我意识到这可能完全是一个不同的问题,但是这些值在硬编码到查询字符串时确实有效,所以我不明白为什么如果从.csv文件中提取它们就无法工作。

最后,值得注意的是,我确实有单参数测试用例,它使用以下语法,其中'Birthday'是用户定义的变量,如下所示。我发现在具有多个变量的查询字符串中使用此语法会在第一个“{”字符处引发异常。

myCalendar/${Birthday} 

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

我的测试失败的原因仅仅是因为我在HTTP请求采样器的Path字段中输入了错误的信息。

最初,我的路径看起来像这样,

/myCalendar?c=calendarName&l=location&i=calendarId&loc=locationId&s=calendarEvent&a=eventId&t=epochTime

和“使用请求发送参数”字段中的参数名称/值对是:

  • calendarName,$ {calendarName}
  • location,$ {location}
  • calendarId,$ {calendarId}

我从我的问题下面的评论中了解到,查询字符串不应包含在路径字段中,因此问号后面的所有内容都应在“使用请求发送参数”字段中处理。所以路径应该是这样的:

/myCalendar?

名称/值对中的名称应该使用每个等号之前存在的变量,如下所示:

  • c,$ {calendarName}
  • l,$ {location}
  • i,$ {calendarId,etc。}

我的所有测试现在都在传递,并按预期迭代我的多个.csv文件。