json - 从 jmeter 中增加变量的值创建动态请求
问题描述
I have a response from one request as :
**{
"Packages":[
{
"CreatedBy":"Administrator",
"CreatedDate":"\/Date(1535635263383)\/",
"DeviceFamily":6,
"LastVersion":{
"BuildVersion":"1.0",
"Comment":"",
"ExtraSize":0,
"InstallPrompt":false,
"OSVersion":"2.0-10.0",
"Processor":"ALL",
"Size":10465294,
"UploadDate":"\/Date(1535635263520)\/",
"UploadedBy":"Administrator",
"Vendor":"",
"Version":"1.0"
},
"Name":"10MB",
"ReferenceId":"150e6517-f805-4e33-936f-d923657be79a",
"TotalVersions":1
},
{
"CreatedBy":"Administrator",
"CreatedDate":"\/Date(1535635276557)\/",
"DeviceFamily":6,
"LastVersion":{
"BuildVersion":"1.0",
"Comment":"",
"ExtraSize":0,
"InstallPrompt":false,
"OSVersion":"2.0-10.0",
"Processor":"ALL",
"Size":104884390,
"UploadDate":"\/Date(1535635277457)\/",
"UploadedBy":"Administrator",
"Vendor":"",
"Version":"1.0"
},
"Name":"100MB",
"ReferenceId":"02e94794-2e0a-4c20-9d20-5612a9b2378f",
"TotalVersions":1
}
],
"Total":2
}**
上面的 json 包含两个 ReferenceId 、 Name 、 Version 和 Size 的值。这些值需要传递到后续请求中,并以一种在上述变量的值增加到 4,6 或 N 时请求可以修改的方式创建动态请求。
I have to pass values in next request as :
**{
"HasDraftVersion":false,
"IsApprovalPending":null,
"IsInstalledSilently":true,
"LastModified":"/Date(1535570626907)/",
"LastModifiedBy":"Administrator",
"DeviceConfigurations":[
],
"Packages":[
{
"ReferenceId":"b0f3b725-86f9-4bc3-a929-63bfb8e8727c",
"Name":"10MB",
"Version":"1.0",
"PackageDependencies":"",
"Size":10465294
},
{
"ReferenceId":"bb6b3176-0798-4cef-9659-4a119470a4dc",
"Name":"100MB",
"Version":"1.0",
"PackageDependencies":"",
"Size":104884390
}
],
"LdapTargets":null,
"ReferenceId":null,
"DeviceFamily":6,
"DeviceFamilyQualification":0,
"Name":"test",
"Description":"",
"Random":"2018-08-29T15:16:47",
"IsPublicAPI":true
}**
**如何在之前的json中创建一个增加值的动态请求?
我正在尝试使用 Json 路径提取器,但无法创建动态请求。
我也在尝试使用正则表达式提取器。**
解决方案
- 添加JSR223 PreProcessor作为第二个请求的子项
将以下代码放入“脚本”区域:
def previousResponse = new groovy.json.JsonSlurper().parse(ctx.getPreviousResult().getResponseData()) @groovy.transform.Immutable class Package { String ReferenceId String Name String Version Integer Size } def packages = previousResponse.Packages.collect { Package -> new Package(Package.ReferenceId, Package.Name, Package.LastVersion.Version, Package.LastVersion.Size) } def builder = new groovy.json.JsonBuilder() builder(HasDraftVersion: false, IsApprovalPending: null, IsInstalledSilently: true, LastModified: "/Date(1535570626907)/", LastModifiedBy: "Administrator", DeviceConfigurations: [], Packages: packages.collect() { [ ReferenceId : it.ReferenceId, Name : it.Name, Version : it.Version, PackageDependencies: "", Size : it.Size ] }, LdapTargets: null, ReferenceId: null, DeviceFamily: 6, DeviceFamilyQualification: 0, Name: "test", Description: "", Random: "2018-08-29T15:16:47", IsPublicAPI: true) sampler.getArguments().removeAllArguments() sampler.addNonEncodedArgument('',builder.toPrettyString(),'') sampler.setPostBodyRaw(true);
上面的代码会自动从之前的响应中提取所需的值,使用这些值动态构建请求并将其添加到HTTP 请求采样器正文中。
更多信息:
推荐阅读
- php - 对私有示例通道进行身份验证时出错(带 Redis 的 LUMEN 5.8)
- amazon-web-services - 将子网修改为 VPC 终端节点
- sql - 雪花编程问题中的SQL计算问题
- android - 通过在 recyclerview 的布局中设置 Checkox 的可见性“可见性”来关闭 recyclerView 时,应用程序崩溃
- dialogflow-es - 当我们的服务器与对话流交互时,我们需要 webhook 吗?
- text - 完成一个小型代码项目的平均时间是多少?
- python - TensorFlow:将 tf.Dataset 转换为 tf.Tensor
- python - FileNotFoundError: [Errno 2] 尝试使用本地包时没有这样的文件或目录
- sql - 不同类型的子查询
- c# - 如何传递函数
到一个接受 Func 的函数