我正在执行基本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"
}
我需要更改“名称”字段才能在记录上执行更新。
截至目前,我有:
另一个 HTTP请求到更新记录,其中:
正文数据= ${__fileToString(${__eval(${newCodeRateFile})},,)}
正如您所看到的,现在它只是采用先前的响应,将其保存到文件然后重新发送。这不是一个正确的UPDATE,因为数据库看不到任何变化,只是忽略它。当然,我得到200 OK回复,但由于没有更新,这是误导。您可以这样说,因为创建和更新日期/时间仍然匹配。
我想也许我需要一个BSF PostProcessor(使用Javascript):
var data = prev.getResponseDataAsString();
var object = JSON.parse(data);
vars.put("name", object.name);
但是不是交易开发者,我不知道如何处理这个以及如何将新名称值保存到已保存的可重新调用文件中。
答案 0 :(得分:1)
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帖子系列。