parent
988c31be43
commit
30c5fe20c8
|
@ -134,7 +134,7 @@ public class EsbDataStruct {
|
||||||
element.addText(this.value);
|
element.addText(this.value);
|
||||||
} else {
|
} else {
|
||||||
for (EsbDataStruct child : children) {
|
for (EsbDataStruct child : children) {
|
||||||
child.genXmlElementByChildren(document);
|
child.genXmlElementByChildren(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,13 @@ import io.metersphere.api.dto.automation.EsbDataStruct;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.dom4j.Document;
|
import org.dom4j.Document;
|
||||||
import org.dom4j.DocumentHelper;
|
import org.dom4j.DocumentHelper;
|
||||||
|
import org.dom4j.io.OutputFormat;
|
||||||
|
import org.dom4j.io.XMLWriter;
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringWriter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,12 +34,37 @@ public class EsbDataParser {
|
||||||
if (dataStruct != null) {
|
if (dataStruct != null) {
|
||||||
dataStruct.genXmlElementByDocument(document);
|
dataStruct.genXmlElementByDocument(document);
|
||||||
xmlString = document.getRootElement().asXML();
|
xmlString = document.getRootElement().asXML();
|
||||||
|
|
||||||
|
// 设置XML文档格式
|
||||||
|
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
|
||||||
|
// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1
|
||||||
|
outputFormat.setEncoding("UTF-8");
|
||||||
|
//outputFormat.setSuppressDeclaration(true); //是否生产xml头
|
||||||
|
outputFormat.setIndent(true); //设置是否缩进
|
||||||
|
outputFormat.setNewlines(true); //设置是否换行
|
||||||
|
|
||||||
|
try {
|
||||||
|
// stringWriter字符串是用来保存XML文档的
|
||||||
|
StringWriter stringWriter = new StringWriter();
|
||||||
|
// xmlWriter是用来把XML文档写入字符串的(工具)
|
||||||
|
XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat);
|
||||||
|
// 把创建好的XML文档写入字符串
|
||||||
|
xmlWriter.write(document);
|
||||||
|
|
||||||
|
// 打印字符串,即是XML文档
|
||||||
|
xmlString = stringWriter.toString();
|
||||||
|
xmlWriter.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
if (StringUtils.isEmpty(xmlString)) {
|
if (StringUtils.isEmpty(xmlString)) {
|
||||||
xmlString = "";
|
xmlString = "";
|
||||||
|
} else {
|
||||||
|
xmlString = xmlString.replaceAll(" ", "");
|
||||||
}
|
}
|
||||||
return xmlString;
|
return xmlString;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,13 @@ import io.metersphere.api.dto.definition.parse.esb.EsbExcelDataStruct;
|
||||||
import io.metersphere.api.dto.definition.parse.esb.EsbSheetDataStruct;
|
import io.metersphere.api.dto.definition.parse.esb.EsbSheetDataStruct;
|
||||||
import io.metersphere.api.dto.definition.request.processors.pre.MsJSR223PreProcessor;
|
import io.metersphere.api.dto.definition.request.processors.pre.MsJSR223PreProcessor;
|
||||||
import io.metersphere.api.dto.definition.request.sampler.MsTCPSampler;
|
import io.metersphere.api.dto.definition.request.sampler.MsTCPSampler;
|
||||||
|
import io.metersphere.api.dto.scenario.KeyValue;
|
||||||
import io.metersphere.api.dto.scenario.request.RequestType;
|
import io.metersphere.api.dto.scenario.request.RequestType;
|
||||||
|
import io.metersphere.api.service.EsbApiParamService;
|
||||||
import io.metersphere.base.domain.ApiDefinitionWithBLOBs;
|
import io.metersphere.base.domain.ApiDefinitionWithBLOBs;
|
||||||
import io.metersphere.base.domain.ApiModule;
|
import io.metersphere.base.domain.ApiModule;
|
||||||
import io.metersphere.base.domain.EsbApiParamsWithBLOBs;
|
import io.metersphere.base.domain.EsbApiParamsWithBLOBs;
|
||||||
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
import io.metersphere.commons.utils.SessionUtils;
|
import io.metersphere.commons.utils.SessionUtils;
|
||||||
import io.swagger.models.Model;
|
import io.swagger.models.Model;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -599,6 +602,10 @@ public class ESBParser extends EsbAbstractParser {
|
||||||
savedNames.add(reqName);
|
savedNames.add(reqName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String esbSendRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n${SERVICE}";
|
||||||
|
String reqDataStructStr = generateDataStrcut(headSheetData, interfaceData, true);
|
||||||
|
String respDataStrutStr = generateDataStrcut(headSheetData, interfaceData, false);
|
||||||
|
|
||||||
String apiId = UUID.randomUUID().toString();
|
String apiId = UUID.randomUUID().toString();
|
||||||
ApiDefinitionWithBLOBs apiDefinition = new ApiDefinitionWithBLOBs();
|
ApiDefinitionWithBLOBs apiDefinition = new ApiDefinitionWithBLOBs();
|
||||||
apiDefinition.setName(reqName);
|
apiDefinition.setName(reqName);
|
||||||
|
@ -607,7 +614,7 @@ public class ESBParser extends EsbAbstractParser {
|
||||||
apiDefinition.setProjectId(this.projectId);
|
apiDefinition.setProjectId(this.projectId);
|
||||||
apiDefinition.setModuleId(importRequest.getModuleId());
|
apiDefinition.setModuleId(importRequest.getModuleId());
|
||||||
apiDefinition.setModulePath(importRequest.getModulePath());
|
apiDefinition.setModulePath(importRequest.getModulePath());
|
||||||
apiDefinition.setRequest(genTCPSampler());
|
apiDefinition.setRequest(genTCPSampler(esbSendRequest, reqDataStructStr));
|
||||||
if (StringUtils.equalsIgnoreCase("schedule", importRequest.getType())) {
|
if (StringUtils.equalsIgnoreCase("schedule", importRequest.getType())) {
|
||||||
apiDefinition.setUserId(importRequest.getUserId());
|
apiDefinition.setUserId(importRequest.getUserId());
|
||||||
} else {
|
} else {
|
||||||
|
@ -620,8 +627,6 @@ public class ESBParser extends EsbAbstractParser {
|
||||||
EsbApiParamsWithBLOBs apiParams = new EsbApiParamsWithBLOBs();
|
EsbApiParamsWithBLOBs apiParams = new EsbApiParamsWithBLOBs();
|
||||||
apiParams.setId(UUID.randomUUID().toString());
|
apiParams.setId(UUID.randomUUID().toString());
|
||||||
apiParams.setResourceId(apiId);
|
apiParams.setResourceId(apiId);
|
||||||
String reqDataStructStr = generateDataStrcut(headSheetData, interfaceData, true);
|
|
||||||
String respDataStrutStr = generateDataStrcut(headSheetData, interfaceData, false);
|
|
||||||
|
|
||||||
apiParams.setDataStruct(reqDataStructStr);
|
apiParams.setDataStruct(reqDataStructStr);
|
||||||
apiParams.setResponseDataStruct(respDataStrutStr);
|
apiParams.setResponseDataStruct(respDataStrutStr);
|
||||||
|
@ -634,12 +639,38 @@ public class ESBParser extends EsbAbstractParser {
|
||||||
return resultModel;
|
return resultModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String genTCPSampler() {
|
private String genTCPSampler(String sendRequest, String esbDataStruct) {
|
||||||
|
|
||||||
MsTCPSampler tcpSampler = new MsTCPSampler();
|
MsTCPSampler tcpSampler = new MsTCPSampler();
|
||||||
MsJSR223PreProcessor preProcessor = new MsJSR223PreProcessor();
|
MsJSR223PreProcessor preProcessor = new MsJSR223PreProcessor();
|
||||||
|
|
||||||
tcpSampler.setTcpPreProcessor(preProcessor);
|
tcpSampler.setTcpPreProcessor(preProcessor);
|
||||||
tcpSampler.setProtocol("ESB");
|
tcpSampler.setProtocol("ESB");
|
||||||
tcpSampler.setClassname("TCPClientImpl");
|
tcpSampler.setClassname("TCPClientImpl");
|
||||||
|
tcpSampler.setReUseConnection(false);
|
||||||
|
String script = "String report = ctx.getCurrentSampler().getRequestData();\n" +
|
||||||
|
" if(report!=null){\n" +
|
||||||
|
" //补足8位长度,前置补0\n" +
|
||||||
|
" String reportlengthStr = String.format(\"%08d\",report.length());\n" +
|
||||||
|
" report = reportlengthStr+report;\n" +
|
||||||
|
" ctx.getCurrentSampler().setRequestData(report);\n" +
|
||||||
|
" }";
|
||||||
|
// frontScriptList.add(script);
|
||||||
|
if (tcpSampler.getTcpPreProcessor() != null) {
|
||||||
|
tcpSampler.getTcpPreProcessor().setScriptLanguage("groovy");
|
||||||
|
tcpSampler.getTcpPreProcessor().setScript(script);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (StringUtils.isNotEmpty(sendRequest)) {
|
||||||
|
tcpSampler.setRequest(sendRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotEmpty(esbDataStruct)) {
|
||||||
|
EsbApiParamService esbApiParamService = CommonBeanFactory.getBean(EsbApiParamService.class);
|
||||||
|
List<KeyValue> keyValueList = esbApiParamService.genKeyValueListByDataStruct(tcpSampler, esbDataStruct);
|
||||||
|
tcpSampler.setParameters(keyValueList);
|
||||||
|
}
|
||||||
|
|
||||||
return JSON.toJSONString(tcpSampler);
|
return JSON.toJSONString(tcpSampler);
|
||||||
}
|
}
|
||||||
|
@ -701,7 +732,7 @@ public class ESBParser extends EsbAbstractParser {
|
||||||
|
|
||||||
if (!bodyList.isEmpty()) {
|
if (!bodyList.isEmpty()) {
|
||||||
EsbDataStruct bodyStruct = new EsbDataStruct();
|
EsbDataStruct bodyStruct = new EsbDataStruct();
|
||||||
bodyStruct.initDefaultData("SYS_BODY", null, null, null);
|
bodyStruct.initDefaultData("BODY", null, null, null);
|
||||||
dataStruct.getChildren().add(bodyStruct);
|
dataStruct.getChildren().add(bodyStruct);
|
||||||
Map<String, EsbDataStruct> childrenEsbDataStructMap = new HashMap<>();
|
Map<String, EsbDataStruct> childrenEsbDataStructMap = new HashMap<>();
|
||||||
//用来判断节点有没有在array节点内
|
//用来判断节点有没有在array节点内
|
||||||
|
@ -734,22 +765,6 @@ public class ESBParser extends EsbAbstractParser {
|
||||||
return JSONArray.toJSONString(list);
|
return JSONArray.toJSONString(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
// private void parseParameters(HarRequest harRequest, MsHTTPSamplerProxy request) {
|
|
||||||
// List<HarQueryParm> queryStringList = harRequest.queryString;
|
|
||||||
// queryStringList.forEach(harQueryParm -> {
|
|
||||||
// parseQueryParameters(harQueryParm, request.getArguments());
|
|
||||||
// });
|
|
||||||
// List<HarHeader> harHeaderList = harRequest.headers;
|
|
||||||
// harHeaderList.forEach(harHeader -> {
|
|
||||||
// parseHeaderParameters(harHeader, request.getHeaders());
|
|
||||||
// });
|
|
||||||
// List<HarCookie> harCookieList = harRequest.cookies;
|
|
||||||
// harCookieList.forEach(harCookie -> {
|
|
||||||
// parseCookieParameters(harCookie, request.getHeaders());
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
private String getDefaultStringValue(String val) {
|
private String getDefaultStringValue(String val) {
|
||||||
return StringUtils.isBlank(val) ? "" : val;
|
return StringUtils.isBlank(val) ? "" : val;
|
||||||
}
|
}
|
||||||
|
|
|
@ -770,7 +770,7 @@ public class ApiAutomationService {
|
||||||
try {
|
try {
|
||||||
hashTree = generateHashTree(item, reportId, planEnvMap);
|
hashTree = generateHashTree(item, reportId, planEnvMap);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
MSException.throwException(ex.getMessage());
|
MSException.throwException("解析运行步骤失败!场景名称:" + item.getName());
|
||||||
}
|
}
|
||||||
//存储报告
|
//存储报告
|
||||||
batchMapper.insert(report);
|
batchMapper.insert(report);
|
||||||
|
|
|
@ -285,7 +285,7 @@ public class EsbApiParamService {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//通过esb数据结构生成keyValue集合,以及发送参数
|
//通过esb数据结构生成keyValue集合,以及发送参数
|
||||||
private List<KeyValue> genKeyValueListByDataStruct(MsTCPSampler tcpSampler, String esbDataStruct) {
|
public List<KeyValue> genKeyValueListByDataStruct(MsTCPSampler tcpSampler, String esbDataStruct) {
|
||||||
List<KeyValue> keyValueList = new ArrayList<>();
|
List<KeyValue> keyValueList = new ArrayList<>();
|
||||||
String sendRequest = tcpSampler.getRequest();
|
String sendRequest = tcpSampler.getRequest();
|
||||||
String paramRegexStr = "\\$\\{([^}]*)\\}";
|
String paramRegexStr = "\\$\\{([^}]*)\\}";
|
||||||
|
|
|
@ -353,13 +353,19 @@ public class MockConfigService {
|
||||||
mockExpectConfigMapper.deleteByPrimaryKey(id);
|
mockExpectConfigMapper.deleteByPrimaryKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONObject getGetParamMap(String urlParams, ApiDefinitionWithBLOBs api) {
|
public JSONObject getGetParamMap(String urlParams, ApiDefinitionWithBLOBs api, HttpServletRequest request) {
|
||||||
JSONObject paramMap = this.getSendRestParamMapByIdAndUrl(api, urlParams);
|
JSONObject paramMap = this.getSendRestParamMapByIdAndUrl(api, urlParams);
|
||||||
|
Enumeration<String> paramNameItor = request.getParameterNames();
|
||||||
|
JSONObject object = new JSONObject();
|
||||||
|
while (paramNameItor.hasMoreElements()) {
|
||||||
|
String key = paramNameItor.nextElement();
|
||||||
|
String value = request.getParameter(key);
|
||||||
|
paramMap.put(key, value);
|
||||||
|
}
|
||||||
return paramMap;
|
return paramMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONObject getPostParamMap(HttpServletRequest request) {
|
public JSONObject getPostParamMap(HttpServletRequest request) {
|
||||||
System.out.println(request.getContentType());
|
|
||||||
if (StringUtils.equalsIgnoreCase("application/JSON", request.getContentType())) {
|
if (StringUtils.equalsIgnoreCase("application/JSON", request.getContentType())) {
|
||||||
JSONObject object = null;
|
JSONObject object = null;
|
||||||
try {
|
try {
|
||||||
|
@ -572,7 +578,8 @@ public class MockConfigService {
|
||||||
*/
|
*/
|
||||||
boolean isMatch = false;
|
boolean isMatch = false;
|
||||||
for (ApiDefinitionWithBLOBs api : aualifiedApiList) {
|
for (ApiDefinitionWithBLOBs api : aualifiedApiList) {
|
||||||
JSONObject paramMap = this.getGetParamMap(urlSuffix, api);
|
JSONObject paramMap = this.getGetParamMap(urlSuffix, api, request);
|
||||||
|
|
||||||
MockConfigResponse mockConfigData = this.findByApiId(api.getId());
|
MockConfigResponse mockConfigData = this.findByApiId(api.getId());
|
||||||
if (mockConfigData != null && mockConfigData.getMockExpectConfigList() != null) {
|
if (mockConfigData != null && mockConfigData.getMockExpectConfigList() != null) {
|
||||||
MockExpectConfigResponse finalExpectConfig = this.findExpectConfig(mockConfigData.getMockExpectConfigList(), paramMap);
|
MockExpectConfigResponse finalExpectConfig = this.findExpectConfig(mockConfigData.getMockExpectConfigList(), paramMap);
|
||||||
|
|
Loading…
Reference in New Issue