JMeter:为API CRUD测试创建适当的UPDATE调用

时间:2016-03-01 16:03:13

标签: api jmeter

我正在执行基本CRUD功能的API测试。对于创建记录,我需要接收响应,修改字段,并将完整的内容保存为文件,以便我可以调用更新。

以下是创作的内容。

创建POST Body

{
    "id": 0,
    "name": "apiTest: Code Rate ${__Random(1,10000000)}",
    "deletable": false,
    "codePeriods": null
}

CREATE RESPONSE Body

{
  "name": "apiTest: Code Rate 869531",
  "id": 1257745140,
  "deletable": true,
  "codePeriods": null,
  "lastChangedDateTime": "03/01/2016 10:13:09",
  "lastChangedTime": 36789410,
  "createdUser": {
    "id": 1003941890,
    "userName": "N9SFBulkUser"
  },
  "lastChangedDate": 736024,
  "lastChangedUser": {
    "id": 1003941890,
    "userName": "N9SFBulkUser"
  },
  "createdDateTime": "03/01/2016 10:13:09"
}

我需要更改“名称”字段才能在记录上执行更新。

截至目前,我有:

  • a RegEx 以提取名称字段值并保存。 (newCodeRate)
  • a 将响应保存到文件以保存整个响应。 (newCodeRateFile)
  • 另一个 HTTP请求更新记录,其中:

    正文数据= ${__fileToString(${__eval(${newCodeRateFile})},,)}

正如您所看到的,现在它只是采用先前的响应,将其保存到文件然后重新发送。这不是一个正确的UPDATE,因为数据库看不到任何变化,只是忽略它。当然,我得到200 OK回复,但由于没有更新,这是误导。您可以这样说,因为创建和更新日期/时间仍然匹配。

我想也许我需要一个BSF PostProcessor(使用Javascript):

var data = prev.getResponseDataAsString();
var object = JSON.parse(data);
vars.put("name", object.name);

但是不是交易开发者,我不知道如何处理这个以及如何将新名称值保存到已保存的可重新调用文件中。

1 个答案:

答案 0 :(得分:1)

  1. 我认为您在BSF JavaScript中没有JSON,它不属于Rhino
  2. 我认为您不需要将响应存储到文件中并读取它,您可以在内存中执行此操作。
  3. 所以:

    1. 更改__Random函数以将生成的值存储到JMeter变量中,如:

      ${__Random(1,10000000,randomNumber)}
      
    2. Regular Expression Extractor添加为CREATE请求的子项,并按如下方式对其进行配置:

      • 参考名称:任何有意义的内容,即body
      • 正则表达式:(?s)(^.*)
      • 模板:$1$
    3. __Beanshell函数添加为UPDATE请求正文,它应如下所示:

      ${__BeanShell(return vars.get("body").replaceAll(vars.get("randomNumber")\,"${__Random(1,10000000)}");,)}
      
    4. 有关JMeter功能的更全面信息,请参阅How to Use JMeter Functions帖子系列。