【问题标题】:JMeter: Passing parameters to an HTTP GET request query string using CSV dataJMeter:使用 CSV 数据将参数传递给 HTTP GET 请求查询字符串
【发布时间】:2015-04-09 21:30:12
【问题描述】:

我对 JMeter 相当陌生,正在创建负载测试。我在 HTTP 采样器中有一个如下所示的 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

如果我通过将硬编码的 epochTime 替换为指向 .csv 文件的参数来修改通过的请求,则会收到以下错误:

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

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

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

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

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

myCalendar/${Birthday} 

任何帮助将不胜感激!

【问题讨论】:

  • 您的 CSV 文件有标题吗?你可以发布每个前几行的样本吗?我刚刚创建了使用 2 个 csv 文件对简单服务器进行测试的测试计划,并且它有效。这是使用 JMeter 文件和示例文件进行的测试 - link
  • 非常感谢,理查德。你帮了我!我的测试失败的原因不是因为与 CSV 文件本身有任何关系(这些文件都没有标题)。我的测试失败了,因为我在 HTTP 请求采样器的路径字段中输入了错误的信息,而我能够看到这一点是因为您向我发送了您的 JMeter 文件。我会用一个完整的解释来回答这个问题,但我希望我有足够的声誉来支持你的评论。感谢您的帮助,感谢您加倍努力!

标签: csv get jmeter httprequest load-testing


【解决方案1】:

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

最初,我的路径是这样的,

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

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

  • 日历名称,${日历名称}
  • 位置,${location}
  • calendarId, ${calendarId}

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

/myCalendar?

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

  • c, ${日历名称}
  • l, ${位置}
  • i、${calendarId 等}

我的所有测试现在都通过了,并按预期遍历了我的多个 .csv 文件。

【讨论】:

  • 有什么方法可以创建一个全局参数?例如,像 api 密钥这样的共享参数。
  • 真的很抱歉,我已经好几年没碰过JMeter了。我希望我能提供帮助,但希望其他人可以。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2015-08-27
  • 2014-06-15
相关资源
最近更新 更多