首页 文章

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

提问于
浏览
1

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

以下是创建的内容 .

创建POST Body

{
    "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"字段才能对记录执行UPDATE .

截至目前,我有:

  • 一个RegEx来提取名称字段值并保存它 . (newCodeRate)

  • a保存对文件的响应以保存整个响应 . (newCodeRateFile)

  • 另一个HTTP请求 update 记录在哪里:

身体数据= ${__fileToString(${__eval(${newCodeRateFile})},,)}

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

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

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

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

1 回答

  • 1
    • 我认为你在BSF JavaScript中没有 JSON ,它不是Rhino的一部分

    • 我认为您不需要将响应存储到文件中并读取它,您可以在内存中执行此操作 .

    所以:

    • 更改__Random函数以将生成的值存储到JMeter变量中,如:
    ${__Random(1,10000000,randomNumber)}
    
    • Regular Expression Extractor添加为CREATE请求的子项,并按如下方式对其进行配置:

    • 参考名称:任何有意义的东西,即 body

    • 正则表达式: (?s)(^.*)

    • 模板: $1$

    • 添加__Beanshell函数作为UPDATE请求体,它应该如下所示:

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

    有关JMeter函数的更全面信息,请参阅How to Use JMeter Functions posts系列 .

相关问题