fix: json的请求体mockjs报错问题

This commit is contained in:
chenjianxing 2021-04-29 18:24:34 +08:00 committed by jianxing
parent 6bdb0e7386
commit 2e61cd1e88
2 changed files with 28 additions and 16 deletions

View File

@ -278,6 +278,9 @@ public class MsHTTPSamplerProxy extends MsTestElement {
if (StringUtils.isNotEmpty(this.getPort()) && this.getPort().startsWith("${")) {
url.replaceAll(this.getPort(), "10990");
}
if (url == null) {
MSException.throwException("请填写请求地址");
}
URL urlObject = new URL(url);
sampler.setDomain(URLDecoder.decode(urlObject.getHost(), "UTF-8"));
if (urlObject.getPort() > 0 && urlObject.getPort() == 10990 && StringUtils.isNotEmpty(this.getPort()) && this.getPort().startsWith("${")) {
@ -298,7 +301,7 @@ public class MsHTTPSamplerProxy extends MsTestElement {
}
}
} catch (Exception e) {
LogUtil.error(e);
LogUtil.error(e.getMessage(), e);
MSException.throwException(e.getMessage());
}
// 请求体

View File

@ -1,11 +1,9 @@
package io.metersphere.api.dto.scenario;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import io.metersphere.api.dto.scenario.request.BodyFile;
import io.metersphere.commons.json.JSONSchemaGenerator;
import io.metersphere.commons.utils.FileUtils;
import io.metersphere.commons.utils.LogUtil;
import io.metersphere.commons.utils.ScriptEngineUtils;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
@ -70,17 +68,7 @@ public class Body {
sampler.setDoMultipart(true);
}
} else {
if (StringUtils.isNotEmpty(this.format) && this.getJsonSchema() != null) {
if("JSON-SCHEMA".equals(this.format)) {
this.raw = JSONSchemaGenerator.getJson(com.alibaba.fastjson.JSON.toJSONString(this.getJsonSchema()));
} else { // json 文本也支持 mock 参数
JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(this.getRaw());
jsonMockParse(jsonObject);
// 格式化 json
Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
this.raw = gson.toJson(jsonObject);
}
}
parseJonBodyMock();
KeyValue keyValue = new KeyValue("", "JSON-SCHEMA", this.getRaw(), true, true);
sampler.setPostBodyRaw(true);
keyValue.setEnable(true);
@ -90,13 +78,34 @@ public class Body {
return body;
}
private void parseJonBodyMock() {
try {
// if (StringUtils.isNotBlank(this.format) && "JSON-SCHEMA".equals(this.format) ) {
// if(this.getJsonSchema() != null) {
// JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(this.getJsonSchema()));
// jsonMockParse(jsonObject);
// this.setJsonSchema(jsonObject);
// }
// } else
if (StringUtils.isNotBlank(this.type) && StringUtils.equals(this.type, "JSON")) { // json 文本也支持 mock 参数
JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(this.getRaw());
jsonMockParse(jsonObject);
this.raw = JSONObject.toJSONString(jsonObject);
}
} catch (Exception e) {
LogUtil.error(e.getMessage(), e);
}
}
private void jsonMockParse(JSONObject jsonObject) {
for(String key : jsonObject.keySet()) {
Object value = jsonObject.get(key);
if(value instanceof JSONObject) {
jsonMockParse((JSONObject) value);
} else if(value instanceof String) {
value = ScriptEngineUtils.calculate((String) value);
if (StringUtils.isNotBlank((String) value)) {
value = ScriptEngineUtils.calculate((String) value);
}
jsonObject.put(key, value);
}
}