fix(接口测试): 修复Json数组无法使用mock数据的问题
--bug=1020800 --user=宋天阳 【接口测试】github#20570,接口场景测试 JSON请求体中 json数组中的mock函数无效 https://www.tapd.cn/55049933/s/1319974
This commit is contained in:
parent
ce55c0acac
commit
9ccb214247
|
@ -16,9 +16,9 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.entity.ContentType;
|
import org.apache.http.entity.ContentType;
|
||||||
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
|
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
|
||||||
import org.apache.jmeter.protocol.http.util.HTTPFileArg;
|
import org.apache.jmeter.protocol.http.util.HTTPFileArg;
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -102,12 +102,20 @@ public class Body {
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
if (StringUtils.isNotEmpty(this.getRaw())) {
|
if (StringUtils.isNotEmpty(this.getRaw())) {
|
||||||
|
if (StringUtils.startsWith(this.getRaw(), "[") && StringUtils.endsWith(this.raw, "]")) {
|
||||||
|
List list = JSON.parseArray(this.getRaw());
|
||||||
|
if (!this.getRaw().contains("$ref")) {
|
||||||
|
jsonMockParse(list);
|
||||||
|
}
|
||||||
|
this.raw = JSONUtil.parser(list.toString());
|
||||||
|
} else {
|
||||||
Map<String, Object> map = JSON.parseObject(this.getRaw(), Map.class);
|
Map<String, Object> map = JSON.parseObject(this.getRaw(), Map.class);
|
||||||
if (!this.getRaw().contains("$ref")) {
|
if (!this.getRaw().contains("$ref")) {
|
||||||
jsonMockParse(map);
|
jsonMockParse(map);
|
||||||
}
|
}
|
||||||
this.raw = JSONUtil.parser(map.toString());
|
this.raw = JSONUtil.parser(map.toString());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LoggerUtil.error("json mock value is abnormal", e);
|
LoggerUtil.error("json mock value is abnormal", e);
|
||||||
}
|
}
|
||||||
|
@ -118,7 +126,9 @@ public class Body {
|
||||||
private void jsonMockParse(Map map) {
|
private void jsonMockParse(Map map) {
|
||||||
for (Object key : map.keySet()) {
|
for (Object key : map.keySet()) {
|
||||||
Object value = map.get(key);
|
Object value = map.get(key);
|
||||||
if (value instanceof JSONObject) {
|
if (value instanceof List) {
|
||||||
|
jsonMockParse((List) value);
|
||||||
|
} else if (value instanceof Map) {
|
||||||
jsonMockParse((Map) value);
|
jsonMockParse((Map) value);
|
||||||
} else if (value instanceof String) {
|
} else if (value instanceof String) {
|
||||||
if (StringUtils.isNotBlank((String) value)) {
|
if (StringUtils.isNotBlank((String) value)) {
|
||||||
|
@ -129,6 +139,28 @@ public class Body {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void jsonMockParse(List list) {
|
||||||
|
|
||||||
|
Map<Integer, String> replaceDataMap = new HashMap<>();
|
||||||
|
for (int index = 0; index < list.size(); index++) {
|
||||||
|
Object obj = list.get(index);
|
||||||
|
if (obj instanceof Map) {
|
||||||
|
jsonMockParse((Map) obj);
|
||||||
|
} else if (obj instanceof String) {
|
||||||
|
if (StringUtils.isNotBlank((String) obj)) {
|
||||||
|
String str = ScriptEngineUtils.buildFunctionCallString((String) obj);
|
||||||
|
replaceDataMap.put(index, str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Map.Entry<Integer, String> entry : replaceDataMap.entrySet()) {
|
||||||
|
int replaceIndex = entry.getKey();
|
||||||
|
String replaceStr = entry.getValue();
|
||||||
|
list.set(replaceIndex, replaceStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private HTTPFileArg[] httpFileArgs(String requestId) {
|
private HTTPFileArg[] httpFileArgs(String requestId) {
|
||||||
List<HTTPFileArg> list = new ArrayList<>();
|
List<HTTPFileArg> list = new ArrayList<>();
|
||||||
if (StringUtils.equalsAnyIgnoreCase(this.type, WWW_FROM, FORM_DATA) && CollectionUtils.isNotEmpty(this.getKvs())) {
|
if (StringUtils.equalsAnyIgnoreCase(this.type, WWW_FROM, FORM_DATA) && CollectionUtils.isNotEmpty(this.getKvs())) {
|
||||||
|
|
|
@ -184,7 +184,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<template v-if="!hidden && pickValue.properties && !isArray(pickValue) && reloadItemOver">
|
<template v-if="!hidden && pickValue.properties && !isArray(pickValue)">
|
||||||
<json-schema-editor
|
<json-schema-editor
|
||||||
v-for="(item, key, index) in pickValue.properties"
|
v-for="(item, key, index) in pickValue.properties"
|
||||||
:value="{ [key]: item }"
|
:value="{ [key]: item }"
|
||||||
|
@ -205,7 +205,7 @@
|
||||||
:need-mock="needMock"
|
:need-mock="needMock"
|
||||||
@reloadItems="reloadItems" />
|
@reloadItems="reloadItems" />
|
||||||
</template>
|
</template>
|
||||||
<template v-if="!hidden && isArray(pickValue) && reloadItemOver">
|
<template v-if="!hidden && isArray(pickValue)">
|
||||||
<json-schema-editor
|
<json-schema-editor
|
||||||
v-for="(item, key, index) in pickValue.items"
|
v-for="(item, key, index) in pickValue.items"
|
||||||
:value="{ [key]: item }"
|
:value="{ [key]: item }"
|
||||||
|
@ -400,7 +400,6 @@ export default {
|
||||||
hidden: false,
|
hidden: false,
|
||||||
countAdd: 1,
|
countAdd: 1,
|
||||||
modalVisible: false,
|
modalVisible: false,
|
||||||
reloadItemOver: true,
|
|
||||||
reloadSelfOver: true,
|
reloadSelfOver: true,
|
||||||
advancedValue: {},
|
advancedValue: {},
|
||||||
addProp: {}, // 自定义属性
|
addProp: {}, // 自定义属性
|
||||||
|
@ -414,7 +413,7 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
if (this.pickValue) {
|
if (this.pickValue) {
|
||||||
if (this.pickValue.hidden === undefined) {
|
if (this.pickValue.hidden === undefined) {
|
||||||
this.hidden = this.root ? false : true;
|
this.hidden = !this.root;
|
||||||
} else {
|
} else {
|
||||||
this.hidden = this.root ? false : this.pickValue.hidden;
|
this.hidden = this.root ? false : this.pickValue.hidden;
|
||||||
}
|
}
|
||||||
|
@ -546,6 +545,7 @@ export default {
|
||||||
node.properties || this.$set(node, 'properties', {});
|
node.properties || this.$set(node, 'properties', {});
|
||||||
const props = node.properties;
|
const props = node.properties;
|
||||||
this.$set(props, name, { type: type, mock: { mock: '' } });
|
this.$set(props, name, { type: type, mock: { mock: '' } });
|
||||||
|
this.reloadItems();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
addCustomNode() {
|
addCustomNode() {
|
||||||
|
@ -609,10 +609,12 @@ export default {
|
||||||
this.$emit('reloadItems');
|
this.$emit('reloadItems');
|
||||||
},
|
},
|
||||||
reloadItems() {
|
reloadItems() {
|
||||||
this.reloadItemOver = false;
|
if (!this.hidden) {
|
||||||
|
this.hidden = !this.hidden;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.reloadItemOver = true;
|
this.hidden = !this.hidden;
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
reloadSelf() {
|
reloadSelf() {
|
||||||
|
|
Loading…
Reference in New Issue