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

JMeter:为API CRUD测试创建适当的更新调用,api,jmeter,Api,Jmeter,我正在执行基本CRUD功能的API测试。对于记录创建,我需要获取响应,修改字段,并将完整内容保存为文件,以便可以调用我进行更新 以下是创造物发生的情况 创建帖子正文 { "id": 0, "name": "apiTest: Code Rate ${__Random(1,10000000)}", "deletable": false, "codePeriods": null } 创建响应体 { "name": "apiTest: Code Rate 86953

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

以下是创造物发生的情况

创建帖子正文

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

{
  "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"
}
我需要更改“name”字段,以便对记录执行更新

截至目前,我已:

  • 用于提取名称字段值并保存它的正则表达式。(新编码率)
  • 将响应保存到文件以保存整个响应。(newCodeRateFile)
  • 另一个更新记录的HTTP请求,其中:

    正文数据=
    ${uuuu文件到字符串(${uuuu eval(${newCodeRateFile})},,)}

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

我在想也许我需要一个BSF后处理器,其中(使用Javascript):

但我不是一个专业的开发人员,我不知道如何处理这个问题,以及如何将新的名称值保存到保存的可重新调用文件中

  • 我认为在BSF JavaScript中没有
    JSON
    ,它不是
  • 我认为您不需要将响应存储到文件中并读取它,您可以在内存中执行 因此:

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

    ${__Random(1,10000000,randomNumber)}
    
  • 添加为CREATE request的子级,并按如下方式进行配置:

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

    ${__BeanShell(return vars.get("body").replaceAll(vars.get("randomNumber")\,"${__Random(1,10000000)}");,)}
    

  • 有关JMeter函数的更全面信息,请参阅posts系列

    迪米特里,非常感谢你。我不会想到在我的请求主体中使用Beanshell函数。使用你的3个步骤非常有效。我现在正试图熟悉RegEx语法,并查看您的博客文章,以便更好地理解,但是,哇,非常感谢您的帮助!
    ${__BeanShell(return vars.get("body").replaceAll(vars.get("randomNumber")\,"${__Random(1,10000000)}");,)}