JMeter数组场景下的响应断言:AWS删除对象结果断言求助
JMeter断言AWS批量删除对象响应的解决办法
优先用JSON断言(最省心)
AWS S3批量删除的响应是JSON格式,别用正则折腾了,直接用JMeter自带的JSON断言:
- 给你的Delete请求添加JSON断言
- 在
JSON Path expressions里填$..Deleted[*].Key,这个路径会把所有已删除对象的Key全提出来 - 勾选
Additionally assert value,选择Matches,把要验证的对象Key用|分隔(比如object1.jpg|object2.txt),就能验证这些Key都在返回列表里 - 要是怕漏,也可以把请求时的对象列表存成变量,用JSON断言的
Contains逻辑匹配
非要用正则的话,修正正则表达式
你之前的正则大概率没匹配到正确的JSON结构:
- 正确的正则要对应响应里的
"Key": "对象名"格式,比如匹配object1.jpg就写"Key":\s*"object1\.jpg" - 记得转义特殊字符,比如对象名里的
.要写成\.,不然会匹配任意字符 - 用Contains断言时,勾选正则的全局匹配(
g标志),或者给每个对象单独加一个断言
复杂验证用JSR223断言(灵活度拉满)
如果要确认请求的对象全被删除(不管顺序),用Groovy写个简单脚本就行:
- 先把请求时传入的对象数组存到JMeter变量里,比如
vars.put("requestObjects", "[\"obj1.jpg\",\"obj2.txt\"]") - 给Delete请求加JSR223断言,贴这段代码:
import groovy.json.JsonSlurper // 解析响应JSON,提取已删除的Key列表 def responseJson = new JsonSlurper().parseText(prev.getResponseDataAsString()) def deletedKeys = responseJson.Deleted*.Key // 解析请求时的对象列表 def requestObjects = new JsonSlurper().parseText(vars.get("requestObjects")) // 检查所有请求的对象都在已删除列表里 def allDeleted = requestObjects.every { it in deletedKeys } if (!allDeleted) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("以下对象未被删除:${requestObjects - deletedKeys}") }
内容的提问来源于stack exchange,提问作者Breno Araripe
相关产品推荐
相关产品推荐

