refactor(接口测试): 更正拼写错误单词

This commit is contained in:
fit2-zhao 2022-10-20 13:00:19 +08:00 committed by f2c-ci-robot[bot]
parent f4217f60a4
commit edcdcf9966
88 changed files with 509 additions and 551 deletions

View File

@ -38,7 +38,7 @@ public class GenScenarioRequest extends ApiScenarioWithBLOBs {
private RunModeConfigDTO config; private RunModeConfigDTO config;
private boolean isTestPlanScheduleJob = false; private boolean isTestPlanScheduleJob = false;
//生成测试报告当isTestPlanScheduleJob为ture时使用 //生成测试报告当isTestPlanScheduleJob为true时使用
private String testPlanReportId; private String testPlanReportId;
private String requestOriginator; private String requestOriginator;

View File

@ -43,7 +43,7 @@ public class RunScenarioRequest {
private boolean isTestPlanScheduleJob = false; private boolean isTestPlanScheduleJob = false;
//生成测试报告当isTestPlanScheduleJob为ture时使用 //生成测试报告当isTestPlanScheduleJob为true时使用
private String testPlanReportId; private String testPlanReportId;
private String requestOriginator; private String requestOriginator;

View File

@ -124,11 +124,11 @@ public class ApiDataCountDTO {
private String interfaceCoverage = " 0%"; private String interfaceCoverage = " 0%";
/** /**
* 对Protocal视角对查询结果进行统计 * 对Protocol视角对查询结果进行统计
* *
* @param countResultList 查询参数 * @param countResultList 查询参数
*/ */
public void countProtocal(List<ApiDataCountResult> countResultList) { public void countProtocol(List<ApiDataCountResult> countResultList) {
for (ApiDataCountResult countResult : for (ApiDataCountResult countResult :
countResultList) { countResultList) {
switch (countResult.getGroupField().toUpperCase()) { switch (countResult.getGroupField().toUpperCase()) {

View File

@ -7,6 +7,6 @@ import lombok.Setter;
@Setter @Setter
public class CoverageDTO { public class CoverageDTO {
public String rateOfCoverage = "0%"; public String rateOfCoverage = "0%";
public long coverate = 0; public long coverage = 0;
public long notCoverate = 0; public long notCoverage = 0;
} }

View File

@ -29,7 +29,7 @@ public class ApiDocumentInfoDTO {
private String restParams; private String restParams;
private String requestBodyParamType; private String requestBodyParamType;
private String requestBodyFormData; private String requestBodyFormData;
private String requestBodyStrutureData; private String requestBodyStructureData;
private Object requestPreviewData; private Object requestPreviewData;
private JSONSchemaBodyDTO jsonSchemaBody; private JSONSchemaBodyDTO jsonSchemaBody;
@ -38,7 +38,7 @@ public class ApiDocumentInfoDTO {
private Object jsonSchemaResponseBody; private Object jsonSchemaResponseBody;
private String responseBodyParamType; private String responseBodyParamType;
private String responseBodyFormData; private String responseBodyFormData;
private String responseBodyStrutureData; private String responseBodyStructureData;
private String responseCode; private String responseCode;
private boolean sharePopoverVisible = false; private boolean sharePopoverVisible = false;

View File

@ -105,13 +105,13 @@ public class TestResult {
//如果有全局前后置脚本会出现前后置的测试步骤影响统计此处略过不处理 //如果有全局前后置脚本会出现前后置的测试步骤影响统计此处略过不处理
// 同时jmeter会将前后置脚本步骤作为一个请求来计算当检测到有前后置脚本步骤执行时请求数也要做处理 // 同时jmeter会将前后置脚本步骤作为一个请求来计算当检测到有前后置脚本步骤执行时请求数也要做处理
List<RequestResult> formatedResult = new ArrayList<>(); List<RequestResult> formattedResult = new ArrayList<>();
int successStep = 0; int successStep = 0;
int errorStep = 0; int errorStep = 0;
for (RequestResult item :result.getRequestResults()) { for (RequestResult item :result.getRequestResults()) {
if(!StringUtils.startsWithAny(item.getName(),"PRE_PROCESSOR_ENV_","POST_PROCESSOR_ENV_")){ if(!StringUtils.startsWithAny(item.getName(),"PRE_PROCESSOR_ENV_","POST_PROCESSOR_ENV_")){
formatedResult.add(item); formattedResult.add(item);
}else { }else {
if(StringUtils.equalsAnyIgnoreCase(item.getName(),"PRE_PROCESSOR_ENV_false","POST_PROCESSOR_ENV_false")){ if(StringUtils.equalsAnyIgnoreCase(item.getName(),"PRE_PROCESSOR_ENV_false","POST_PROCESSOR_ENV_false")){
if(item.isSuccess()){ if(item.isSuccess()){
@ -128,7 +128,7 @@ public class TestResult {
this.error = this.error-errorStep; this.error = this.error-errorStep;
this.total = this.total - successStep - errorStep; this.total = this.total - successStep - errorStep;
result.setRequestResults(formatedResult); result.setRequestResults(formattedResult);
result.getRequestResults().forEach(item -> { result.getRequestResults().forEach(item -> {
String itemAndScenarioName = StringUtils.EMPTY; String itemAndScenarioName = StringUtils.EMPTY;

View File

@ -1,31 +1,20 @@
package io.metersphere.api.parse; package io.metersphere.api.parse;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.metersphere.api.dto.definition.request.processors.pre.MsJSR223PreProcessor;
import io.metersphere.api.dto.definition.request.sampler.MsHTTPSamplerProxy; import io.metersphere.api.dto.definition.request.sampler.MsHTTPSamplerProxy;
import io.metersphere.api.dto.scenario.Body; import io.metersphere.api.dto.scenario.Body;
import io.metersphere.api.dto.scenario.KeyValue; import io.metersphere.api.dto.scenario.KeyValue;
import io.metersphere.api.parse.api.har.model.*; import io.metersphere.api.parse.api.har.model.*;
import io.metersphere.api.parse.postman.PostmanEvent;
import io.metersphere.api.parse.postman.PostmanKeyValue;
import io.metersphere.api.parse.postman.PostmanRequest;
import io.metersphere.api.parse.postman.PostmanScript;
import io.metersphere.commons.constants.ElementConstants;
import io.metersphere.commons.constants.MsRequestBodyType;
import io.metersphere.commons.constants.PostmanRequestBodyMode;
import io.metersphere.commons.utils.JSON;
import io.metersphere.commons.utils.JSONUtil; import io.metersphere.commons.utils.JSONUtil;
import io.metersphere.commons.utils.XMLUtil; import io.metersphere.commons.utils.XMLUtil;
import io.metersphere.plugin.core.MsTestElement;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.*; import java.util.HashMap;
import java.util.stream.Collectors; import java.util.List;
import java.util.Map;
public abstract class HarScenarioAbstractParser<T> extends ApiImportAbstractParser<T> { public abstract class HarScenarioAbstractParser<T> extends ApiImportAbstractParser<T> {
@ -50,9 +39,9 @@ public abstract class HarScenarioAbstractParser<T> extends ApiImportAbstractPars
} }
private void parseParameters(HarRequest harRequest, MsHTTPSamplerProxy request) { private void parseParameters(HarRequest harRequest, MsHTTPSamplerProxy request) {
List<HarQueryParm> queryStringList = harRequest.queryString; List<HarQueryParam> queryStringList = harRequest.queryString;
queryStringList.forEach(harQueryParm -> { queryStringList.forEach(harQueryParam -> {
parseQueryParameters(harQueryParm, request.getArguments()); parseQueryParameters(harQueryParam, request.getArguments());
}); });
List<HarHeader> harHeaderList = harRequest.headers; List<HarHeader> harHeaderList = harRequest.headers;
harHeaderList.forEach(harHeader -> { harHeaderList.forEach(harHeader -> {
@ -138,8 +127,8 @@ public abstract class HarScenarioAbstractParser<T> extends ApiImportAbstractPars
} }
private void parseQueryParameters(HarQueryParm harQueryParm, List<KeyValue> arguments) { private void parseQueryParameters(HarQueryParam harQueryParam, List<KeyValue> arguments) {
arguments.add(new KeyValue(harQueryParm.name, harQueryParm.value, harQueryParm.comment, false)); arguments.add(new KeyValue(harQueryParam.name, harQueryParam.value, harQueryParam.comment, false));
} }
private void parseCookieParameters(HarCookie harCookie, List<KeyValue> headers) { private void parseCookieParameters(HarCookie harCookie, List<KeyValue> headers) {
@ -150,99 +139,11 @@ public abstract class HarScenarioAbstractParser<T> extends ApiImportAbstractPars
addHeader(headers, harHeader.name, harHeader.value, harHeader.comment, StringUtils.EMPTY, false); addHeader(headers, harHeader.name, harHeader.value, harHeader.comment, StringUtils.EMPTY, false);
} }
private void addPreScript(MsHTTPSamplerProxy request, List<PostmanEvent> event) {
if (request != null && CollectionUtils.isNotEmpty(event)) {
StringBuilder scriptStr = new StringBuilder();
event = event.stream()
.filter(item -> item.getScript() != null)
.collect(Collectors.toList());
event.forEach(item -> {
PostmanScript script = item.getScript();
if (script != null && item.getListen().contains("prerequest")) {
List<String> exec = script.getExec();
if (CollectionUtils.isNotEmpty(exec)) {
exec.forEach(col -> {
if (StringUtils.isNotEmpty(col)) {
scriptStr.append(col + StringUtils.LF);
}
});
}
}
});
if (StringUtils.isNotBlank(scriptStr)) {
MsJSR223PreProcessor jsr223PreProcessor = new MsJSR223PreProcessor();
jsr223PreProcessor.setName(ElementConstants.JSR223_PRE);
jsr223PreProcessor.setScriptLanguage("javascript");
jsr223PreProcessor.setScript(scriptStr.toString());
LinkedList<MsTestElement> hashTree = new LinkedList<>();
hashTree.add(jsr223PreProcessor);
request.setHashTree(hashTree);
}
}
}
private List<KeyValue> parseKeyValue(List<PostmanKeyValue> postmanKeyValues) {
if (postmanKeyValues == null) {
return null;
}
List<KeyValue> keyValues = new ArrayList<>();
postmanKeyValues.forEach(item -> keyValues.add(new KeyValue(item.getKey(), item.getValue(), item.getDescription(), item.getContentType())));
return keyValues;
}
private void parseBody(Body body, PostmanRequest requestDesc) {
ObjectNode postmanBody = requestDesc.getBody();
if (postmanBody == null) {
return;
}
String bodyMode = postmanBody.get("mode").textValue();
if (StringUtils.isBlank(bodyMode)) {
return;
}
if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.RAW.value())) {
parseRawBody(body, postmanBody, bodyMode);
} else if (StringUtils.equalsAny(bodyMode, PostmanRequestBodyMode.FORM_DATA.value(), PostmanRequestBodyMode.URLENCODED.value())) {
List<PostmanKeyValue> postmanKeyValues = JSON.parseArray(postmanBody.get(bodyMode).textValue(), PostmanKeyValue.class);
body.setKvs(parseKeyValue(postmanKeyValues));
if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.FORM_DATA.value())) {
body.setType(Body.FORM_DATA);
} else if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.URLENCODED.value())) {
body.setType(Body.WWW_FROM);
}
} else if (StringUtils.equals(bodyMode, PostmanRequestBodyMode.FILE.value())) {
body.setType(Body.BINARY);
body.setKvs(new ArrayList<>());
}
}
private String parseXmlBody(String xmlString) { private String parseXmlBody(String xmlString) {
JSONObject object = JSONUtil.parseObject(getDefaultStringValue(xmlString)); JSONObject object = JSONUtil.parseObject(getDefaultStringValue(xmlString));
return XMLUtil.jsonToXmlStr(object); return XMLUtil.jsonToXmlStr(object);
} }
private void parseRawBody(Body body, ObjectNode postmanBody, String bodyMode) {
body.setRaw(postmanBody.get(bodyMode).textValue());
body.setType(MsRequestBodyType.RAW.value());
JsonNode options = postmanBody.get("options");
if (options != null) {
JsonNode raw = options.get(PostmanRequestBodyMode.RAW.value());
if (raw != null) {
String bodyType = StringUtils.EMPTY;
switch (raw.get("language").textValue()) {
case "json":
bodyType = Body.JSON_STR;
break;
case "xml":
bodyType = Body.XML;
break;
default:
bodyType = Body.RAW;
}
body.setType(bodyType);
}
}
}
private String getDefaultStringValue(String val) { private String getDefaultStringValue(String val) {
return StringUtils.isBlank(val) ? StringUtils.EMPTY : val; return StringUtils.isBlank(val) ? StringUtils.EMPTY : val;
} }

View File

@ -190,9 +190,9 @@ public class JmeterDocumentParser {
// 解析访问地址 // 解析访问地址
if (url.contains("?")) { if (url.contains("?")) {
String[] strUrlPatten = url.split("\\?"); String[] strUrlPattern = url.split("\\?");
strUrl = strUrlPatten[0]; strUrl = strUrlPattern[0];
strUrlParams = strUrlPatten[1]; strUrlParams = strUrlPattern[1];
} else { } else {
strUrl = url; strUrl = url;

View File

@ -87,7 +87,7 @@ public class ESBParser extends EsbAbstractParser {
XSSFWorkbook workbook = new XSSFWorkbook(); XSSFWorkbook workbook = new XSSFWorkbook();
XSSFFont font = workbook.createFont(); XSSFFont font = workbook.createFont();
font.setFontHeightInPoints((short) 9); font.setFontHeightInPoints((short) 9);
Map<String, XSSFCellStyle> cellStyleMap = createCellStle(workbook); Map<String, XSSFCellStyle> cellStyleMap = createCellStyle(workbook);
XSSFSheet headSheet = workbook.createSheet("公共报文头"); XSSFSheet headSheet = workbook.createSheet("公共报文头");
generateSheet(headSheet, font, cellStyleMap); generateSheet(headSheet, font, cellStyleMap);
XSSFSheet bodySheet = workbook.createSheet("接口报文信息"); XSSFSheet bodySheet = workbook.createSheet("接口报文信息");
@ -95,7 +95,7 @@ public class ESBParser extends EsbAbstractParser {
return workbook; return workbook;
} }
private static Map<String, XSSFCellStyle> createCellStle(XSSFWorkbook workbook) { private static Map<String, XSSFCellStyle> createCellStyle(XSSFWorkbook workbook) {
Map<String, XSSFCellStyle> cellStype = new HashMap<>(); Map<String, XSSFCellStyle> cellStype = new HashMap<>();
short[] colorIndexArr = {IndexedColors.LIGHT_GREEN.getIndex(), IndexedColors.ORCHID.getIndex(), IndexedColors.YELLOW.getIndex()}; short[] colorIndexArr = {IndexedColors.LIGHT_GREEN.getIndex(), IndexedColors.ORCHID.getIndex(), IndexedColors.YELLOW.getIndex()};
for (short colorIndex : colorIndexArr) { for (short colorIndex : colorIndexArr) {

View File

@ -118,9 +118,9 @@ public class HarParser extends HarAbstractParser {
} }
private void parseParameters(HarRequest harRequest, MsHTTPSamplerProxy request) { private void parseParameters(HarRequest harRequest, MsHTTPSamplerProxy request) {
List<HarQueryParm> queryStringList = harRequest.queryString; List<HarQueryParam> queryStringList = harRequest.queryString;
queryStringList.forEach(harQueryParm -> { queryStringList.forEach(harQueryParam -> {
parseQueryParameters(harQueryParm, request.getArguments()); parseQueryParameters(harQueryParam, request.getArguments());
}); });
List<HarHeader> harHeaderList = harRequest.headers; List<HarHeader> harHeaderList = harRequest.headers;
harHeaderList.forEach(harHeader -> { harHeaderList.forEach(harHeader -> {
@ -278,7 +278,7 @@ public class HarParser extends HarAbstractParser {
return XMLUtil.jsonToXmlStr(object); return XMLUtil.jsonToXmlStr(object);
} }
private void parseQueryParameters(HarQueryParm harQueryParm, List<KeyValue> arguments) { private void parseQueryParameters(HarQueryParam harQueryParam, List<KeyValue> arguments) {
arguments.add(new KeyValue(harQueryParm.name, harQueryParm.value, harQueryParm.comment, false)); arguments.add(new KeyValue(harQueryParam.name, harQueryParam.value, harQueryParam.comment, false));
} }
} }

View File

@ -20,13 +20,13 @@ public class JMeterScriptUtil {
/** /**
* 判断脚本是否被过滤 * 判断脚本是否被过滤
* *
* @param filterProtocals 要过滤掉的请求类型 * @param filterProtocols 要过滤掉的请求类型
* @param protocal 当前请求类型 * @param protocol 当前请求类型
* @return * @return
*/ */
public static boolean isScriptFilter(List<String> filterProtocals, String protocal) { public static boolean isScriptFilter(List<String> filterProtocols, String protocol) {
if (!CollectionUtils.isEmpty(filterProtocals)) { if (!CollectionUtils.isEmpty(filterProtocols)) {
return filterProtocals.contains(protocal); return filterProtocols.contains(protocol);
} else { } else {
return false; return false;
} }
@ -62,26 +62,26 @@ public class JMeterScriptUtil {
* @param envConfig 环境配置信息 * @param envConfig 环境配置信息
* @param samplerHashTree sampler的hashtree * @param samplerHashTree sampler的hashtree
* @param isAfterPrivateScript 是否将脚本放置在sampler的私有脚本之后 * @param isAfterPrivateScript 是否将脚本放置在sampler的私有脚本之后
* @param protocal 请求类型 * @param protocol 请求类型
* @param environmentId 环境ID * @param environmentId 环境ID
* @param config 参数配置 * @param config 参数配置
*/ */
public static void setScriptByEnvironmentConfig(EnvironmentConfig envConfig, HashTree samplerHashTree, String protocal, String environmentId, ParameterConfig config, boolean isAfterPrivateScript) { public static void setScriptByEnvironmentConfig(EnvironmentConfig envConfig, HashTree samplerHashTree, String protocol, String environmentId, ParameterConfig config, boolean isAfterPrivateScript) {
GlobalScriptConfig globalScriptConfig = envConfig != null ? envConfig.getGlobalScriptConfig() : null; GlobalScriptConfig globalScriptConfig = envConfig != null ? envConfig.getGlobalScriptConfig() : null;
MsJSR223PreProcessor preProcessor = JMeterScriptUtil.getPreScript(envConfig); MsJSR223PreProcessor preProcessor = JMeterScriptUtil.getPreScript(envConfig);
MsJSR223PostProcessor postProcessor = JMeterScriptUtil.getPostScript(envConfig); MsJSR223PostProcessor postProcessor = JMeterScriptUtil.getPostScript(envConfig);
setScript(globalScriptConfig, protocal, isAfterPrivateScript, environmentId, config, samplerHashTree, preProcessor, postProcessor); setScript(globalScriptConfig, protocol, isAfterPrivateScript, environmentId, config, samplerHashTree, preProcessor, postProcessor);
} }
public static void setScript(GlobalScriptConfig globalScriptConfig, String protocal, boolean isAfterPrivateScript, String environmentId, ParameterConfig config, public static void setScript(GlobalScriptConfig globalScriptConfig, String protocol, boolean isAfterPrivateScript, String environmentId, ParameterConfig config,
HashTree samplerHashTree, MsJSR223PreProcessor preProcessor, MsJSR223PostProcessor postProcessor) { HashTree samplerHashTree, MsJSR223PreProcessor preProcessor, MsJSR223PostProcessor postProcessor) {
boolean isPreScriptExecAfterPrivateScript = globalScriptConfig == null ? false : globalScriptConfig.isPreScriptExecAfterPrivateScript(); boolean isPreScriptExecAfterPrivateScript = globalScriptConfig == null ? false : globalScriptConfig.isPreScriptExecAfterPrivateScript();
boolean isPostScriptExecAfterPrivateScript = globalScriptConfig == null ? false : globalScriptConfig.isPostScriptExecAfterPrivateScript(); boolean isPostScriptExecAfterPrivateScript = globalScriptConfig == null ? false : globalScriptConfig.isPostScriptExecAfterPrivateScript();
List<String> preFilterProtocal = globalScriptConfig == null ? null : globalScriptConfig.getFilterRequestPreScript(); List<String> preFilterProtocol = globalScriptConfig == null ? null : globalScriptConfig.getFilterRequestPreScript();
List<String> postFilterProtocal = globalScriptConfig == null ? null : globalScriptConfig.getFilterRequestPostScript(); List<String> postFilterProtocol = globalScriptConfig == null ? null : globalScriptConfig.getFilterRequestPostScript();
boolean globalPreScriptIsFilter = JMeterScriptUtil.isScriptFilter(preFilterProtocal, protocal); boolean globalPreScriptIsFilter = JMeterScriptUtil.isScriptFilter(preFilterProtocol, protocol);
boolean globalPostScriptIsFilter = JMeterScriptUtil.isScriptFilter(postFilterProtocal, protocal); boolean globalPostScriptIsFilter = JMeterScriptUtil.isScriptFilter(postFilterProtocol, protocol);
if (isAfterPrivateScript) { if (isAfterPrivateScript) {
if (isPreScriptExecAfterPrivateScript && !globalPreScriptIsFilter && preProcessor != null && StringUtils.isNotEmpty(preProcessor.getScript())) { if (isPreScriptExecAfterPrivateScript && !globalPreScriptIsFilter && preProcessor != null && StringUtils.isNotEmpty(preProcessor.getScript())) {
addItemHashTree(preProcessor, samplerHashTree, config, environmentId); addItemHashTree(preProcessor, samplerHashTree, config, environmentId);

View File

@ -21,7 +21,7 @@
package io.metersphere.api.parse.api.har.model; package io.metersphere.api.parse.api.har.model;
public class HarQueryParm { public class HarQueryParam {
public String name; public String name;
@ -45,7 +45,7 @@ public class HarQueryParm {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if(!(obj instanceof HarQueryParm)) { if(!(obj instanceof HarQueryParam)) {
return false; return false;
} }
@ -53,8 +53,8 @@ public class HarQueryParm {
return false; return false;
} }
HarQueryParm harQueryParm = (HarQueryParm) obj; HarQueryParam harQueryParam = (HarQueryParam) obj;
return this.name.equals(harQueryParm.name); return this.name.equals(harQueryParam.name);
} }
} }

View File

@ -37,7 +37,7 @@ public class HarRequest {
public List<HarHeader> headers; public List<HarHeader> headers;
public List<HarQueryParm> queryString; public List<HarQueryParam> queryString;
public HarPostData postData; public HarPostData postData;

View File

@ -198,8 +198,8 @@ public class ApiScenarioImportUtil {
public static ApiDefinitionResult structureApiDefinitionByJson(ApiDefinitionService apiDefinitionService, JSONObject object, String versionId, String projectId, ApiDefinitionMapper apiDefinitionMapper, Map<String, ApiDefinition> definitionMap) { public static ApiDefinitionResult structureApiDefinitionByJson(ApiDefinitionService apiDefinitionService, JSONObject object, String versionId, String projectId, ApiDefinitionMapper apiDefinitionMapper, Map<String, ApiDefinition> definitionMap) {
ApiDefinitionResult test = new ApiDefinitionResult(); ApiDefinitionResult test = new ApiDefinitionResult();
apiDefinitionService.checkQuota(projectId); apiDefinitionService.checkQuota(projectId);
String protocal = object.optString("protocal"); String protocol = object.optString("protocol");
if (StringUtils.equals(protocal, "DUBBO")) { if (StringUtils.equals(protocol, "DUBBO")) {
test.setMethod("dubbo://"); test.setMethod("dubbo://");
} else { } else {
test.setMethod(object.optString("method")); test.setMethod(object.optString("method"));

View File

@ -70,22 +70,22 @@ public class EsbDataParser {
EsbDataStruct returnData = null; EsbDataStruct returnData = null;
if (paramArr.length > index) { if (paramArr.length > index) {
String param = paramArr[index]; String param = paramArr[index];
for (EsbDataStruct dataStuct : esbDataList) { for (EsbDataStruct dataStruct : esbDataList) {
if (StringUtils.equals(dataStuct.getName(), param)) { if (StringUtils.equals(dataStruct.getName(), param)) {
int newIndex = index + 1; int newIndex = index + 1;
if (paramArr.length > newIndex && dataStuct.getChildren() != null) { if (paramArr.length > newIndex && dataStruct.getChildren() != null) {
EsbDataStruct childElement = selectEsbDataStructByNameStruct(dataStuct.getChildren(), paramArr, newIndex); EsbDataStruct childElement = selectEsbDataStructByNameStruct(dataStruct.getChildren(), paramArr, newIndex);
if (childElement != null) { if (childElement != null) {
returnData = dataStuct.copy(false); returnData = dataStruct.copy(false);
returnData.getChildren().add(childElement); returnData.getChildren().add(childElement);
} }
} else { } else {
returnData = dataStuct.copy(true); returnData = dataStruct.copy(true);
} }
} else if (index == 0) { } else if (index == 0) {
//如果是第一个节点不符合则遍历子节点是否有符合的 //如果是第一个节点不符合则遍历子节点是否有符合的
int newIndex = index; int newIndex = index;
EsbDataStruct itemData = selectEsbDataStructByNameStruct(dataStuct.getChildren(), paramArr, newIndex); EsbDataStruct itemData = selectEsbDataStructByNameStruct(dataStruct.getChildren(), paramArr, newIndex);
if (itemData != null) { if (itemData != null) {
returnData = itemData; returnData = itemData;
} }

View File

@ -84,7 +84,7 @@ public class HarScenarioParser extends HarScenarioAbstractParser<ScenarioImport>
if (samplerProxy.getBody() != null) { if (samplerProxy.getBody() != null) {
List<KeyValue> keyValueList = new ArrayList<>(); List<KeyValue> keyValueList = new ArrayList<>();
if (!ObjectUtils.isEmpty(request.queryString)) { if (!ObjectUtils.isEmpty(request.queryString)) {
for (HarQueryParm model : request.queryString) { for (HarQueryParam model : request.queryString) {
KeyValue keyValue = new KeyValue(model.name, model.value); KeyValue keyValue = new KeyValue(model.name, model.value);
keyValueList.add(keyValue); keyValueList.add(keyValue);
} }

View File

@ -28,7 +28,7 @@ public interface ExtApiDefinitionExecResultMapper {
long countByTestCaseIDInProject(String projectId); long countByTestCaseIDInProject(String projectId);
List<ExecutedCaseInfoResult> findFaliureCaseInTestPlanByProjectIDAndExecuteTimeAndLimitNumber(@Param("projectId") String projectId, @Param("selectFunctionCase") boolean selectFunctionCase, @Param("startTimestamp") long startTimestamp); List<ExecutedCaseInfoResult> findFailureCaseInTestPlanByProjectIDAndExecuteTimeAndLimitNumber(@Param("projectId") String projectId, @Param("selectFunctionCase") boolean selectFunctionCase, @Param("startTimestamp") long startTimestamp);
String selectExecResult(String resourceId); String selectExecResult(String resourceId);

View File

@ -65,7 +65,7 @@
WHERE integrated_report_id = #{0} WHERE integrated_report_id = #{0}
</select> </select>
<select id="findFaliureCaseInTestPlanByProjectIDAndExecuteTimeAndLimitNumber" <select id="findFailureCaseInTestPlanByProjectIDAndExecuteTimeAndLimitNumber"
resultType="io.metersphere.api.dto.datacount.ExecutedCaseInfoResult"> resultType="io.metersphere.api.dto.datacount.ExecutedCaseInfoResult">
SELECT * SELECT *
FROM ( FROM (

View File

@ -75,8 +75,8 @@ public class MockApiUtils {
//判断是否是JsonSchema //判断是否是JsonSchema
boolean isJsonSchema = false; boolean isJsonSchema = false;
if (bodyObj.has("format")) { if (bodyObj.has("format")) {
String foramtValue = String.valueOf(bodyObj.get("format")); String formatValue = String.valueOf(bodyObj.get("format"));
if (StringUtils.equals("JSON-SCHEMA", foramtValue)) { if (StringUtils.equals("JSON-SCHEMA", formatValue)) {
isJsonSchema = true; isJsonSchema = true;
} }
} }
@ -84,8 +84,8 @@ public class MockApiUtils {
String jsonString = StringUtils.EMPTY; String jsonString = StringUtils.EMPTY;
if (isJsonSchema) { if (isJsonSchema) {
if (bodyObj.has("jsonSchema")) { if (bodyObj.has("jsonSchema")) {
String bodyRetunStr = bodyObj.optJSONObject("jsonSchema").toString(); String bodyReturnStr = bodyObj.optJSONObject("jsonSchema").toString();
jsonString = JSONSchemaGenerator.getJson(bodyRetunStr); jsonString = JSONSchemaGenerator.getJson(bodyReturnStr);
} }
} else { } else {
if (bodyObj.has("raw")) { if (bodyObj.has("raw")) {
@ -178,8 +178,8 @@ public class MockApiUtils {
//判断是否是JsonSchema //判断是否是JsonSchema
boolean isJsonSchema = false; boolean isJsonSchema = false;
if (bodyObj.has("format")) { if (bodyObj.has("format")) {
String foramtValue = String.valueOf(bodyObj.get("format")); String formatValue = String.valueOf(bodyObj.get("format"));
if (StringUtils.equals("JSON-SCHEMA", foramtValue)) { if (StringUtils.equals("JSON-SCHEMA", formatValue)) {
isJsonSchema = true; isJsonSchema = true;
} }
} }
@ -301,8 +301,8 @@ public class MockApiUtils {
//判断是否是JsonSchema //判断是否是JsonSchema
boolean isJsonSchema = false; boolean isJsonSchema = false;
if (bodyObj.has("format")) { if (bodyObj.has("format")) {
String foramtValue = String.valueOf(bodyObj.get("format")); String formatValue = String.valueOf(bodyObj.get("format"));
if (StringUtils.equals("JSON-SCHEMA", foramtValue)) { if (StringUtils.equals("JSON-SCHEMA", formatValue)) {
isJsonSchema = true; isJsonSchema = true;
} }
} }
@ -518,13 +518,13 @@ public class MockApiUtils {
private static String readXml(HttpServletRequest request) { private static String readXml(HttpServletRequest request) {
String inputLine = null; String inputLine = null;
// 接收到的数据 // 接收到的数据
StringBuffer recieveData = new StringBuffer(); StringBuffer receiveData = new StringBuffer();
BufferedReader in = null; BufferedReader in = null;
try { try {
in = new BufferedReader(new InputStreamReader( in = new BufferedReader(new InputStreamReader(
request.getInputStream(), StandardCharsets.UTF_8.name())); request.getInputStream(), StandardCharsets.UTF_8.name()));
while ((inputLine = in.readLine()) != null) { while ((inputLine = in.readLine()) != null) {
recieveData.append(inputLine); receiveData.append(inputLine);
} }
} catch (IOException e) { } catch (IOException e) {
} finally { } finally {
@ -536,7 +536,7 @@ public class MockApiUtils {
} }
} }
return recieveData.toString(); return receiveData.toString();
} }
/** /**

View File

@ -181,8 +181,8 @@ public class ApiTestCaseController {
} }
@PostMapping("/get-del-reference") @PostMapping("/get-del-reference")
public DeleteCheckResult checkDeleteDatas(@RequestBody ApiTestBatchRequest request) { public DeleteCheckResult checkDeleteData(@RequestBody ApiTestBatchRequest request) {
return apiTestCaseService.checkDeleteDatas(request); return apiTestCaseService.checkDeleteData(request);
} }
@PostMapping("/relevance") @PostMapping("/relevance")

View File

@ -68,7 +68,7 @@ public class ApiHomeController {
ApiDataCountDTO apiCountResult = new ApiDataCountDTO(); ApiDataCountDTO apiCountResult = new ApiDataCountDTO();
List<ApiDataCountResult> countResultByProtocolList = apiDefinitionService.countProtocolByProjectID(projectId); List<ApiDataCountResult> countResultByProtocolList = apiDefinitionService.countProtocolByProjectID(projectId);
apiCountResult.countProtocal(countResultByProtocolList); apiCountResult.countProtocol(countResultByProtocolList);
long dateCountByCreateInThisWeek = apiDefinitionService.countByProjectIDAndCreateInThisWeek(projectId); long dateCountByCreateInThisWeek = apiDefinitionService.countByProjectIDAndCreateInThisWeek(projectId);
apiCountResult.setThisWeekAddedCount(dateCountByCreateInThisWeek); apiCountResult.setThisWeekAddedCount(dateCountByCreateInThisWeek);
@ -79,9 +79,9 @@ public class ApiHomeController {
long allCount = apiCountResult.getFinishedCount() + apiCountResult.getRunningCount() + apiCountResult.getNotStartedCount(); long allCount = apiCountResult.getFinishedCount() + apiCountResult.getRunningCount() + apiCountResult.getNotStartedCount();
if (allCount != 0) { if (allCount != 0) {
float complateRageNumber = (float) apiCountResult.getFinishedCount() * 100 / allCount; float completeRageNumber = (float) apiCountResult.getFinishedCount() * 100 / allCount;
DecimalFormat df = new DecimalFormat("0.0"); DecimalFormat df = new DecimalFormat("0.0");
apiCountResult.setCompletionRage(df.format(complateRageNumber) + "%"); apiCountResult.setCompletionRage(df.format(completeRageNumber) + "%");
} }
apiCountResult.setHttpCountStr("HTTP&nbsp;&nbsp;<br/><br/>" + apiCountResult.getHttpApiDataCountNumber()); apiCountResult.setHttpCountStr("HTTP&nbsp;&nbsp;<br/><br/>" + apiCountResult.getHttpApiDataCountNumber());
@ -117,12 +117,12 @@ public class ApiHomeController {
try { try {
if (effectiveApiCount == 0) { if (effectiveApiCount == 0) {
coverage.setCoverate(0); coverage.setCoverage(0);
coverage.setNotCoverate(0); coverage.setNotCoverage(0);
} else { } else {
long quotedApiCount = apiHasCase + apiInScenario; long quotedApiCount = apiHasCase + apiInScenario;
coverage.setCoverate(quotedApiCount); coverage.setCoverage(quotedApiCount);
coverage.setNotCoverate(effectiveApiCount - quotedApiCount); coverage.setNotCoverage(effectiveApiCount - quotedApiCount);
float coverageRageNumber = (float) quotedApiCount * 100 / effectiveApiCount; float coverageRageNumber = (float) quotedApiCount * 100 / effectiveApiCount;
DecimalFormat df = new DecimalFormat("0.0"); DecimalFormat df = new DecimalFormat("0.0");
coverage.setRateOfCoverage(df.format(coverageRageNumber) + "%"); coverage.setRateOfCoverage(df.format(coverageRageNumber) + "%");
@ -160,7 +160,7 @@ public class ApiHomeController {
public ApiDataCountDTO testCaseInfoCount(@PathVariable String projectId) { public ApiDataCountDTO testCaseInfoCount(@PathVariable String projectId) {
ApiDataCountDTO apiCountResult = new ApiDataCountDTO(); ApiDataCountDTO apiCountResult = new ApiDataCountDTO();
List<ApiDataCountResult> countResultList = apiTestCaseService.countProtocolByProjectID(projectId); List<ApiDataCountResult> countResultList = apiTestCaseService.countProtocolByProjectID(projectId);
apiCountResult.countProtocal(countResultList); apiCountResult.countProtocol(countResultList);
long dateCountByCreateInThisWeek = apiTestCaseService.countByProjectIDAndCreateInThisWeek(projectId); long dateCountByCreateInThisWeek = apiTestCaseService.countByProjectIDAndCreateInThisWeek(projectId);
apiCountResult.setThisWeekAddedCount(dateCountByCreateInThisWeek); apiCountResult.setThisWeekAddedCount(dateCountByCreateInThisWeek);
long executedInThisWeekCountNumber = apiDefinitionExecResultService.countByTestCaseIDInProjectAndExecutedInThisWeek(projectId); long executedInThisWeekCountNumber = apiDefinitionExecResultService.countByTestCaseIDInProjectAndExecutedInThisWeek(projectId);

View File

@ -255,8 +255,8 @@ public class ShareInfoService extends BaseShareInfoService {
//判断是否是JsonSchema //判断是否是JsonSchema
boolean isJsonSchema = false; boolean isJsonSchema = false;
if (bodyObj.has("format")) { if (bodyObj.has("format")) {
String foramtValue = String.valueOf(bodyObj.get("format")); String formatValue = String.valueOf(bodyObj.get("format"));
if (StringUtils.equals("JSON-SCHEMA", foramtValue)) { if (StringUtils.equals("JSON-SCHEMA", formatValue)) {
isJsonSchema = true; isJsonSchema = true;
} }
} }
@ -271,7 +271,7 @@ public class ShareInfoService extends BaseShareInfoService {
String raw = bodyObj.get("raw").asText(); String raw = bodyObj.get("raw").asText();
jsonSchemaBodyDTO.setRaw(raw); jsonSchemaBodyDTO.setRaw(raw);
apiInfoDTO.setJsonSchemaBody(jsonSchemaBodyDTO); apiInfoDTO.setJsonSchemaBody(jsonSchemaBodyDTO);
apiInfoDTO.setRequestBodyStrutureData(raw); apiInfoDTO.setRequestBodyStructureData(raw);
//转化jsonObje 或者 jsonArray //转化jsonObje 或者 jsonArray
this.setPreviewData(previewJsonArray, raw); this.setPreviewData(previewJsonArray, raw);
} }
@ -279,7 +279,7 @@ public class ShareInfoService extends BaseShareInfoService {
} else if (StringUtils.equalsAny(type, "XML", "Raw")) { } else if (StringUtils.equalsAny(type, "XML", "Raw")) {
if (bodyObj.has("raw")) { if (bodyObj.has("raw")) {
String raw = bodyObj.get("raw").asText(); String raw = bodyObj.get("raw").asText();
apiInfoDTO.setRequestBodyStrutureData(raw); apiInfoDTO.setRequestBodyStructureData(raw);
this.setPreviewData(previewJsonArray, raw); this.setPreviewData(previewJsonArray, raw);
} }
} else if (StringUtils.equalsAny(type, "Form Data", "WWW_FORM")) { } else if (StringUtils.equalsAny(type, "Form Data", "WWW_FORM")) {
@ -376,8 +376,8 @@ public class ShareInfoService extends BaseShareInfoService {
//判断是否是JsonSchema //判断是否是JsonSchema
boolean isJsonSchema = false; boolean isJsonSchema = false;
if (bodyObj.has("format")) { if (bodyObj.has("format")) {
String foramtValue = String.valueOf(bodyObj.get("format")); String formatValue = String.valueOf(bodyObj.get("format"));
if (StringUtils.equals("JSON-SCHEMA", foramtValue)) { if (StringUtils.equals("JSON-SCHEMA", formatValue)) {
isJsonSchema = true; isJsonSchema = true;
} }
} }
@ -387,7 +387,7 @@ public class ShareInfoService extends BaseShareInfoService {
} else { } else {
if (bodyObj.has("raw")) { if (bodyObj.has("raw")) {
String raw = bodyObj.get("raw").asText(); String raw = bodyObj.get("raw").asText();
apiInfoDTO.setResponseBodyStrutureData(raw); apiInfoDTO.setResponseBodyStructureData(raw);
} }
} }
} else if (StringUtils.equalsAny(type, "Form Data", "WWW_FORM")) { } else if (StringUtils.equalsAny(type, "Form Data", "WWW_FORM")) {

View File

@ -9,7 +9,6 @@ import io.metersphere.base.mapper.ext.ExtApiDefinitionExecResultMapper;
import io.metersphere.base.mapper.plan.TestPlanApiCaseMapper; import io.metersphere.base.mapper.plan.TestPlanApiCaseMapper;
import io.metersphere.commons.constants.ApiRunMode; import io.metersphere.commons.constants.ApiRunMode;
import io.metersphere.commons.constants.NoticeConstants; import io.metersphere.commons.constants.NoticeConstants;
import io.metersphere.commons.constants.TestPlanApiExecuteStatus;
import io.metersphere.commons.constants.TriggerMode; import io.metersphere.commons.constants.TriggerMode;
import io.metersphere.commons.enums.ApiReportStatus; import io.metersphere.commons.enums.ApiReportStatus;
import io.metersphere.commons.utils.*; import io.metersphere.commons.utils.*;
@ -140,16 +139,6 @@ public class ApiDefinitionExecResultService {
} }
} }
} }
if (isSchedule) {
// 这个方法得优化大批量跑有问题
Map<String, String> apiIdResultMap = new HashMap<>();
long errorSize = dto.getRequestResults().stream().filter(requestResult -> requestResult.getError() > 0).count();
String status = errorSize > 0 || dto.getRequestResults().isEmpty() ? TestPlanApiExecuteStatus.FAILD.name() : TestPlanApiExecuteStatus.SUCCESS.name();
if (StringUtils.isNotEmpty(dto.getReportId())) {
apiIdResultMap.put(dto.getReportId(), status);
}
LoggerUtil.info("TestPlanReportId[" + dto.getTestPlanReportId() + "] API CASE OVER. API CASE STATUS:" + JSON.toJSONString(apiIdResultMap));
}
} }
} }
sqlSession.flushStatements(); sqlSession.flushStatements();
@ -346,7 +335,7 @@ public class ApiDefinitionExecResultService {
} }
public List<ExecutedCaseInfoResult> findFailureCaseInfoByProjectIDAndLimitNumberInSevenDays(String projectId, boolean selectFuntionCase, int limitNumber) { public List<ExecutedCaseInfoResult> findFailureCaseInfoByProjectIDAndLimitNumberInSevenDays(String projectId, boolean selectFunctionCase, int limitNumber) {
//获取7天之前的日期 //获取7天之前的日期
Date startDay = DateUtils.dateSum(new Date(), -6); Date startDay = DateUtils.dateSum(new Date(), -6);
@ -361,7 +350,7 @@ public class ApiDefinitionExecResultService {
if (startTime == null) { if (startTime == null) {
return new ArrayList<>(0); return new ArrayList<>(0);
} else { } else {
List<ExecutedCaseInfoResult> list = extApiDefinitionExecResultMapper.findFaliureCaseInTestPlanByProjectIDAndExecuteTimeAndLimitNumber(projectId, selectFuntionCase, startTime.getTime()); List<ExecutedCaseInfoResult> list = extApiDefinitionExecResultMapper.findFailureCaseInTestPlanByProjectIDAndExecuteTimeAndLimitNumber(projectId, selectFunctionCase, startTime.getTime());
List<ExecutedCaseInfoResult> returnList = new ArrayList<>(limitNumber); List<ExecutedCaseInfoResult> returnList = new ArrayList<>(limitNumber);

View File

@ -1919,11 +1919,11 @@ public class ApiDefinitionService {
for (EsbApiParamsWithBLOBs model : apiImport.getEsbApiParamsMap().values()) { for (EsbApiParamsWithBLOBs model : apiImport.getEsbApiParamsMap().values()) {
EsbApiParamsExample example = new EsbApiParamsExample(); EsbApiParamsExample example = new EsbApiParamsExample();
example.createCriteria().andResourceIdEqualTo(model.getResourceId()); example.createCriteria().andResourceIdEqualTo(model.getResourceId());
List<EsbApiParamsWithBLOBs> exiteModelList = esbApiParamsMapper.selectByExampleWithBLOBs(example); List<EsbApiParamsWithBLOBs> exitModelList = esbApiParamsMapper.selectByExampleWithBLOBs(example);
if (exiteModelList.isEmpty()) { if (exitModelList.isEmpty()) {
esbApiParamsMapper.insert(model); esbApiParamsMapper.insert(model);
} else { } else {
model.setId(exiteModelList.get(0).getId()); model.setId(exitModelList.get(0).getId());
esbApiParamsMapper.updateByPrimaryKeyWithBLOBs(model); esbApiParamsMapper.updateByPrimaryKeyWithBLOBs(model);
} }
} }

View File

@ -624,11 +624,11 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
Map<String, List<ApiModule>> pidChildrenMap, Map<String, String> idPathMap, Map<String, List<ApiModule>> pidChildrenMap, Map<String, String> idPathMap,
Map<String, ApiModuleDTO> idModuleMap, ApiTestImportRequest request, Map<String, ApiModuleDTO> idModuleMap, ApiTestImportRequest request,
Boolean fullCoverage, List<ApiTestCaseWithBLOBs> importCases, Map<String, EsbApiParamsWithBLOBs> esbApiParamsMap) { Boolean fullCoverage, List<ApiTestCaseWithBLOBs> importCases, Map<String, EsbApiParamsWithBLOBs> esbApiParamsMap) {
List<ApiDefinitionWithBLOBs> optionDatas = new ArrayList<>(); List<ApiDefinitionWithBLOBs> optionData = new ArrayList<>();
//系统原有的需要更新的list //系统原有的需要更新的list
List<ApiDefinitionWithBLOBs> toUpdateList = new ArrayList<>(); List<ApiDefinitionWithBLOBs> toUpdateList = new ArrayList<>();
//去重TCP,SQL,DUBBO 模块下名称唯一 //去重TCP,SQL,DUBBO 模块下名称唯一
removeRepeatOrigin(data, fullCoverage, optionDatas); removeRepeatOrigin(data, fullCoverage, optionData);
//上传文件时选的模块ID //上传文件时选的模块ID
String chooseModuleId = request.getModuleId(); String chooseModuleId = request.getModuleId();
//获取选中的模块 //获取选中的模块
@ -642,9 +642,9 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
//需要新增的模块key 为模块路径 //需要新增的模块key 为模块路径
Map<String, ApiModule> moduleMap = new HashMap<>(); Map<String, ApiModule> moduleMap = new HashMap<>();
//处理模块 //处理模块
setModule(moduleMap, pidChildrenMap, idPathMap, idModuleMap, optionDatas, chooseModule); setModule(moduleMap, pidChildrenMap, idPathMap, idModuleMap, optionData, chooseModule);
List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs = getApiDefinitionWithBLOBsList(request, optionDatas); List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs = getApiDefinitionWithBLOBsList(request, optionData);
//重复接口的case //重复接口的case
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>(); Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
@ -658,17 +658,17 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
String chooseModuleParentId = getChooseModuleParentId(chooseModule); String chooseModuleParentId = getChooseModuleParentId(chooseModule);
String chooseModulePath = getChooseModulePath(idPathMap, chooseModule, chooseModuleParentId); String chooseModulePath = getChooseModulePath(idPathMap, chooseModule, chooseModuleParentId);
if (fullCoverage) { if (fullCoverage) {
List<ApiDefinitionWithBLOBs> singleOptionDatas = new ArrayList<>(); List<ApiDefinitionWithBLOBs> singleOptionData = new ArrayList<>();
removeOtherChooseModuleRepeat(optionDatas, singleOptionDatas, chooseModulePath); removeOtherChooseModuleRepeat(optionData, singleOptionData, chooseModulePath);
optionDatas = singleOptionDatas; optionData = singleOptionData;
optionMap = optionDatas.stream().collect(Collectors.toMap(t -> t.getName().concat(chooseModulePath), api -> api)); optionMap = optionData.stream().collect(Collectors.toMap(t -> t.getName().concat(chooseModulePath), api -> api));
} else { } else {
getNoHChooseModuleUrlRepeatOptionMap(optionDatas, optionMap, chooseModulePath); getNoHChooseModuleUrlRepeatOptionMap(optionData, optionMap, chooseModulePath);
} }
repeatDataMap = repeatApiDefinitionWithBLOBs.stream().filter(t -> t.getModuleId().equals(chooseModuleId)).collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api)); repeatDataMap = repeatApiDefinitionWithBLOBs.stream().filter(t -> t.getModuleId().equals(chooseModuleId)).collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api));
} }
} else { } else {
buildOptionMap(optionDatas, optionMap); buildOptionMap(optionData, optionMap);
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api)); repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api));
} }
@ -685,32 +685,32 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
} else { } else {
//不覆盖 //不覆盖
removeRepeat(optionDatas, optionMap, repeatDataMap, moduleMap, versionId, optionDataCases); removeRepeat(optionData, optionMap, repeatDataMap, moduleMap, versionId, optionDataCases);
} }
//系统内检查重复 //系统内检查重复
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api)); repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api));
optionMap = optionDatas.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api)); optionMap = optionData.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getModulePath()), api -> api));
if (fullCoverage) { if (fullCoverage) {
cover(moduleMap, toUpdateList, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap, esbApiParamsMap); cover(moduleMap, toUpdateList, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap, esbApiParamsMap);
} else { } else {
//不覆盖,同一接口不做更新 //不覆盖,同一接口不做更新
removeRepeat(optionDatas, optionMap, repeatDataMap, moduleMap, versionId, optionDataCases); removeRepeat(optionData, optionMap, repeatDataMap, moduleMap, versionId, optionDataCases);
} }
} }
if (optionDatas.isEmpty()) { if (optionData.isEmpty()) {
moduleMap = new HashMap<>(); moduleMap = new HashMap<>();
} }
//将原来的case和更改的case组合在一起为了同步的设置 //将原来的case和更改的case组合在一起为了同步的设置
List<String> caseIds = optionDataCases.stream().map(ApiTestCase::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList()); List<String> caseIds = optionDataCases.stream().map(ApiTestCase::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList());
buildCases(optionDataCases, oldCaseMap, caseIds); buildCases(optionDataCases, oldCaseMap, caseIds);
return getUpdateApiModuleDTO(moduleMap, toUpdateList, optionDatas, optionDataCases); return getUpdateApiModuleDTO(moduleMap, toUpdateList, optionData, optionDataCases);
} }
private void getNoHChooseModuleUrlRepeatOptionMap(List<ApiDefinitionWithBLOBs> optionDatas, Map<String, ApiDefinitionWithBLOBs> optionMap, String chooseModulePath) { private void getNoHChooseModuleUrlRepeatOptionMap(List<ApiDefinitionWithBLOBs> optionData, Map<String, ApiDefinitionWithBLOBs> optionMap, String chooseModulePath) {
for (ApiDefinitionWithBLOBs optionDatum : optionDatas) { for (ApiDefinitionWithBLOBs optionDatum : optionData) {
if (optionDatum.getModulePath() == null) { if (optionDatum.getModulePath() == null) {
optionMap.put(optionDatum.getName().concat(chooseModulePath), optionDatum); optionMap.put(optionDatum.getName().concat(chooseModulePath), optionDatum);
} else { } else {
@ -719,15 +719,15 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
} }
private void removeOtherChooseModuleRepeat(List<ApiDefinitionWithBLOBs> optionDatas, List<ApiDefinitionWithBLOBs> singleOptionDatas, String chooseModulePath) { private void removeOtherChooseModuleRepeat(List<ApiDefinitionWithBLOBs> optionData, List<ApiDefinitionWithBLOBs> singleOptionData, String chooseModulePath) {
LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = optionDatas.stream().collect(Collectors.groupingBy(t -> t.getName().concat(chooseModulePath), LinkedHashMap::new, Collectors.toList())); LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = optionData.stream().collect(Collectors.groupingBy(t -> t.getName().concat(chooseModulePath), LinkedHashMap::new, Collectors.toList()));
methodPathMap.forEach((k, v) -> { methodPathMap.forEach((k, v) -> {
singleOptionDatas.add(v.get(v.size() - 1)); singleOptionData.add(v.get(v.size() - 1));
}); });
} }
private void buildOptionMap(List<ApiDefinitionWithBLOBs> optionDatas, Map<String, ApiDefinitionWithBLOBs> optionMap) { private void buildOptionMap(List<ApiDefinitionWithBLOBs> optionData, Map<String, ApiDefinitionWithBLOBs> optionMap) {
for (ApiDefinitionWithBLOBs optionDatum : optionDatas) { for (ApiDefinitionWithBLOBs optionDatum : optionData) {
if (optionDatum.getModulePath() == null) { if (optionDatum.getModulePath() == null) {
optionMap.put(optionDatum.getName(), optionDatum); optionMap.put(optionDatum.getName(), optionDatum);
} else { } else {
@ -736,9 +736,9 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
} }
private List<ApiDefinitionWithBLOBs> getApiDefinitionWithBLOBsList(ApiTestImportRequest request, List<ApiDefinitionWithBLOBs> optionDatas) { private List<ApiDefinitionWithBLOBs> getApiDefinitionWithBLOBsList(ApiTestImportRequest request, List<ApiDefinitionWithBLOBs> optionData) {
//处理数据 //处理数据
List<String> nameList = optionDatas.stream().map(ApiDefinitionWithBLOBs::getName).collect(Collectors.toList()); List<String> nameList = optionData.stream().map(ApiDefinitionWithBLOBs::getName).collect(Collectors.toList());
String projectId = request.getProjectId(); String projectId = request.getProjectId();
String protocol = request.getProtocol(); String protocol = request.getProtocol();
//获取系统内重复数据 //获取系统内重复数据
@ -750,12 +750,12 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
Map<String, ApiModuleDTO> idModuleMap, ApiTestImportRequest request, Map<String, ApiModuleDTO> idModuleMap, ApiTestImportRequest request,
Boolean fullCoverage, boolean urlRepeat, List<ApiTestCaseWithBLOBs> importCases) { Boolean fullCoverage, boolean urlRepeat, List<ApiTestCaseWithBLOBs> importCases) {
List<ApiDefinitionWithBLOBs> optionDatas = new ArrayList<>(); List<ApiDefinitionWithBLOBs> optionData = new ArrayList<>();
//系统原有的需要更新的list //系统原有的需要更新的list
List<ApiDefinitionWithBLOBs> toUpdateList = new ArrayList<>(); List<ApiDefinitionWithBLOBs> toUpdateList = new ArrayList<>();
//去重 如果url可重复 则模块+名称+请求方式+路径 唯一否则 请求方式+路径唯一 //去重 如果url可重复 则模块+名称+请求方式+路径 唯一否则 请求方式+路径唯一
//覆盖模式留重复的最后一个不覆盖留第一个 //覆盖模式留重复的最后一个不覆盖留第一个
removeHttpRepeat(data, fullCoverage, urlRepeat, optionDatas); removeHttpRepeat(data, fullCoverage, urlRepeat, optionData);
//上传文件时选的模块ID //上传文件时选的模块ID
String chooseModuleId = request.getModuleId(); String chooseModuleId = request.getModuleId();
@ -770,23 +770,23 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
//需要新增的模块key 为模块路径 //需要新增的模块key 为模块路径
Map<String, ApiModule> moduleMap = new HashMap<>(); Map<String, ApiModule> moduleMap = new HashMap<>();
//处理模块 //处理模块
setModule(moduleMap, pidChildrenMap, idPathMap, idModuleMap, optionDatas, chooseModule); setModule(moduleMap, pidChildrenMap, idPathMap, idModuleMap, optionData, chooseModule);
if (urlRepeat) { if (urlRepeat) {
optionDatas = dealHttpUrlRepeat(chooseModule, idPathMap, optionDatas, fullCoverage, request, moduleMap, toUpdateList, optionDataCases); optionData = dealHttpUrlRepeat(chooseModule, idPathMap, optionData, fullCoverage, request, moduleMap, toUpdateList, optionDataCases);
} else { } else {
dealHttpUrlNoRepeat(optionDatas, fullCoverage, request, moduleMap, toUpdateList, optionDataCases); dealHttpUrlNoRepeat(optionData, fullCoverage, request, moduleMap, toUpdateList, optionDataCases);
} }
if (optionDatas.isEmpty()) { if (optionData.isEmpty()) {
moduleMap = new HashMap<>(); moduleMap = new HashMap<>();
} }
return getUpdateApiModuleDTO(moduleMap, toUpdateList, optionDatas, optionDataCases); return getUpdateApiModuleDTO(moduleMap, toUpdateList, optionData, optionDataCases);
} }
private void dealHttpUrlNoRepeat(List<ApiDefinitionWithBLOBs> optionDatas, private void dealHttpUrlNoRepeat(List<ApiDefinitionWithBLOBs> optionData,
Boolean fullCoverage, ApiTestImportRequest request, Map<String, ApiModule> moduleMap, Boolean fullCoverage, ApiTestImportRequest request, Map<String, ApiModule> moduleMap,
List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiTestCaseWithBLOBs> optionDataCases) { List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiTestCaseWithBLOBs> optionDataCases) {
@ -798,13 +798,13 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
Boolean fullCoverageApi = getFullCoverageApi(request); Boolean fullCoverageApi = getFullCoverageApi(request);
String projectId = request.getProjectId(); String projectId = request.getProjectId();
//系统内重复的数据 //系统内重复的数据
List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByBLOBs(optionDatas, projectId); List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByBLOBs(optionData, projectId);
//这个是系统内重复的数据 //这个是系统内重复的数据
Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.groupingBy(t -> t.getMethod().concat(t.getPath()))); Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.groupingBy(t -> t.getMethod().concat(t.getPath())));
//按照原来的顺序 //按照原来的顺序
optionMap = optionDatas.stream().collect(Collectors.toMap(t -> t.getMethod().concat(t.getPath()), api -> api)); optionMap = optionData.stream().collect(Collectors.toMap(t -> t.getMethod().concat(t.getPath()), api -> api));
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>(); Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>();
@ -816,18 +816,18 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
if (fullCoverage) { if (fullCoverage) {
if (fullCoverageApi) { if (fullCoverageApi) {
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
startCoverModule(toUpdateList, optionDatas, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap); startCoverModule(toUpdateList, optionData, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap);
} }
} else { } else {
//不覆盖模块 //不覆盖模块
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
startCover(toUpdateList, optionDatas, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap); startCover(toUpdateList, optionData, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap);
} }
} }
} else { } else {
//不覆盖,同一接口不做更新 //不覆盖,同一接口不做更新
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
removeSameData(repeatDataMap, optionMap, optionDatas, moduleMap, versionId, optionDataCases); removeSameData(repeatDataMap, optionMap, optionData, moduleMap, versionId, optionDataCases);
} }
} }
//将原来的case和更改的case组合在一起为了同步的设置 //将原来的case和更改的case组合在一起为了同步的设置
@ -835,7 +835,7 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
buildCases(optionDataCases, oldCaseMap, caseIds); buildCases(optionDataCases, oldCaseMap, caseIds);
} }
private List<ApiDefinitionWithBLOBs> dealHttpUrlRepeat(ApiModuleDTO chooseModule, Map<String, String> idPathMap, List<ApiDefinitionWithBLOBs> optionDatas, private List<ApiDefinitionWithBLOBs> dealHttpUrlRepeat(ApiModuleDTO chooseModule, Map<String, String> idPathMap, List<ApiDefinitionWithBLOBs> optionData,
Boolean fullCoverage, ApiTestImportRequest request, Map<String, ApiModule> moduleMap, Boolean fullCoverage, ApiTestImportRequest request, Map<String, ApiModule> moduleMap,
List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiTestCaseWithBLOBs> optionDataCases) { List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiTestCaseWithBLOBs> optionDataCases) {
String updateVersionId = getUpdateVersionId(request); String updateVersionId = getUpdateVersionId(request);
@ -843,7 +843,7 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
Boolean fullCoverageApi = getFullCoverageApi(request); Boolean fullCoverageApi = getFullCoverageApi(request);
String projectId = request.getProjectId(); String projectId = request.getProjectId();
//系统内重复的数据 //系统内重复的数据
List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByBLOBs(optionDatas, projectId); List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByBLOBs(optionData, projectId);
//这个是名称加请求方式加路径加模块为key的map 就是为了去重 //这个是名称加请求方式加路径加模块为key的map 就是为了去重
Map<String, ApiDefinitionWithBLOBs> optionMap = new HashMap<>(); Map<String, ApiDefinitionWithBLOBs> optionMap = new HashMap<>();
@ -856,17 +856,17 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
String chooseModulePath = getChooseModulePath(idPathMap, chooseModule, chooseModuleParentId); String chooseModulePath = getChooseModulePath(idPathMap, chooseModule, chooseModuleParentId);
//这样的过滤规则下可能存在重复接口如果是覆盖模块需要按照去重规则再次去重否则就加上接口原有的模块 //这样的过滤规则下可能存在重复接口如果是覆盖模块需要按照去重规则再次去重否则就加上接口原有的模块
if (fullCoverage) { if (fullCoverage) {
List<ApiDefinitionWithBLOBs> singleOptionDatas = new ArrayList<>(); List<ApiDefinitionWithBLOBs> singleOptionData = new ArrayList<>();
removeHttpChooseModuleRepeat(optionDatas, singleOptionDatas, chooseModulePath); removeHttpChooseModuleRepeat(optionData, singleOptionData, chooseModulePath);
optionDatas = singleOptionDatas; optionData = singleOptionData;
optionMap = optionDatas.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(chooseModulePath), api -> api)); optionMap = optionData.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(chooseModulePath), api -> api));
} else { } else {
getChooseModuleUrlRepeatOptionMap(optionDatas, optionMap, chooseModulePath); getChooseModuleUrlRepeatOptionMap(optionData, optionMap, chooseModulePath);
} }
repeatDataMap = repeatApiDefinitionWithBLOBs.stream().filter(t -> t.getModuleId().equals(chooseModule.getId())).collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath()))); repeatDataMap = repeatApiDefinitionWithBLOBs.stream().filter(t -> t.getModuleId().equals(chooseModule.getId())).collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath())));
} else { } else {
//否则在整个系统中过滤 //否则在整个系统中过滤
getUrlRepeatOptionMap(optionDatas, optionMap); getUrlRepeatOptionMap(optionData, optionMap);
repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath()))); repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath())));
} }
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>(); Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>();
@ -879,48 +879,48 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
//允许覆盖模块用导入的重复数据的最后一条覆盖查询的所有重复数据; case 在覆盖的时候是拼接到原来的casename唯一不覆盖就用原来的 //允许覆盖模块用导入的重复数据的最后一条覆盖查询的所有重复数据; case 在覆盖的时候是拼接到原来的casename唯一不覆盖就用原来的
if (fullCoverageApi) { if (fullCoverageApi) {
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
startCoverModule(toUpdateList, optionDatas, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap); startCoverModule(toUpdateList, optionData, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap);
} }
} else { } else {
//覆盖但不覆盖模块 //覆盖但不覆盖模块
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
//过滤同一层级重复模块导入文件没有新增接口无需创建接口模块 //过滤同一层级重复模块导入文件没有新增接口无需创建接口模块
moduleMap = judgeModuleMap(moduleMap, optionMap, repeatDataMap); moduleMap = judgeModuleMap(moduleMap, optionMap, repeatDataMap);
startCover(toUpdateList, optionDatas, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap); startCover(toUpdateList, optionData, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap);
} }
} }
} else { } else {
//不覆盖,同一接口不做更新;可能创建新版本case也直接创建 //不覆盖,同一接口不做更新;可能创建新版本case也直接创建
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
removeSameData(repeatDataMap, optionMap, optionDatas, moduleMap, versionId, optionDataCases); removeSameData(repeatDataMap, optionMap, optionData, moduleMap, versionId, optionDataCases);
} }
} }
//最后在整个体统内检查一遍防止在有选择的模块时未找到重复直接创建的情况 //最后在整个体统内检查一遍防止在有选择的模块时未找到重复直接创建的情况
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath()))); repeatDataMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath())));
optionMap = optionDatas.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath()), api -> api)); optionMap = optionData.stream().collect(Collectors.toMap(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(t.getModulePath()), api -> api));
if (fullCoverage) { if (fullCoverage) {
startCover(toUpdateList, optionDatas, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap); startCover(toUpdateList, optionData, optionMap, repeatDataMap, updateVersionId, optionDataCases, oldCaseMap);
} else { } else {
//不覆盖,同一接口不做更新 //不覆盖,同一接口不做更新
if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) { if (CollectionUtils.isNotEmpty(repeatApiDefinitionWithBLOBs)) {
removeSameData(repeatDataMap, optionMap, optionDatas, moduleMap, versionId, optionDataCases); removeSameData(repeatDataMap, optionMap, optionData, moduleMap, versionId, optionDataCases);
} }
} }
} }
//将原来的case和更改的case组合在一起为了同步的设置 //将原来的case和更改的case组合在一起为了同步的设置
List<String> caseIds = optionDataCases.stream().map(ApiTestCase::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList()); List<String> caseIds = optionDataCases.stream().map(ApiTestCase::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList());
buildCases(optionDataCases, oldCaseMap, caseIds); buildCases(optionDataCases, oldCaseMap, caseIds);
return optionDatas; return optionData;
} }
private void removeHttpChooseModuleRepeat(List<ApiDefinitionWithBLOBs> optionDatas, List<ApiDefinitionWithBLOBs> singleOptionDatas, String chooseModulePath) { private void removeHttpChooseModuleRepeat(List<ApiDefinitionWithBLOBs> optionData, List<ApiDefinitionWithBLOBs> singleOptionData, String chooseModulePath) {
LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = optionDatas.stream().collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(chooseModulePath), LinkedHashMap::new, Collectors.toList())); LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = optionData.stream().collect(Collectors.groupingBy(t -> t.getName().concat(t.getMethod()).concat(t.getPath()).concat(chooseModulePath), LinkedHashMap::new, Collectors.toList()));
methodPathMap.forEach((k, v) -> singleOptionDatas.add(v.get(v.size() - 1))); methodPathMap.forEach((k, v) -> singleOptionData.add(v.get(v.size() - 1)));
} }
private void getChooseModuleUrlRepeatOptionMap(List<ApiDefinitionWithBLOBs> optionDatas, Map<String, ApiDefinitionWithBLOBs> optionMap, String chooseModulePath) { private void getChooseModuleUrlRepeatOptionMap(List<ApiDefinitionWithBLOBs> optionData, Map<String, ApiDefinitionWithBLOBs> optionMap, String chooseModulePath) {
for (ApiDefinitionWithBLOBs optionDatum : optionDatas) { for (ApiDefinitionWithBLOBs optionDatum : optionData) {
if (optionDatum.getModulePath() == null) { if (optionDatum.getModulePath() == null) {
optionMap.put(optionDatum.getName().concat(optionDatum.getMethod()).concat(optionDatum.getPath()).concat(chooseModulePath), optionDatum); optionMap.put(optionDatum.getName().concat(optionDatum.getMethod()).concat(optionDatum.getPath()).concat(chooseModulePath), optionDatum);
} else { } else {
@ -929,8 +929,8 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
} }
private void getUrlRepeatOptionMap(List<ApiDefinitionWithBLOBs> optionDatas, Map<String, ApiDefinitionWithBLOBs> optionMap) { private void getUrlRepeatOptionMap(List<ApiDefinitionWithBLOBs> optionData, Map<String, ApiDefinitionWithBLOBs> optionMap) {
for (ApiDefinitionWithBLOBs optionDatum : optionDatas) { for (ApiDefinitionWithBLOBs optionDatum : optionData) {
if (optionDatum.getModulePath() == null) { if (optionDatum.getModulePath() == null) {
optionMap.put(optionDatum.getName().concat(optionDatum.getMethod()).concat(optionDatum.getPath()), optionDatum); optionMap.put(optionDatum.getName().concat(optionDatum.getMethod()).concat(optionDatum.getPath()), optionDatum);
} else { } else {
@ -1002,23 +1002,23 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
private UpdateApiModuleDTO getUpdateApiModuleDTO(Map<String, ApiModule> moduleMap, List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionDatas, List<ApiTestCaseWithBLOBs> optionDataCases) { private UpdateApiModuleDTO getUpdateApiModuleDTO(Map<String, ApiModule> moduleMap, List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionData, List<ApiTestCaseWithBLOBs> optionDataCases) {
UpdateApiModuleDTO updateApiModuleDTO = new UpdateApiModuleDTO(); UpdateApiModuleDTO updateApiModuleDTO = new UpdateApiModuleDTO();
updateApiModuleDTO.setModuleList(new ArrayList<>(moduleMap.values())); updateApiModuleDTO.setModuleList(new ArrayList<>(moduleMap.values()));
updateApiModuleDTO.setNeedUpdateList(toUpdateList); updateApiModuleDTO.setNeedUpdateList(toUpdateList);
updateApiModuleDTO.setDefinitionWithBLOBs(optionDatas); updateApiModuleDTO.setDefinitionWithBLOBs(optionData);
updateApiModuleDTO.setCaseWithBLOBs(optionDataCases); updateApiModuleDTO.setCaseWithBLOBs(optionDataCases);
return updateApiModuleDTO; return updateApiModuleDTO;
} }
private void removeRepeat(List<ApiDefinitionWithBLOBs> optionDatas, Map<String, ApiDefinitionWithBLOBs> nameModuleMap, private void removeRepeat(List<ApiDefinitionWithBLOBs> optionData, Map<String, ApiDefinitionWithBLOBs> nameModuleMap,
Map<String, ApiDefinitionWithBLOBs> repeatDataMap, Map<String, ApiModule> moduleMap, Map<String, ApiDefinitionWithBLOBs> repeatDataMap, Map<String, ApiModule> moduleMap,
String versionId, String versionId,
List<ApiTestCaseWithBLOBs> optionDataCases) { List<ApiTestCaseWithBLOBs> optionDataCases) {
if (MapUtils.isEmpty(nameModuleMap) || MapUtils.isEmpty(repeatDataMap)) { if (MapUtils.isEmpty(nameModuleMap) || MapUtils.isEmpty(repeatDataMap)) {
return; return;
} }
Map<String, List<ApiDefinitionWithBLOBs>> moduleOptionData = optionDatas.stream().collect(Collectors.groupingBy(ApiDefinition::getModulePath)); Map<String, List<ApiDefinitionWithBLOBs>> moduleOptionData = optionData.stream().collect(Collectors.groupingBy(ApiDefinition::getModulePath));
repeatDataMap.forEach((k, v) -> { repeatDataMap.forEach((k, v) -> {
ApiDefinitionWithBLOBs apiDefinitionWithBLOBs = nameModuleMap.get(k); ApiDefinitionWithBLOBs apiDefinitionWithBLOBs = nameModuleMap.get(k);
if (apiDefinitionWithBLOBs == null){ if (apiDefinitionWithBLOBs == null){
@ -1027,15 +1027,15 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
Map<String, List<ApiTestCaseWithBLOBs>> definitionIdCaseMAp = optionDataCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId)); Map<String, List<ApiTestCaseWithBLOBs>> definitionIdCaseMAp = optionDataCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId));
List<ApiTestCaseWithBLOBs> distinctNameCases = definitionIdCaseMAp.get(apiDefinitionWithBLOBs.getId()); List<ApiTestCaseWithBLOBs> distinctNameCases = definitionIdCaseMAp.get(apiDefinitionWithBLOBs.getId());
String modulePath = apiDefinitionWithBLOBs.getModulePath(); String modulePath = apiDefinitionWithBLOBs.getModulePath();
List<ApiDefinitionWithBLOBs> moduleDatas = moduleOptionData.get(modulePath); List<ApiDefinitionWithBLOBs> moduleData = moduleOptionData.get(modulePath);
if (moduleDatas != null && moduleDatas.size() <= 1) { if (moduleData != null && moduleData.size() <= 1) {
moduleMap.remove(modulePath); moduleMap.remove(modulePath);
removeModulePath(moduleMap, moduleOptionData, modulePath); removeModulePath(moduleMap, moduleOptionData, modulePath);
moduleDatas.remove(apiDefinitionWithBLOBs); moduleData.remove(apiDefinitionWithBLOBs);
} }
//不覆盖选择版本如果被选版本有同接口不导入否则创建新版本接口 //不覆盖选择版本如果被选版本有同接口不导入否则创建新版本接口
if (v.getVersionId().equals(versionId)) { if (v.getVersionId().equals(versionId)) {
optionDatas.remove(apiDefinitionWithBLOBs); optionData.remove(apiDefinitionWithBLOBs);
if (CollectionUtils.isNotEmpty(distinctNameCases)) { if (CollectionUtils.isNotEmpty(distinctNameCases)) {
distinctNameCases.forEach(optionDataCases::remove); distinctNameCases.forEach(optionDataCases::remove);
} }
@ -1148,29 +1148,29 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
}); });
} }
private void removeRepeatOrigin(List<ApiDefinitionWithBLOBs> data, Boolean fullCoverage, List<ApiDefinitionWithBLOBs> optionDatas) { private void removeRepeatOrigin(List<ApiDefinitionWithBLOBs> data, Boolean fullCoverage, List<ApiDefinitionWithBLOBs> optionData) {
LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = data.stream().collect(Collectors.groupingBy(t -> t.getName() + (t.getModulePath() == null ? StringUtils.EMPTY : t.getModulePath()), LinkedHashMap::new, Collectors.toList())); LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = data.stream().collect(Collectors.groupingBy(t -> t.getName() + (t.getModulePath() == null ? StringUtils.EMPTY : t.getModulePath()), LinkedHashMap::new, Collectors.toList()));
if (fullCoverage) { if (fullCoverage) {
methodPathMap.forEach((k, v) -> optionDatas.add(v.get(v.size() - 1))); methodPathMap.forEach((k, v) -> optionData.add(v.get(v.size() - 1)));
} else { } else {
methodPathMap.forEach((k, v) -> optionDatas.add(v.get(0))); methodPathMap.forEach((k, v) -> optionData.add(v.get(0)));
} }
} }
private void removeHttpRepeat(List<ApiDefinitionWithBLOBs> data, Boolean fullCoverage, boolean urlRepeat, List<ApiDefinitionWithBLOBs> optionDatas) { private void removeHttpRepeat(List<ApiDefinitionWithBLOBs> data, Boolean fullCoverage, boolean urlRepeat, List<ApiDefinitionWithBLOBs> optionData) {
if (urlRepeat) { if (urlRepeat) {
LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = data.stream().collect(Collectors.groupingBy(t -> t.getName() + t.getMethod() + t.getPath() + (t.getModulePath() == null ? StringUtils.EMPTY : t.getModulePath()), LinkedHashMap::new, Collectors.toList())); LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = data.stream().collect(Collectors.groupingBy(t -> t.getName() + t.getMethod() + t.getPath() + (t.getModulePath() == null ? StringUtils.EMPTY : t.getModulePath()), LinkedHashMap::new, Collectors.toList()));
if (fullCoverage) { if (fullCoverage) {
methodPathMap.forEach((k, v) -> optionDatas.add(v.get(v.size() - 1))); methodPathMap.forEach((k, v) -> optionData.add(v.get(v.size() - 1)));
} else { } else {
methodPathMap.forEach((k, v) -> optionDatas.add(v.get(0))); methodPathMap.forEach((k, v) -> optionData.add(v.get(0)));
} }
} else { } else {
LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = data.stream().collect(Collectors.groupingBy(t -> t.getMethod().concat(t.getPath()), LinkedHashMap::new, Collectors.toList())); LinkedHashMap<String, List<ApiDefinitionWithBLOBs>> methodPathMap = data.stream().collect(Collectors.groupingBy(t -> t.getMethod().concat(t.getPath()), LinkedHashMap::new, Collectors.toList()));
if (fullCoverage) { if (fullCoverage) {
methodPathMap.forEach((k, v) -> optionDatas.add(v.get(v.size() - 1))); methodPathMap.forEach((k, v) -> optionData.add(v.get(v.size() - 1)));
} else { } else {
methodPathMap.forEach((k, v) -> optionDatas.add(v.get(0))); methodPathMap.forEach((k, v) -> optionData.add(v.get(0)));
} }
} }
} }
@ -1196,26 +1196,26 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
private void removeSameData(Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap, Map<String, ApiDefinitionWithBLOBs> methodPathMap, private void removeSameData(Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap, Map<String, ApiDefinitionWithBLOBs> methodPathMap,
List<ApiDefinitionWithBLOBs> optionDatas, Map<String, ApiModule> moduleMap, String versionId, List<ApiDefinitionWithBLOBs> optionData, Map<String, ApiModule> moduleMap, String versionId,
List<ApiTestCaseWithBLOBs> optionDataCases) { List<ApiTestCaseWithBLOBs> optionDataCases) {
Map<String, List<ApiDefinitionWithBLOBs>> moduleOptionData = optionDatas.stream().collect(Collectors.groupingBy(ApiDefinition::getModulePath)); Map<String, List<ApiDefinitionWithBLOBs>> moduleOptionData = optionData.stream().collect(Collectors.groupingBy(ApiDefinition::getModulePath));
repeatDataMap.forEach((k, v) -> { repeatDataMap.forEach((k, v) -> {
ApiDefinitionWithBLOBs apiDefinitionWithBLOBs = methodPathMap.get(k); ApiDefinitionWithBLOBs apiDefinitionWithBLOBs = methodPathMap.get(k);
if (apiDefinitionWithBLOBs != null) { if (apiDefinitionWithBLOBs != null) {
Map<String, List<ApiTestCaseWithBLOBs>> definitionIdCaseMAp = optionDataCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId)); Map<String, List<ApiTestCaseWithBLOBs>> definitionIdCaseMAp = optionDataCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId));
List<ApiTestCaseWithBLOBs> distinctNameCases = definitionIdCaseMAp.get(apiDefinitionWithBLOBs.getId()); List<ApiTestCaseWithBLOBs> distinctNameCases = definitionIdCaseMAp.get(apiDefinitionWithBLOBs.getId());
String modulePath = apiDefinitionWithBLOBs.getModulePath(); String modulePath = apiDefinitionWithBLOBs.getModulePath();
List<ApiDefinitionWithBLOBs> moduleDatas = moduleOptionData.get(modulePath); List<ApiDefinitionWithBLOBs> moduleData = moduleOptionData.get(modulePath);
if (moduleDatas != null && moduleDatas.size() <= 1) { if (moduleData != null && moduleData.size() <= 1) {
moduleMap.remove(modulePath); moduleMap.remove(modulePath);
removeModulePath(moduleMap, moduleOptionData, modulePath); removeModulePath(moduleMap, moduleOptionData, modulePath);
moduleDatas.remove(apiDefinitionWithBLOBs); moduleData.remove(apiDefinitionWithBLOBs);
} }
//不覆盖选择版本如果被选版本有同接口不导入否则创建新版本接口 //不覆盖选择版本如果被选版本有同接口不导入否则创建新版本接口
List<ApiDefinitionWithBLOBs> sameVersionList = v.stream().filter(t -> t.getVersionId().equals(versionId)).collect(Collectors.toList()); List<ApiDefinitionWithBLOBs> sameVersionList = v.stream().filter(t -> t.getVersionId().equals(versionId)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(sameVersionList)) { if (CollectionUtils.isNotEmpty(sameVersionList)) {
optionDatas.remove(apiDefinitionWithBLOBs); optionData.remove(apiDefinitionWithBLOBs);
if (CollectionUtils.isNotEmpty(distinctNameCases)) { if (CollectionUtils.isNotEmpty(distinctNameCases)) {
distinctNameCases.forEach(optionDataCases::remove); distinctNameCases.forEach(optionDataCases::remove);
} }
@ -1253,7 +1253,7 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
private void startCoverModule(List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionDatas, private void startCoverModule(List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionData,
Map<String, ApiDefinitionWithBLOBs> methodPathMap, Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap, Map<String, ApiDefinitionWithBLOBs> methodPathMap, Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap,
String updateVersionId, List<ApiTestCaseWithBLOBs> optionDataCases, String updateVersionId, List<ApiTestCaseWithBLOBs> optionDataCases,
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap) { Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap) {
@ -1290,11 +1290,11 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
addNewVersionApi(apiDefinitionWithBLOBs, v.get(0), "update"); addNewVersionApi(apiDefinitionWithBLOBs, v.get(0), "update");
} else { } else {
optionDatas.remove(apiDefinitionWithBLOBs); optionData.remove(apiDefinitionWithBLOBs);
} }
} }
}); });
buildOtherParam(toUpdateList, optionDatas, coverApiList, updateApiList); buildOtherParam(toUpdateList, optionData, coverApiList, updateApiList);
} }
private void buildCaseList(Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap, private void buildCaseList(Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap,
@ -1365,7 +1365,7 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
} }
} }
private void startCover(List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionDatas, private void startCover(List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionData,
Map<String, ApiDefinitionWithBLOBs> methodPathMap, Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap, Map<String, ApiDefinitionWithBLOBs> methodPathMap, Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap,
String updateVersionId, List<ApiTestCaseWithBLOBs> optionDataCases, String updateVersionId, List<ApiTestCaseWithBLOBs> optionDataCases,
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap) { Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap) {
@ -1402,11 +1402,11 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
addNewVersionApi(apiDefinitionWithBLOBs, v.get(0), "update"); addNewVersionApi(apiDefinitionWithBLOBs, v.get(0), "update");
} else { } else {
optionDatas.remove(apiDefinitionWithBLOBs); optionData.remove(apiDefinitionWithBLOBs);
} }
} }
}); });
buildOtherParam(toUpdateList, optionDatas, coverApiList, updateApiList); buildOtherParam(toUpdateList, optionData, coverApiList, updateApiList);
} }
private Map<String, ApiModule> judgeModuleMap(Map<String, ApiModule> moduleMap, Map<String, ApiDefinitionWithBLOBs> methodPathMap, Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap) { private Map<String, ApiModule> judgeModuleMap(Map<String, ApiModule> moduleMap, Map<String, ApiDefinitionWithBLOBs> methodPathMap, Map<String, List<ApiDefinitionWithBLOBs>> repeatDataMap) {
@ -1422,8 +1422,8 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
return moduleMap; return moduleMap;
} }
private void buildOtherParam(List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionDatas, List<ApiDefinitionWithBLOBs> coverApiList, List<ApiDefinitionWithBLOBs> updateApiList) { private void buildOtherParam(List<ApiDefinitionWithBLOBs> toUpdateList, List<ApiDefinitionWithBLOBs> optionData, List<ApiDefinitionWithBLOBs> coverApiList, List<ApiDefinitionWithBLOBs> updateApiList) {
optionDatas.addAll(coverApiList); optionData.addAll(coverApiList);
toUpdateList.addAll(updateApiList); toUpdateList.addAll(updateApiList);
} }

View File

@ -211,12 +211,12 @@ public class ApiTestCaseService {
* 初始化部分参数 * 初始化部分参数
* *
* @param request * @param request
* @param setDefultOrders * @param setDefaultOrders
* @param checkThisWeekData * @param checkThisWeekData
* @return * @return
*/ */
private ApiTestCaseRequest initRequest(ApiTestCaseRequest request, boolean setDefultOrders, boolean checkThisWeekData) { private ApiTestCaseRequest initRequest(ApiTestCaseRequest request, boolean setDefaultOrders, boolean checkThisWeekData) {
if (setDefultOrders) { if (setDefaultOrders) {
List<OrderRequest> orders = ServiceUtils.getDefaultSortOrder(request.getOrders()); List<OrderRequest> orders = ServiceUtils.getDefaultSortOrder(request.getOrders());
orders.forEach(i -> { orders.forEach(i -> {
if (i.getName().equals("path")) { if (i.getName().equals("path")) {
@ -967,7 +967,7 @@ public class ApiTestCaseService {
} }
} }
public DeleteCheckResult checkDeleteDatas(ApiTestBatchRequest request) { public DeleteCheckResult checkDeleteData(ApiTestBatchRequest request) {
List<String> deleteIds = request.getIds(); List<String> deleteIds = request.getIds();
if (request.isSelectAll()) { if (request.isSelectAll()) {
deleteIds = this.getAllApiCaseIdsByFrontedSelect(request.getFilters(), request.getModuleIds(), request.getName(), request.getProjectId(), request.getProtocol(), request.getUnSelectIds(), request.getStatus(), request.getApiDefinitionId(), request.getCombine()); deleteIds = this.getAllApiCaseIdsByFrontedSelect(request.getFilters(), request.getModuleIds(), request.getName(), request.getProjectId(), request.getProtocol(), request.getUnSelectIds(), request.getStatus(), request.getApiDefinitionId(), request.getCombine());

View File

@ -160,7 +160,7 @@ public class EsbApiParamService {
public SaveApiDefinitionRequest updateEsbRequest(SaveApiDefinitionRequest request) { public SaveApiDefinitionRequest updateEsbRequest(SaveApiDefinitionRequest request) {
try { try {
//修改reqeust.parameters //修改request.parameters
//用户交互感受ESB的发送数据以报文模板为主框架同时前端不再有key-value的表格数据填充 //用户交互感受ESB的发送数据以报文模板为主框架同时前端不再有key-value的表格数据填充
//业务逻辑 发送ESB接口数据时使用报文模板中的数据同时报文模板中的${取值}目的是为了拼接数据结构(比如xml的子节点) //业务逻辑 发送ESB接口数据时使用报文模板中的数据同时报文模板中的${取值}目的是为了拼接数据结构(比如xml的子节点)
//代码实现: 此处打算解析前端传来的EsbDataStruct数据结构将数据结构按照报文模板中的${取值}为最高优先级组装keyValue对象这样Jmeter会自动拼装为合适的xml //代码实现: 此处打算解析前端传来的EsbDataStruct数据结构将数据结构按照报文模板中的${取值}为最高优先级组装keyValue对象这样Jmeter会自动拼装为合适的xml
@ -180,7 +180,7 @@ public class EsbApiParamService {
public SaveApiDefinitionRequest handleEsbRequest(SaveApiDefinitionRequest request) { public SaveApiDefinitionRequest handleEsbRequest(SaveApiDefinitionRequest request) {
try { try {
//修改reqeust.parameters //修改request.parameters
//用户交互感受ESB的发送数据以报文模板为主框架同时前端不再有key-value的表格数据填充 //用户交互感受ESB的发送数据以报文模板为主框架同时前端不再有key-value的表格数据填充
//业务逻辑 发送ESB接口数据时使用报文模板中的数据同时报文模板中的${取值}目的是为了拼接数据结构(比如xml的子节点) //业务逻辑 发送ESB接口数据时使用报文模板中的数据同时报文模板中的${取值}目的是为了拼接数据结构(比如xml的子节点)
//代码实现: 此处打算解析前端传来的EsbDataStruct数据结构将数据结构按照报文模板中的${取值}为最高优先级组装keyValue对象这样Jmeter会自动拼装为合适的xml //代码实现: 此处打算解析前端传来的EsbDataStruct数据结构将数据结构按照报文模板中的${取值}为最高优先级组装keyValue对象这样Jmeter会自动拼装为合适的xml
@ -200,7 +200,7 @@ public class EsbApiParamService {
// public RunDefinitionRequest handleEsbRequest(RunDefinitionRequest request) { // public RunDefinitionRequest handleEsbRequest(RunDefinitionRequest request) {
// try { // try {
// //修改reqeust.parameters // //修改request.parameters
// //用户交互感受ESB的发送数据以报文模板为主框架同时前端不再有key-value的表格数据填充 // //用户交互感受ESB的发送数据以报文模板为主框架同时前端不再有key-value的表格数据填充
// //业务逻辑 发送ESB接口数据时使用报文模板中的数据同时报文模板中的${取值}目的是为了拼接数据结构(比如xml的子节点) // //业务逻辑 发送ESB接口数据时使用报文模板中的数据同时报文模板中的${取值}目的是为了拼接数据结构(比如xml的子节点)
// //代码实现: 此处打算解析前端传来的EsbDataStruct数据结构将数据结构按照报文模板中的${取值}为最高优先级组装keyValue对象这样Jmeter会自动拼装为合适的xml // //代码实现: 此处打算解析前端传来的EsbDataStruct数据结构将数据结构按照报文模板中的${取值}为最高优先级组装keyValue对象这样Jmeter会自动拼装为合适的xml
@ -309,7 +309,7 @@ public class EsbApiParamService {
public SaveApiTestCaseRequest handleEsbRequest(SaveApiTestCaseRequest request) { public SaveApiTestCaseRequest handleEsbRequest(SaveApiTestCaseRequest request) {
try { try {
//修改reqeust.parameters, 将树结构类型数据转化为表格类型数据供执行时参数的提取 //修改request.parameters, 将树结构类型数据转化为表格类型数据供执行时参数的提取
if (StringUtils.isNotEmpty(request.getEsbDataStruct())) { if (StringUtils.isNotEmpty(request.getEsbDataStruct())) {
MsTCPSampler tcpSampler = (MsTCPSampler) request.getRequest(); MsTCPSampler tcpSampler = (MsTCPSampler) request.getRequest();
List<KeyValue> keyValueList = this.genKeyValueListByDataStruct(tcpSampler, request.getEsbDataStruct()); List<KeyValue> keyValueList = this.genKeyValueListByDataStruct(tcpSampler, request.getEsbDataStruct());
@ -325,7 +325,7 @@ public class EsbApiParamService {
public void handleEsbRequest(MsTCPSampler tcpSampler) { public void handleEsbRequest(MsTCPSampler tcpSampler) {
try { try {
//修改reqeust.parameters, 将树结构类型数据转化为表格类型数据供执行时参数的提取 //修改request.parameters, 将树结构类型数据转化为表格类型数据供执行时参数的提取
if (tcpSampler.getEsbDataStruct() != null) { if (tcpSampler.getEsbDataStruct() != null) {
List<KeyValue> keyValueList = this.genKeyValueListByDataStruct(tcpSampler, tcpSampler.getEsbDataStruct()); List<KeyValue> keyValueList = this.genKeyValueListByDataStruct(tcpSampler, tcpSampler.getEsbDataStruct());
tcpSampler.setParameters(keyValueList); tcpSampler.setParameters(keyValueList);

View File

@ -586,11 +586,11 @@ public class ApiScenarioModuleService extends NodeTreeService<ApiScenarioModuleD
ApiScenarioWithBLOBs apiScenarioWithBLOBs = nameModuleMap.get(k); ApiScenarioWithBLOBs apiScenarioWithBLOBs = nameModuleMap.get(k);
if (apiScenarioWithBLOBs != null) { if (apiScenarioWithBLOBs != null) {
String modulePath = apiScenarioWithBLOBs.getModulePath(); String modulePath = apiScenarioWithBLOBs.getModulePath();
List<ApiScenarioWithBLOBs> moduleDatas = moduleOptionData.get(modulePath); List<ApiScenarioWithBLOBs> moduleData = moduleOptionData.get(modulePath);
if (moduleDatas != null && moduleDatas.size() <= 1) { if (moduleData != null && moduleData.size() <= 1) {
moduleMap.remove(modulePath); moduleMap.remove(modulePath);
removeModulePath(moduleMap, moduleOptionData, modulePath); removeModulePath(moduleMap, moduleOptionData, modulePath);
moduleDatas.remove(apiScenarioWithBLOBs); moduleData.remove(apiScenarioWithBLOBs);
} }
//不覆盖选择版本如果被选版本有同接口不导入否则创建新版本接口 //不覆盖选择版本如果被选版本有同接口不导入否则创建新版本接口
if (v.getVersionId().equals(versionId)) { if (v.getVersionId().equals(versionId)) {

View File

@ -1744,8 +1744,8 @@ public class ApiScenarioService {
return coverage; return coverage;
} }
int urlContainsCount = this.getApiIdInScenario(projectId, scenarioUrlMap, apiList).size(); int urlContainsCount = this.getApiIdInScenario(projectId, scenarioUrlMap, apiList).size();
coverage.setCoverate(urlContainsCount); coverage.setCoverage(urlContainsCount);
coverage.setNotCoverate(apiList.size() - urlContainsCount); coverage.setNotCoverage(apiList.size() - urlContainsCount);
float coverageRageNumber = (float) urlContainsCount * 100 / apiList.size(); float coverageRageNumber = (float) urlContainsCount * 100 / apiList.size();
DecimalFormat df = new DecimalFormat("0.0"); DecimalFormat df = new DecimalFormat("0.0");
coverage.setRateOfCoverage(df.format(coverageRageNumber) + "%"); coverage.setRateOfCoverage(df.format(coverageRageNumber) + "%");

View File

@ -203,7 +203,7 @@ automation_versions_update=There are multiple versions of this scene, name modif
automation_versions_create=The scene already exists, please create a new version at version automation_versions_create=The scene already exists, please create a new version at version
#authsource #authsource
authsource_name_already_exists=Authentication source name already exists authsource_name_already_exists=Authentication source name already exists
custom_field_already=A feild already exists under this workspace: custom_field_already=A field already exists under this workspace:
expect_name_exists=Expect name is exists expect_name_exists=Expect name is exists
ssl_password_error=The authentication password is wrong, please re-enter the password ssl_password_error=The authentication password is wrong, please re-enter the password
ssl_file_error=Failed to load the certification file, please check the certification file ssl_file_error=Failed to load the certification file, please check the certification file

View File

@ -127,7 +127,7 @@
# Sample OS family LAF: # Sample OS family LAF:
#jmeter.laf.windows=com.sun.java.swing.plaf.windows.WindowsLookAndFeel #jmeter.laf.windows=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
# Custom settings for Mac using System LAF if you don't want to use Darcula # Custom settings for Mac using System LAF if you don't want to use Dracula
#jmeter.laf.mac=System #jmeter.laf.mac=System
# Failing that, the JMeter default laf can be defined: # Failing that, the JMeter default laf can be defined:
@ -916,7 +916,7 @@ beanshell.server.file=../extras/startup.bsh
#beanshell.init.file= #beanshell.init.file=
# #
# Define the intialisation files for BeanShell Sampler, Function and other BeanShell elements # Define the initialisation files for BeanShell Sampler, Function and other BeanShell elements
# N.B. Beanshell test elements do not share interpreters. # N.B. Beanshell test elements do not share interpreters.
# Each element in each thread has its own interpreter. # Each element in each thread has its own interpreter.
# This is retained between samples. # This is retained between samples.
@ -1176,7 +1176,7 @@ view.results.tree.renderers_order=.RenderAsText,.RenderAsRegexp,.RenderAsBoundar
# Set to 0 to store all results (might consume a lot of memory) # Set to 0 to store all results (might consume a lot of memory)
#view.results.tree.max_results=500 #view.results.tree.max_results=500
# Maximum size of Document that can be parsed by Tika engine; defaut=10 * 1024 * 1024 (10MB) # Maximum size of Document that can be parsed by Tika engine; default=10 * 1024 * 1024 (10MB)
# Set to 0 to disable the size check # Set to 0 to disable the size check
#document.max_size=0 #document.max_size=0

View File

@ -57,7 +57,7 @@ export function updateExecuteInfo(params) {
return post('/api/testcase/updateExecuteInfo', params); return post('/api/testcase/updateExecuteInfo', params);
} }
export function checkDeleteDatas(params) { export function checkDeleteData(params) {
return post('/api/testcase/get-del-reference', params); return post('/api/testcase/get-del-reference', params);
} }

View File

@ -21,39 +21,39 @@
</div> </div>
<el-divider/> <el-divider/>
<div class="request-middle"> <div class="request-middle">
<api-report-reqest-header-item :title="$t('api_test.request.method')"> <api-report-request-header-item :title="$t('api_test.request.method')">
<span class="method"> {{ request.method }}</span> <span class="method"> {{ request.method }}</span>
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.response_time')"> <api-report-request-header-item :title="$t('api_report.response_time')">
{{ request.responseResult.responseTime }} ms {{ request.responseResult.responseTime }} ms
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.latency')"> <api-report-request-header-item :title="$t('api_report.latency')">
{{ request.responseResult.latency }} ms {{ request.responseResult.latency }} ms
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.request_size')"> <api-report-request-header-item :title="$t('api_report.request_size')">
{{ request.requestSize }} bytes {{ request.requestSize }} bytes
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.response_size')"> <api-report-request-header-item :title="$t('api_report.response_size')">
{{ request.responseResult.responseSize }} bytes {{ request.responseResult.responseSize }} bytes
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.error')"> <api-report-request-header-item :title="$t('api_report.error')">
{{ request.error }} {{ request.error }}
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.assertions')"> <api-report-request-header-item :title="$t('api_report.assertions')">
{{ request.passAssertions + " / " + request.totalAssertions }} {{ request.passAssertions + " / " + request.totalAssertions }}
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.response_code')"> <api-report-request-header-item :title="$t('api_report.response_code')">
{{ request.responseResult.responseCode }} {{ request.responseResult.responseCode }}
</api-report-reqest-header-item> </api-report-request-header-item>
<api-report-reqest-header-item :title="$t('api_report.result')"> <api-report-request-header-item :title="$t('api_report.result')">
<el-tag v-if="request.unexecute">{{ <el-tag v-if="request.unexecute">{{
$t('api_test.home_page.detail_card.unexecute') $t('api_test.home_page.detail_card.unexecute')
}} }}
@ -71,7 +71,7 @@
<el-tag size="mini" type="danger" v-else> <el-tag size="mini" type="danger" v-else>
{{ $t('api_report.fail') }} {{ $t('api_report.fail') }}
</el-tag> </el-tag>
</api-report-reqest-header-item> </api-report-request-header-item>
</div> </div>
</div> </div>
</el-card> </el-card>
@ -83,7 +83,7 @@
<script> <script>
import MsScenarioResult from "./components/ScenarioResult"; import MsScenarioResult from "./components/ScenarioResult";
import MsRequestResultTail from "./components/RequestResultTail"; import MsRequestResultTail from "./components/RequestResultTail";
import ApiReportReqestHeaderItem from "./ApiReportReqestHeaderItem"; import ApiReportRequestHeaderItem from "./ApiReportRequestHeaderItem";
import MsMetricChart from "./components/MetricChart"; import MsMetricChart from "./components/MetricChart";
import MsReportTitle from "metersphere-frontend/src/components/report/MsReportTitle"; import MsReportTitle from "metersphere-frontend/src/components/report/MsReportTitle";
import MsReportExportTemplate from "metersphere-frontend/src/components/report/MsReportExportTemplate"; import MsReportExportTemplate from "metersphere-frontend/src/components/report/MsReportExportTemplate";
@ -93,7 +93,7 @@ export default {
name: "MsApiReportExport", name: "MsApiReportExport",
components: { components: {
MsReportExportTemplate, MsReportExportTemplate,
MsReportTitle, MsMetricChart, ApiReportReqestHeaderItem, MsRequestResultTail, MsScenarioResult, MsAssertionResults MsReportTitle, MsMetricChart, ApiReportRequestHeaderItem, MsRequestResultTail, MsScenarioResult, MsAssertionResults
}, },
props: { props: {
report: Object, report: Object,

View File

@ -11,7 +11,7 @@
<script> <script>
export default { export default {
name: "ApiReportReqestHeaderItem", name: "ApiReportRequestHeaderItem",
props: {title: String} props: {title: String}
} }
</script> </script>

View File

@ -39,8 +39,8 @@
if (!this.body) { if (!this.body) {
return; return;
} }
let rowArry = this.body.split("\n"); let rowArray = this.body.split("\n");
this.getTableData(rowArry); this.getTableData(rowArray);
if (this.tables.length > 1) { if (this.tables.length > 1) {
for (let i = 0; i < this.tables.length; i++) { for (let i = 0; i < this.tables.length; i++) {
if (this.tables[i].titles.length === 1 && i < this.tables.length - 1) { if (this.tables[i].titles.length === 1 && i < this.tables.length - 1) {
@ -64,20 +64,20 @@
} }
}, },
methods: { methods: {
getTableData(rowArry) { getTableData(rowArray) {
let titles; let titles;
let result = []; let result = [];
for (let i = 0; i < rowArry.length; i++) { for (let i = 0; i < rowArray.length; i++) {
let colArray = rowArry[i].split("\t"); let colArray = rowArray[i].split("\t");
if (i === 0) { if (i === 0) {
titles = colArray; titles = colArray;
} else { } else {
if (colArray.length != titles.length) { if (colArray.length != titles.length) {
// //
if (colArray.length === 1 && colArray[0] === '') { if (colArray.length === 1 && colArray[0] === '') {
this.getTableData(rowArry.slice(i + 1)); this.getTableData(rowArray.slice(i + 1));
} else { } else {
this.getTableData(rowArry.slice(i)); this.getTableData(rowArray.slice(i));
} }
break; break;
} else { } else {

View File

@ -13,7 +13,7 @@
<el-button type="primary" @click="handleConfirm" size="small" :style="btnStyle" class="env-confirm"> <el-button type="primary" @click="handleConfirm" size="small" :style="btnStyle" class="env-confirm">
{{ $t('workspace.env_group.confirm') }} {{ $t('workspace.env_group.confirm') }}
</el-button> </el-button>
<el-dialog :visible="visble" append-to-body :title="$t('workspace.env_group.name')" @close="visble = false" <el-dialog :visible="visible" append-to-body :title="$t('workspace.env_group.name')" @close="visible = false"
style="height: 800px;"> style="height: 800px;">
<template> <template>
<environment-group style="overflow-y: auto;" <environment-group style="overflow-y: auto;"
@ -36,7 +36,7 @@ export default {
return { return {
groups: [], groups: [],
envGroupId: this.groupId, envGroupId: this.groupId,
visble: false visible: false
} }
}, },
props: { props: {
@ -73,7 +73,7 @@ export default {
}) })
}, },
viewGroup() { viewGroup() {
this.visble = true; this.visible = true;
}, },
async handleConfirm() { async handleConfirm() {
const sign = await this.checkEnv(); const sign = await this.checkEnv();

View File

@ -22,7 +22,7 @@
<el-button type="primary" @click="handleConfirm" size="small" class="env-confirm"> <el-button type="primary" @click="handleConfirm" size="small" class="env-confirm">
{{ $t('workspace.env_group.confirm') }} {{ $t('workspace.env_group.confirm') }}
</el-button> </el-button>
<el-dialog :visible="visble" append-to-body :title="$t('workspace.env_group.name')" @close="visble = false" <el-dialog :visible="visible" append-to-body :title="$t('workspace.env_group.name')" @close="visible = false"
style="height: 800px;"> style="height: 800px;">
<template> <template>
<environment-group style="overflow-y: auto;" <environment-group style="overflow-y: auto;"
@ -45,7 +45,7 @@ export default {
return { return {
groups: [], groups: [],
envGroupId: this.groupId, envGroupId: this.groupId,
visble: false, visible: false,
disabledGroups: [], disabledGroups: [],
notDisabledGroups: [], notDisabledGroups: [],
result: false result: false
@ -88,7 +88,7 @@ export default {
}) })
}, },
viewGroup() { viewGroup() {
this.visble = true; this.visible = true;
}, },
async handleConfirm() { async handleConfirm() {
const sign = await this.checkEnv(); const sign = await this.checkEnv();

View File

@ -36,7 +36,7 @@ export default {
placeholder: { placeholder: {
type: String, type: String,
}, },
errorInfor: String, errorInfo: String,
addTagOnKeys: { addTagOnKeys: {
type: Array, type: Array,
default: () => [13, 188, 9] default: () => [13, 188, 9]
@ -119,8 +119,8 @@ export default {
this.innerTags.push(tag) this.innerTags.push(tag)
return true return true
} else { } else {
if (tag !== "" && this.errorInfor) { if (tag !== "" && this.errorInfo) {
this.$error(this.errorInfor); this.$error(this.errorInfo);
} }
} }
return false return false

View File

@ -42,7 +42,7 @@
:title="$t('commons.reference_settings')" :title="$t('commons.reference_settings')"
:visible.sync="dialogVisible" width="400px"> :visible.sync="dialogVisible" width="400px">
<ul> <ul>
<el-tooltip :content="$t('commons.enable_scene_info')" placement="top" v-if='showEnableScence'> <el-tooltip :content="$t('commons.enable_scene_info')" placement="top" v-if='showEnableScenario'>
<el-checkbox v-model="data.environmentEnable" @change="checkEnv" :disabled="data.disabled"> <el-checkbox v-model="data.environmentEnable" @change="checkEnv" :disabled="data.disabled">
{{ $t('commons.enable_scene') }} {{ $t('commons.enable_scene') }}
</el-checkbox> </el-checkbox>
@ -74,7 +74,7 @@ export default {
return false; return false;
} }
}, },
showEnableScence: { showEnableScenario: {
type: Boolean, type: Boolean,
default() { default() {
return true; return true;

View File

@ -403,14 +403,14 @@ export default {
updateParameters(v) { updateParameters(v) {
this.editData = JSON.parse(JSON.stringify(v)); this.editData = JSON.parse(JSON.stringify(v));
this.updateFiles(); this.updateFiles();
let datas = []; let data = [];
this.variables.forEach(item => { this.variables.forEach(item => {
if (item.id === v.id) { if (item.id === v.id) {
item = v; item = v;
} }
datas.push(item); data.push(item);
}); });
this.variables = datas; this.variables = data;
}, },
select(selection) { select(selection) {
this.selection = selection.map(s => s.id); this.selection = selection.map(s => s.id);
@ -572,7 +572,7 @@ export default {
}); });
}, },
filter() { filter() {
let datas = []; let data = [];
this.variables.forEach(item => { this.variables.forEach(item => {
if (this.searchType && this.searchType != "" && this.selectVariable && this.selectVariable != "") { if (this.searchType && this.searchType != "" && this.selectVariable && this.selectVariable != "") {
if ((item.type && item.type.toLowerCase().indexOf(this.searchType.toLowerCase()) == -1 && this.searchType != 'ALL') if ((item.type && item.type.toLowerCase().indexOf(this.searchType.toLowerCase()) == -1 && this.searchType != 'ALL')
@ -599,9 +599,9 @@ export default {
if (this.searchType === 'ALL' && !((this.selectVariable && this.selectVariable != ""))) { if (this.searchType === 'ALL' && !((this.selectVariable && this.selectVariable != ""))) {
item.hidden = undefined; item.hidden = undefined;
} }
datas.push(item); data.push(item);
}); });
this.variables = datas; this.variables = data;
}, },
createFilter(queryString) { createFilter(queryString) {
return item => { return item => {

View File

@ -81,7 +81,7 @@ class Convert {
} }
/** /**
* 递归函数转换object对象为json schmea 格式 * 递归函数转换object对象为json schema 格式
* @param {*} object 需要转换对象 * @param {*} object 需要转换对象
* @param {*} name $id值 * @param {*} name $id值
*/ */

View File

@ -357,7 +357,7 @@ export default {
this.parentReloadItems(); this.parentReloadItems();
}, },
_joinName() { _joinName() {
return `feild_${this.deep}_${this.countAdd++}_${getUUID().substring(0, 5)}` return `field_${this.deep}_${this.countAdd++}_${getUUID().substring(0, 5)}`
}, },
onSetting() { onSetting() {
this.modalVisible = true; this.modalVisible = true;

View File

@ -66,7 +66,7 @@
</el-input> </el-input>
</el-col> </el-col>
<el-col v-if="withMorSetting" class="item kv-setting"> <el-col v-if="withMoreSetting" class="item kv-setting">
<el-tooltip effect="dark" :content="$t('schema.adv_setting')" placement="top"> <el-tooltip effect="dark" :content="$t('schema.adv_setting')" placement="top">
<i class="el-icon-setting" @click="openApiVariableSetting(item)"/> <i class="el-icon-setting" @click="openApiVariableSetting(item)"/>
</el-tooltip> </el-tooltip>
@ -143,7 +143,7 @@ export default {
default: true default: true
}, },
suggestions: Array, suggestions: Array,
withMorSetting: Boolean, withMoreSetting: Boolean,
scenarioDefinition: Array, scenarioDefinition: Array,
}, },
data() { data() {

View File

@ -611,7 +611,7 @@ export default {
}, },
// //
filter() { filter() {
let datas = []; let data = [];
this.variables.forEach(item => { this.variables.forEach(item => {
if (this.searchType && this.searchType != "" && this.defineVariable && this.defineVariable != "") { if (this.searchType && this.searchType != "" && this.defineVariable && this.defineVariable != "") {
if ((item.type && item.type.toLowerCase().indexOf(this.searchType.toLowerCase()) == -1) || (item.name && item.name.toLowerCase().indexOf(this.defineVariable.toLowerCase()) == -1)) { if ((item.type && item.type.toLowerCase().indexOf(this.searchType.toLowerCase()) == -1) || (item.name && item.name.toLowerCase().indexOf(this.defineVariable.toLowerCase()) == -1)) {
@ -634,9 +634,9 @@ export default {
} else { } else {
item.hidden = undefined; item.hidden = undefined;
} }
datas.push(item); data.push(item);
}); });
this.variables = datas; this.variables = data;
}, },
tableRowClassName(row) { tableRowClassName(row) {
if (row.row.hidden) { if (row.row.hidden) {

View File

@ -71,7 +71,7 @@
} }
}, },
editorInit: function (editor) { editorInit: function (editor) {
require('brace/ext/language_tools') //language extension prerequsite... require('brace/ext/language_tools') //language extension prerequisite...
this.modes.forEach(mode => { this.modes.forEach(mode => {
require('brace/mode/' + mode); //language require('brace/mode/' + mode); //language
}); });

View File

@ -30,7 +30,7 @@
<el-link class="ms-el-link" @click="batchAdd"> {{ $t("commons.batch_add") }}</el-link> <el-link class="ms-el-link" @click="batchAdd"> {{ $t("commons.batch_add") }}</el-link>
</el-row> </el-row>
<ms-api-variable <ms-api-variable
:with-mor-setting="true" :with-more-setting="true"
:is-read-only="isReadOnly" :is-read-only="isReadOnly"
:parameters="body.kvs" :parameters="body.kvs"
:urlEncode="body.type == 'WWW_FORM'" :urlEncode="body.type == 'WWW_FORM'"

View File

@ -338,8 +338,8 @@ export default {
this.appendDataWithDeepForeach(this.tableData, rowId, dataRow); this.appendDataWithDeepForeach(this.tableData, rowId, dataRow);
} }
}, },
appendDataWithDeepForeach(datas, rowId, appendData) { appendDataWithDeepForeach(data, rowId, appendData) {
datas.forEach(row => { data.forEach(row => {
if (row.uuid === rowId) { if (row.uuid === rowId) {
if (row.children == null) { if (row.children == null) {
row.children = []; row.children = [];

View File

@ -156,7 +156,7 @@ export default {
urlParams: "无", urlParams: "无",
requestBodyParamType: "无", requestBodyParamType: "无",
requestBodyFormData: '[]', requestBodyFormData: '[]',
requestBodyStrutureData: "", requestBodyStructureData: "",
sharePopoverVisible: false, sharePopoverVisible: false,
jsonSchemaBody: {}, jsonSchemaBody: {},
JsonSchemaResponseBody: {}, JsonSchemaResponseBody: {},
@ -164,13 +164,12 @@ export default {
responseBody: "", responseBody: "",
responseBodyParamType: "无", responseBodyParamType: "无",
responseBodyFormData: "无", responseBodyFormData: "无",
responseBodyStrutureData: "无",
responseCode: "无", responseCode: "无",
}, },
methodColorMap: new Map(API_METHOD_COLOUR), methodColorMap: new Map(API_METHOD_COLOUR),
clientHeight: '',//, clientHeight: '',//,
maxCompnentSize: 10, //api maxComponentSize: 10, //api
needAsyncSelect: false, //apimaxCompnentSizetrue needAsyncSelect: false, //apimaxComponentSizetrue
currentApiIndexInApiShowArray: 0,//apiapiShowArray currentApiIndexInApiShowArray: 0,//apiapiShowArray
clickStepFlag: false, clickStepFlag: false,
pageSize: 10, pageSize: 10,
@ -272,7 +271,7 @@ export default {
selectApiInfoByParam(simpleRequest, this.currentPage, this.pageSize).then(response => { selectApiInfoByParam(simpleRequest, this.currentPage, this.pageSize).then(response => {
this.apiInfoArray = response.data.listObject; this.apiInfoArray = response.data.listObject;
this.total = response.data.itemCount; this.total = response.data.itemCount;
if (response.data.length > this.maxCompnentSize) { if (response.data.length > this.maxComponentSize) {
this.needAsyncSelect = true; this.needAsyncSelect = true;
} else { } else {
this.needAsyncSelect = false; this.needAsyncSelect = false;
@ -351,13 +350,13 @@ export default {
let mainDivHeight = this.$refs.apiDocInfoDiv.clientHeight; let mainDivHeight = this.$refs.apiDocInfoDiv.clientHeight;
let apiDocDivScrollTop = scrollTopCount; let apiDocDivScrollTop = scrollTopCount;
let screenHight = mainDivHeight; let screenHeight = mainDivHeight;
for (let index = 0; index < this.apiInfoArray.length; index++) { for (let index = 0; index < this.apiInfoArray.length; index++) {
let itemHeight = this.$refs.apiDocInfoDivItem[index].getHeight() + 3; let itemHeight = this.$refs.apiDocInfoDivItem[index].getHeight() + 3;
if (apiDocDivScrollTop > itemHeight) { if (apiDocDivScrollTop > itemHeight) {
this.changeApiStepNodeClass(apiNodeDoms[index], false); this.changeApiStepNodeClass(apiNodeDoms[index], false);
} else { } else {
if (screenHight + apiDocDivScrollTop > 0) { if (screenHeight + apiDocDivScrollTop > 0) {
this.changeApiStepNodeClass(apiNodeDoms[index], true); this.changeApiStepNodeClass(apiNodeDoms[index], true);
} else { } else {
this.changeApiStepNodeClass(apiNodeDoms[index], false); this.changeApiStepNodeClass(apiNodeDoms[index], false);

View File

@ -20,7 +20,7 @@
</el-row> </el-row>
<el-collapse-transition> <el-collapse-transition>
<div v-show="active"> <div v-show="active">
<div v-if="!showSlotCompnent"> <div v-if="!showSlotComponent">
<div v-if="isText"> <div v-if="isText">
<div class="showDataDiv"> <div class="showDataDiv">
<br/> <br/>
@ -38,7 +38,7 @@
<div v-else> <div v-else>
<el-table border :show-header="true" row-key="id" :row-class-name="getRowClassName" <el-table border :show-header="true" row-key="id" :row-class-name="getRowClassName"
:data="tableData" :class="getTableClass()" ref="expandTable"> :data="tableData" :class="getTableClass()" ref="expandTable">
<el-table-column v-for="item in tableColoumArr" :key="item.id" <el-table-column v-for="item in tableColumnArr" :key="item.id"
:prop="item.prop" :prop="item.prop"
:label="item.label" :label="item.label"
show-overflow-tooltip> show-overflow-tooltip>
@ -86,17 +86,17 @@ export default {
tableData: [], tableData: [],
tableExpandButtonId: "docTableExpandBtn" + getUUID(), tableExpandButtonId: "docTableExpandBtn" + getUUID(),
expandTitle: this.$t("commons.expand_all"), expandTitle: this.$t("commons.expand_all"),
tableColoumArr: [ tableColumnArr: [
{id: 1, prop: "name", label: this.$t('api_test.definition.document.table_coloum.name')}, {id: 1, prop: "name", label: this.$t('api_definition.document.name')},
{id: 2, prop: "isRequired", label: this.$t('api_test.definition.document.table_coloum.is_required')}, {id: 2, prop: "isRequired", label: this.$t('api_definition.document.is_required')},
{id: 3, prop: "value", label: this.$t('api_test.definition.document.table_coloum.value')}, {id: 3, prop: "value", label: this.$t('api_definition.document.value')},
{id: 4, prop: "description", label: this.$t('api_test.definition.document.table_coloum.desc')}, {id: 4, prop: "description", label: this.$t('api_definition.document.desc')},
], ],
}; };
}, },
props: { props: {
title: String, title: String,
tableColoumType: String, tableColumnType: String,
remarks: String, remarks: String,
isRequest: Boolean, isRequest: Boolean,
isResponse: Boolean, isResponse: Boolean,
@ -139,7 +139,7 @@ export default {
this.tableData = this.getJsonArr(this.stringData); this.tableData = this.getJsonArr(this.stringData);
}, },
computed: { computed: {
showSlotCompnent() { showSlotComponent() {
return this.isRequest || this.isResponse; return this.isRequest || this.isResponse;
} }
}, },

View File

@ -42,15 +42,15 @@
</el-row> </el-row>
<!--api请求头--> <!--api请求头-->
<api-info-collapse :table-can-expand="false" v-if="isArrayHasData(apiInfo.requestHead)" <api-info-collapse :table-can-expand="false" v-if="isArrayHasData(apiInfo.requestHead)"
table-coloum-type="nameAndValue" table-column-type="nameAndValue"
:title="$t('api_test.definition.document.request_head')" :title="$t('api_test.definition.document.request_head')"
:string-data="apiInfo.requestHead"/> :string-data="apiInfo.requestHead"/>
<!--QUERY参数--> <!--QUERY参数-->
<api-info-collapse v-if="isArrayHasData(apiInfo.urlParams)" table-coloum-type="simple" <api-info-collapse v-if="isArrayHasData(apiInfo.urlParams)" table-column-type="simple"
:title="'QUERY'+$t('api_test.definition.document.request_param')" :title="'QUERY'+$t('api_test.definition.document.request_param')"
:string-data="apiInfo.urlParams"/> :string-data="apiInfo.urlParams"/>
<!--REST参数--> <!--REST参数-->
<api-info-collapse v-if="isArrayHasData(apiInfo.restParams)" table-coloum-type="simple" <api-info-collapse v-if="isArrayHasData(apiInfo.restParams)" table-column-type="simple"
:title="'REST'+$t('api_test.definition.document.request_param')" :title="'REST'+$t('api_test.definition.document.request_param')"
:string-data="apiInfo.restParams"/> :string-data="apiInfo.restParams"/>
<!--api请求体 以及表格--> <!--api请求体 以及表格-->
@ -61,7 +61,7 @@
<!--响应头--> <!--响应头-->
<api-info-collapse :table-can-expand="false" v-if="isArrayHasData(apiInfo.responseHead)" <api-info-collapse :table-can-expand="false" v-if="isArrayHasData(apiInfo.responseHead)"
table-coloum-type="nameAndValue" table-column-type="nameAndValue"
:title="$t('api_test.definition.document.response_head')" :title="$t('api_test.definition.document.response_head')"
:string-data="apiInfo.responseHead"/> :string-data="apiInfo.responseHead"/>
<!--响应体--> <!--响应体-->
@ -128,7 +128,6 @@ export default {
restParams: "无", restParams: "无",
requestBodyParamType: "无", requestBodyParamType: "无",
requestBodyFormData: '[]', requestBodyFormData: '[]',
requestBodyStrutureData: "",
sharePopoverVisible: false, sharePopoverVisible: false,
jsonSchemaBody: {}, jsonSchemaBody: {},
JsonSchemaResponseBody: {}, JsonSchemaResponseBody: {},
@ -136,13 +135,13 @@ export default {
responseBody: "", responseBody: "",
responseBodyParamType: "无", responseBodyParamType: "无",
responseBodyFormData: "无", responseBodyFormData: "无",
responseBodyStrutureData: "无", requestBodyStructureData: "无",
responseCode: "无", responseCode: "无",
}, },
methodColorMap: new Map(API_METHOD_COLOUR), methodColorMap: new Map(API_METHOD_COLOUR),
maxCompnentSize: 5, //api maxComponentSize: 5, //api
apiShowArray: [],//api apiShowArray: [],//api
needAsyncSelect: false, //apimaxCompnentSizetrue needAsyncSelect: false, //apimaxComponentSizetrue
currentApiIndexInApiShowArray: 0,//apiapiShowArray currentApiIndexInApiShowArray: 0,//apiapiShowArray
clickStepFlag: false, clickStepFlag: false,
}; };
@ -186,7 +185,7 @@ export default {
if (apiInfo.jsonSchemaBody && apiInfo.jsonSchemaBody !== '' && apiInfo.jsonSchemaBody !== '[]') { if (apiInfo.jsonSchemaBody && apiInfo.jsonSchemaBody !== '' && apiInfo.jsonSchemaBody !== '[]') {
hasParams = true; hasParams = true;
} }
} else if (apiInfo.requestBodyStrutureData && apiInfo.requestBodyStrutureData !== '') { } else if (apiInfo.requestBodyStructureData && apiInfo.requestBodyStructureData !== '') {
hasParams = true; hasParams = true;
} }
} }
@ -210,9 +209,9 @@ export default {
if (apiInfo.jsonSchemaResponseBody && apiInfo.jsonSchemaResponseBody !== '' && apiInfo.jsonSchemaResponseBody !== '[]') { if (apiInfo.jsonSchemaResponseBody && apiInfo.jsonSchemaResponseBody !== '' && apiInfo.jsonSchemaResponseBody !== '[]') {
hasParams = true; hasParams = true;
} }
} else if (apiInfo.responseBodyStrutureData && apiInfo.responseBodyStrutureData !== '') { } else if (apiInfo.requestBodyStructureData && apiInfo.requestBodyStructureData !== '') {
try { try {
JSON.parse(apiInfo.responseBodyStrutureData); JSON.parse(apiInfo.requestBodyStructureData);
hasParams = true; hasParams = true;
} catch (e) { } catch (e) {
hasParams = true; hasParams = true;

View File

@ -6,24 +6,24 @@
:row-class-name="getRowClassName" :row-class-name="getRowClassName"
:data="tableData" :class="getTableClass()" ref="expandTable"> :data="tableData" :class="getTableClass()" ref="expandTable">
<el-table-column prop="name" <el-table-column prop="name"
:label="$t('api_test.definition.document.table_coloum.name')" :label="$t('api_definition.document.name')"
min-width="120px" min-width="120px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="contentType" <el-table-column prop="contentType"
:label="$t('api_test.definition.document.table_coloum.type')" :label="$t('api_definition.document.type')"
min-width="120px" min-width="120px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="description" <el-table-column prop="description"
:label="$t('api_test.definition.document.table_coloum.desc')" :label="$t('api_definition.document.desc')"
min-width="280px" min-width="280px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="required" <el-table-column prop="required"
:label="$t('api_test.definition.document.table_coloum.is_required')" :label="$t('api_definition.document.is_required')"
:formatter="formatBoolean" :formatter="formatBoolean"
min-width="80px" min-width="80px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="value" <el-table-column prop="value"
:label="$t('api_test.definition.document.table_coloum.default_value')" :label="$t('api_definition.document.default_value')"
min-width="120px" min-width="120px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column type="expand" :label="getCollapseOption()" width="80px"> <el-table-column type="expand" :label="getCollapseOption()" width="80px">
@ -47,7 +47,7 @@
<div v-else class="showDataDiv"> <div v-else class="showDataDiv">
<br/> <br/>
<p style="margin: 0px 20px;" <p style="margin: 0px 20px;"
v-html="formatRowData(apiInfo.requestBodyParamType,apiInfo.requestBodyStrutureData)"> v-html="formatRowData(apiInfo.requestBodyParamType,apiInfo.requestBodyStructureData)">
</p> </p>
<br/> <br/>
</div> </div>
@ -235,18 +235,18 @@ export default {
return returnJsonArr; return returnJsonArr;
}, },
formatRowDataToJsonSchema(api, jsonType) { formatRowDataToJsonSchema(api, jsonType) {
if (jsonType === 'request' && api.requestBodyStrutureData) { if (jsonType === 'request' && api.requestBodyStructureData) {
try { try {
let bodyStructData = JSON.parse(api.requestBodyStrutureData); let bodyStructData = JSON.parse(api.requestBodyStructureData);
api.requestJsonSchema = {'raw': bodyStructData}; api.requestJsonSchema = {'raw': bodyStructData};
return true; return true;
} catch (e) { } catch (e) {
return false; return false;
} }
} else if (jsonType === 'response' && api.responseBodyStrutureData) { } else if (jsonType === 'response' && api.requestBodyStructureData) {
try { try {
JSON.parse(api.responseBodyStrutureData); JSON.parse(api.requestBodyStructureData);
api.responseJsonSchema = {'raw': api.responseBodyStrutureData}; api.responseJsonSchema = {'raw': api.requestBodyStructureData};
return true; return true;
} catch (e) { } catch (e) {
return false; return false;

View File

@ -6,24 +6,24 @@
:data="getJsonArr(apiInfo.responseBodyFormData)" :data="getJsonArr(apiInfo.responseBodyFormData)"
class="test-content document-table"> class="test-content document-table">
<el-table-column prop="name" <el-table-column prop="name"
:label="$t('api_test.definition.document.table_coloum.name')" :label="$t('api_definition.document.name')"
min-width="120px" min-width="120px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="contentType" <el-table-column prop="contentType"
:label="$t('api_test.definition.document.table_coloum.type')" :label="$t('api_definition.document.type')"
min-width="120px" min-width="120px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="description" <el-table-column prop="description"
:label="$t('api_test.definition.document.table_coloum.desc')" :label="$t('api_definition.document.desc')"
min-width="280px" min-width="280px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="required" <el-table-column prop="required"
:label="$t('api_test.definition.document.table_coloum.is_required')" :label="$t('api_definition.document.is_required')"
:formatter="formatBoolean" :formatter="formatBoolean"
min-width="80px" min-width="80px"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="value" <el-table-column prop="value"
:label="$t('api_test.definition.document.table_coloum.default_value')" :label="$t('api_definition.document.default_value')"
min-width="120px" min-width="120px"
show-overflow-tooltip/> show-overflow-tooltip/>
</el-table> </el-table>
@ -38,7 +38,7 @@
<div v-else class="showDataDiv"> <div v-else class="showDataDiv">
<br/> <br/>
<p style="margin: 0px 20px;" <p style="margin: 0px 20px;"
v-html="formatRowData(apiInfo.responseBodyParamType,apiInfo.responseBodyStrutureData)"> v-html="formatRowData(apiInfo.responseBodyParamType,apiInfo.requestBodyStructureData)">
</p> </p>
<br/> <br/>
</div> </div>
@ -107,18 +107,18 @@ export default {
return ret; return ret;
}, },
formatRowDataToJsonSchema(api, jsonType) { formatRowDataToJsonSchema(api, jsonType) {
if (jsonType === 'request' && api.requestBodyStrutureData) { if (jsonType === 'request' && api.requestBodyStructureData) {
try { try {
let bodyStructData = JSON.parse(api.requestBodyStrutureData); let bodyStructData = JSON.parse(api.requestBodyStructureData);
api.requestJsonSchema = {'raw': bodyStructData}; api.requestJsonSchema = {'raw': bodyStructData};
return true; return true;
} catch (e) { } catch (e) {
return false; return false;
} }
} else if (jsonType === 'response' && api.responseBodyStrutureData) { } else if (jsonType === 'response' && api.requestBodyStructureData) {
try { try {
JSON.parse(api.responseBodyStrutureData); JSON.parse(api.requestBodyStructureData);
api.responseJsonSchema = {'raw': api.responseBodyStrutureData}; api.responseJsonSchema = {'raw': api.requestBodyStructureData};
return true; return true;
} catch (e) { } catch (e) {
return false; return false;

View File

@ -257,7 +257,7 @@ export default {
this.customing = false this.customing = false
}, },
_joinName() { _joinName() {
return `feild_${this.deep}_${this.countAdd++}_${getUUID().substring(0, 5)}` return `field_${this.deep}_${this.countAdd++}_${getUUID().substring(0, 5)}`
}, },
editScenarioAdvance(data) { editScenarioAdvance(data) {
this.$emit('editScenarioAdvance', data); this.$emit('editScenarioAdvance', data);

View File

@ -249,8 +249,8 @@ export default {
this.appendDataWithDeepForeach(this.tableData, rowId, dataRow); this.appendDataWithDeepForeach(this.tableData, rowId, dataRow);
} }
}, },
appendDataWithDeepForeach(datas, rowId, appendData) { appendDataWithDeepForeach(data, rowId, appendData) {
datas.forEach(row => { data.forEach(row => {
if (row.uuid === rowId) { if (row.uuid === rowId) {
if (row.children == null) { if (row.children == null) {
row.children = []; row.children = [];

View File

@ -13,7 +13,7 @@
<div v-if="isActive"> <div v-if="isActive">
<el-divider></el-divider> <el-divider></el-divider>
<esb-response-result :show-options-button="showOptionsButton" <esb-response-result :show-options-button="showOptionsButton"
:is-api-compnent="false" :show-metric="false" :response="response" :is-api-component="false" :show-metric="false" :response="response"
:request="request"/> :request="request"/>
</div> </div>
</el-collapse-transition> </el-collapse-transition>

View File

@ -91,7 +91,7 @@
<div style="margin-top: 10px"> <div style="margin-top: 10px">
<span>{{ $t('api_test.definition.request.query_param') }}{{ $t('api_test.api_import.optional') }}</span> <span>{{ $t('api_test.definition.request.query_param') }}{{ $t('api_test.api_import.optional') }}</span>
</div> </div>
<ms-api-variable :with-mor-setting="true" :is-read-only="isReadOnly" :isShowEnable="isShowEnable" <ms-api-variable :with-more-setting="true" :is-read-only="isReadOnly" :isShowEnable="isShowEnable"
:parameters="queryArguments"/> :parameters="queryArguments"/>
<!--认证配置--> <!--认证配置-->
<div style="margin-top: 10px"> <div style="margin-top: 10px">

View File

@ -54,7 +54,7 @@
<div style="margin-top: 10px"> <div style="margin-top: 10px">
<span>{{ $t('api_test.definition.request.query_param') }}{{ $t('api_test.api_import.optional') }}</span> <span>{{ $t('api_test.definition.request.query_param') }}{{ $t('api_test.api_import.optional') }}</span>
</div> </div>
<ms-api-variable :with-mor-setting="true" :is-read-only="isReadOnly" :isShowEnable="isShowEnable" <ms-api-variable :with-more-setting="true" :is-read-only="isReadOnly" :isShowEnable="isShowEnable"
:parameters="queryArguments"/> :parameters="queryArguments"/>
<!--认证配置--> <!--认证配置-->
<div style="margin-top: 10px"> <div style="margin-top: 10px">

View File

@ -8,7 +8,7 @@
height="300px"> height="300px">
<el-table-column prop="index" <el-table-column prop="index"
width="60" width="60"
:label="$t('api_test.home_page.running_task_list.table_coloum.index')" :label="$t('home.table.index')"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column <el-table-column
prop="swaggerUrl" prop="swaggerUrl"
@ -21,7 +21,7 @@
<el-table-column prop="rule" label="同步规则" <el-table-column prop="rule" label="同步规则"
min-width="140" min-width="140"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column width="100" :label="$t('api_test.home_page.running_task_list.table_coloum.task_status')"> <el-table-column width="100" :label="$t('home.table.task_status')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<div> <div>
<el-switch <el-switch
@ -32,7 +32,7 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="170" :label="$t('api_test.home_page.running_task_list.table_coloum.next_execution_time')"> <el-table-column width="170" :label="$t('home.table.next_execution_time')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span> <span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span>
</template> </template>

View File

@ -274,7 +274,7 @@
import { import {
apiTestCasePage, apiTestCasePage,
checkDeleteDatas, checkDeleteData,
delApiTestCase, delApiTestCase,
delCaseBatchByParam, delCaseBatchByParam,
delCaseToGcByParam, delCaseToGcByParam,
@ -992,7 +992,7 @@ export default {
obj.unSelectIds = this.unSelection; obj.unSelectIds = this.unSelection;
obj = Object.assign(obj, this.condition); obj = Object.assign(obj, this.condition);
obj.ids = Array.from(this.selectRows).map(row => row.id); obj.ids = Array.from(this.selectRows).map(row => row.id);
checkDeleteDatas(obj).then(response => { checkDeleteData(obj).then(response => {
let checkResult = response.data; let checkResult = response.data;
let alertMsg = this.$t('api_test.definition.request.delete_case_confirm') + " "; let alertMsg = this.$t('api_test.definition.request.delete_case_confirm') + " ";
if (!checkResult.deleteFlag) { if (!checkResult.deleteFlag) {
@ -1085,7 +1085,7 @@ export default {
obj.selectAllDate = false; obj.selectAllDate = false;
obj.ids = [apiCase.id]; obj.ids = [apiCase.id];
obj = Object.assign(obj, this.condition); obj = Object.assign(obj, this.condition);
checkDeleteDatas(obj).then(response => { checkDeleteData(obj).then(response => {
let checkResult = response.data; let checkResult = response.data;
let alertMsg = this.$t('api_test.definition.request.delete_case_confirm') + ' ' + apiCase.name + " "; let alertMsg = this.$t('api_test.definition.request.delete_case_confirm') + ' ' + apiCase.name + " ";
if (!checkResult.deleteFlag) { if (!checkResult.deleteFlag) {
@ -1322,7 +1322,7 @@ export default {
path: "/performance/test/create" path: "/performance/test/create"
}); });
} }
}).catch(erro => { }).catch(error => {
this.$emit('runRefresh', {}); this.$emit('runRefresh', {});
}); });
}, },

View File

@ -644,11 +644,11 @@ export default {
case 'thisWeekCount': case 'thisWeekCount':
this.condition.selectThisWeedData = true; this.condition.selectThisWeedData = true;
break; break;
case 'notCoverate': case 'notCoverage':
this.condition.apiCoverage = 'uncoverage'; this.condition.apiCoverage = 'uncoverage';
this.condition.scenarioCoverage = null; this.condition.scenarioCoverage = null;
break; break;
case 'coverate': case 'coverage':
this.condition.apiCoverage = 'coverage'; this.condition.apiCoverage = 'coverage';
this.condition.scenarioCoverage = null; this.condition.scenarioCoverage = null;
break; break;

View File

@ -136,7 +136,6 @@ export default {
default: true default: true
}, },
suggestions: Array, suggestions: Array,
withMorSetting: Boolean,
disableVariableTip: Boolean disableVariableTip: Boolean
}, },
data() { data() {

View File

@ -23,7 +23,6 @@
<mock-api-variable ref="mockApiVariableComp" <mock-api-variable ref="mockApiVariableComp"
:append-dialog-to-body="true" :append-dialog-to-body="true"
:suggestions="suggestions" :suggestions="suggestions"
:with-mor-setting="true"
:is-read-only="isReadOnly" :is-read-only="isReadOnly"
:isShowEnable="isShowEnable" :isShowEnable="isShowEnable"
:disable-variable-tip="disableVariableTip" :disable-variable-tip="disableVariableTip"
@ -87,9 +86,9 @@ export default {
initFilterDiv() { initFilterDiv() {
if (this.parameters && this.parameters.length > 1) { if (this.parameters && this.parameters.length > 1) {
this.lineDivHeight = 0; this.lineDivHeight = 0;
let itemHeigh = 32 + 10; let itemHeight = 32 + 10;
let optionTypeHeight = this.parameters.length * itemHeigh; let optionTypeHeight = this.parameters.length * itemHeight;
let firstHeight = 32; let firstHeight = 32;
let endHeight = 32; let endHeight = 32;

View File

@ -139,7 +139,7 @@ export default {
path: "/performance/test/create" path: "/performance/test/create"
}); });
} }
}, erro => { }, error => {
this.$emit('runRefresh', {}); this.$emit('runRefresh', {});
}); });
} }

View File

@ -47,7 +47,7 @@
<ms-api-variable <ms-api-variable
@editScenarioAdvance="editScenarioAdvance" @editScenarioAdvance="editScenarioAdvance"
:scenario-definition="scenarioDefinition" :scenario-definition="scenarioDefinition"
:with-mor-setting="true" :with-more-setting="true"
:is-read-only="isReadOnly" :is-read-only="isReadOnly"
:isShowEnable="isShowEnable" :isShowEnable="isShowEnable"
:parameters="request.arguments" :parameters="request.arguments"
@ -74,7 +74,7 @@
<ms-api-variable <ms-api-variable
@editScenarioAdvance="editScenarioAdvance" @editScenarioAdvance="editScenarioAdvance"
:scenario-definition="scenarioDefinition" :scenario-definition="scenarioDefinition"
:with-mor-setting="true" :with-more-setting="true"
:is-read-only="isReadOnly" :is-read-only="isReadOnly"
:isShowEnable="isShowEnable" :isShowEnable="isShowEnable"
:parameters="request.rest" :parameters="request.rest"

View File

@ -21,7 +21,7 @@
<template v-slot:default="scope"> <template v-slot:default="scope">
<div v-if="scope.row.details && scope.row.details.columns"> <div v-if="scope.row.details && scope.row.details.columns">
<div v-for="detail in scope.row.details.columns" :key="detail.id"> <div v-for="detail in scope.row.details.columns" :key="detail.id">
<div v-if="linkDatas.indexOf(detail.columnName)!== -1"> <div v-if="linkData.indexOf(detail.columnName)!== -1">
<el-link style="color: #409EFF" @click="openDetail(scope.row,detail)">{{ <el-link style="color: #409EFF" @click="openDetail(scope.row,detail)">{{
$t('operating_log.info') $t('operating_log.info')
}} }}
@ -38,7 +38,7 @@
<template v-slot:default="scope"> <template v-slot:default="scope">
<div v-if="scope.row.details && scope.row.details.columns"> <div v-if="scope.row.details && scope.row.details.columns">
<div v-for="detail in scope.row.details.columns" :key="detail.id"> <div v-for="detail in scope.row.details.columns" :key="detail.id">
<div v-if="linkDatas.indexOf(detail.columnName)!== -1"> <div v-if="linkData.indexOf(detail.columnName)!== -1">
<el-link style="color: #409EFF" @click="openDetail(scope.row,detail)">{{ <el-link style="color: #409EFF" @click="openDetail(scope.row,detail)">{{
$t('operating_log.info') $t('operating_log.info')
}} }}
@ -83,7 +83,7 @@ export default {
infoVisible: false, infoVisible: false,
loading: false, loading: false,
details: [], details: [],
linkDatas: ["prerequisite", "steps", "remark", "request", "config", linkData: ["prerequisite", "steps", "remark", "request", "config",
"response", "scenarioDefinition", "tags", "loadConfiguration", "advancedConfiguration"], "response", "scenarioDefinition", "tags", "loadConfiguration", "advancedConfiguration"],
showChangeField: true, showChangeField: true,
pageSize: 10, pageSize: 10,

View File

@ -289,7 +289,7 @@ export default {
this.parentReloadItems(); this.parentReloadItems();
}, },
_joinName() { _joinName() {
return `feild_${this.deep}_${this.countAdd++}_${getUUID().substring(0, 5)}` return `field_${this.deep}_${this.countAdd++}_${getUUID().substring(0, 5)}`
}, },
onSetting() { onSetting() {
this.modalVisible = true; this.modalVisible = true;

View File

@ -273,15 +273,15 @@ export default {
countScenarioCoverageByProjectId(selectProjectId).then(response => { countScenarioCoverageByProjectId(selectProjectId).then(response => {
let respData = response.data; let respData = response.data;
this.scenarioCoverage.rateOfCoverage = respData.rateOfCoverage; this.scenarioCoverage.rateOfCoverage = respData.rateOfCoverage;
this.scenarioCoverage.coverate = respData.coverate; this.scenarioCoverage.coverage = respData.coverage;
this.scenarioCoverage.notCoverate = respData.notCoverate; this.scenarioCoverage.notCoverage = respData.notCoverage;
}); });
countApiCoverageByProjectId(selectProjectId).then(response => { countApiCoverageByProjectId(selectProjectId).then(response => {
let respData = response.data; let respData = response.data;
this.apiCoverage.rateOfCoverage = respData.rateOfCoverage; this.apiCoverage.rateOfCoverage = respData.rateOfCoverage;
this.apiCoverage.coverate = respData.coverate; this.apiCoverage.coverage = respData.coverage;
this.apiCoverage.notCoverate = respData.notCoverate; this.apiCoverage.notCoverage = respData.notCoverage;
}); });
apiCaseCountByProjectId(selectProjectId).then(response => { apiCaseCountByProjectId(selectProjectId).then(response => {

View File

@ -1,9 +1,9 @@
<template> <template>
<div class="table-card" v-loading="result" body-style="padding:10px;"> <div class="table-card" v-loading="result" body-style="padding:10px;">
<el-table border :data="tableData" class="adjust-table table-content" height="300px"> <el-table border :data="tableData" class="adjust-table table-content" height="300px">
<el-table-column prop="sortIndex" :label="$t('api_test.home_page.failed_case_list.table_coloum.index')" <el-table-column prop="sortIndex" :label="$t('home.case.index')"
width="100" show-overflow-tooltip/> width="100" show-overflow-tooltip/>
<el-table-column prop="caseName" :label="$t('api_test.home_page.failed_case_list.table_coloum.case_name')" <el-table-column prop="caseName" :label="$t('home.case.case_name')"
width="150"> width="150">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<el-link type="info" @click="redirect(row.caseType,row)"> <el-link type="info" @click="redirect(row.caseType,row)">
@ -14,7 +14,7 @@
<el-table-column <el-table-column
prop="caseType" prop="caseType"
column-key="caseType" column-key="caseType"
:label="$t('api_test.home_page.failed_case_list.table_coloum.case_type')" :label="$t('home.case.case_type')"
width="150" width="150"
show-overflow-tooltip> show-overflow-tooltip>
<template v-slot:default="scope"> <template v-slot:default="scope">
@ -28,7 +28,7 @@
:content="$t('api_test.home_page.failed_case_list.table_value.case_type.functional')"/> :content="$t('api_test.home_page.failed_case_list.table_value.case_type.functional')"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="testPlan" :label="$t('api_test.home_page.failed_case_list.table_coloum.test_plan')"> <el-table-column prop="testPlan" :label="$t('home.case.test_plan')">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<div> <div>
<el-link type="info" @click="redirect('testPlanEdit',row.testPlanId)"> <el-link type="info" @click="redirect('testPlanEdit',row.testPlanId)">
@ -37,7 +37,7 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="failureTimes" :label="$t('api_test.home_page.failed_case_list.table_coloum.failure_times')" <el-table-column prop="failureTimes" :label="$t('home.case.failure_times')"
width="100" show-overflow-tooltip/> width="100" show-overflow-tooltip/>
</el-table> </el-table>
</div> </div>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="table-card" v-loading="result" body-style="padding:10px;"> <div class="table-card" v-loading="result" body-style="padding:10px;">
<el-table border :data="tableData" class="adjust-table table-content" height="260px"> <el-table border :data="tableData" class="adjust-table table-content" height="260px">
<el-table-column prop="num" :label="$t('api_test.home_page.new_case_list.table_coloum.index')" width="100" <el-table-column prop="num" :label="$t('home.new_case.index')" width="100"
show-overflow-tooltip> show-overflow-tooltip>
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<span type="num" @click="redirect(row.apiType,row.id)"> <span type="num" @click="redirect(row.apiType,row.id)">
@ -9,7 +9,7 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" :label="$t('api_test.home_page.new_case_list.table_coloum.api_name')" <el-table-column prop="name" :label="$t('home.new_case.api_name')"
show-overflow-tooltip width="170"> show-overflow-tooltip width="170">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<span type="name" @click="redirect(row.apiType,row.id)"> <span type="name" @click="redirect(row.apiType,row.id)">
@ -17,23 +17,23 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="path" :label="$t('api_test.home_page.new_case_list.table_coloum.path')" width="170" <el-table-column prop="path" :label="$t('home.new_case.path')" width="170"
show-overflow-tooltip> show-overflow-tooltip>
</el-table-column> </el-table-column>
<el-table-column prop="status" :label="$t('api_test.home_page.new_case_list.table_coloum.api_status')"> <el-table-column prop="status" :label="$t('home.new_case.api_status')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<api-status :value="scope.row.status"/> <api-status :value="scope.row.status"/>
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('api_test.home_page.new_case_list.table_coloum.update_time')" width="170"> <el-table-column :label="$t('home.new_case.update_time')" width="170">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.updateTime | datetimeFormat }}</span> <span>{{ scope.row.updateTime | datetimeFormat }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="caseTotal" :label="$t('api_test.home_page.new_case_list.table_coloum.relation_case')" <el-table-column prop="caseTotal" :label="$t('home.new_case.relation_case')"
width="100"> width="100">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<el-link type="info" @click="redirect(row.caseType,row.id)"> <el-link type="info" @click="redirect(row.caseType,row.id)">
@ -42,7 +42,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="scenarioTotal" <el-table-column prop="scenarioTotal"
:label="$t('api_test.home_page.new_case_list.table_coloum.relation_scenario')" :label="$t('home.new_case.relation_scenario')"
width="100"> width="100">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<el-link type="info" @click="redirect(row.scenarioType,row.ids)"> <el-link type="info" @click="redirect(row.scenarioType,row.ids)">
@ -143,48 +143,6 @@ export default {
}); });
} }
}, },
genProtocalFilter(protocalType) {
if (protocalType === "HTTP") {
this.methodFilters = [
{text: 'GET', value: 'GET'},
{text: 'POST', value: 'POST'},
{text: 'PUT', value: 'PUT'},
{text: 'PATCH', value: 'PATCH'},
{text: 'DELETE', value: 'DELETE'},
{text: 'OPTIONS', value: 'OPTIONS'},
{text: 'HEAD', value: 'HEAD'},
{text: 'CONNECT', value: 'CONNECT'},
];
} else if (protocalType === "TCP") {
this.methodFilters = [
{text: 'TCP', value: 'TCP'},
];
} else if (protocalType === "SQL") {
this.methodFilters = [
{text: 'SQL', value: 'SQL'},
];
} else if (protocalType === "DUBBO") {
this.methodFilters = [
{text: 'DUBBO', value: 'DUBBO'},
{text: 'dubbo://', value: 'dubbo://'},
];
} else {
this.methodFilters = [
{text: 'GET', value: 'GET'},
{text: 'POST', value: 'POST'},
{text: 'PUT', value: 'PUT'},
{text: 'PATCH', value: 'PATCH'},
{text: 'DELETE', value: 'DELETE'},
{text: 'OPTIONS', value: 'OPTIONS'},
{text: 'HEAD', value: 'HEAD'},
{text: 'CONNECT', value: 'CONNECT'},
{text: 'DUBBO', value: 'DUBBO'},
{text: 'dubbo://', value: 'dubbo://'},
{text: 'SQL', value: 'SQL'},
{text: 'TCP', value: 'TCP'},
];
}
},
// //
getSelectDataRange() { getSelectDataRange() {
let dataRange = this.$route.params.dataSelectRange; let dataRange = this.$route.params.dataSelectRange;

View File

@ -7,7 +7,7 @@
:data="tableData" :data="tableData"
@refresh="search" @refresh="search"
screen-height="300px"> screen-height="300px">
<el-table-column prop="index" :label="$t('api_test.home_page.running_task_list.table_coloum.index')" width="80" <el-table-column prop="index" :label="$t('home.table.index')" width="80"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="name" :label="$t('commons.name')" width="200"> <el-table-column prop="name" :label="$t('commons.name')" width="200">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
@ -23,7 +23,7 @@
<ms-table-column <ms-table-column
prop="taskType" prop="taskType"
:filters="typeFilters" :filters="typeFilters"
:label="$t('api_test.home_page.running_task_list.table_coloum.task_type')" width="120"> :label="$t('home.table.task_type')" width="120">
<template v-slot:default="scope"> <template v-slot:default="scope">
<ms-tag v-if="scope.row.taskGroup == 'API_SCENARIO_TEST'" type="success" effect="plain" <ms-tag v-if="scope.row.taskGroup == 'API_SCENARIO_TEST'" type="success" effect="plain"
:content="$t('api_test.home_page.running_task_list.scenario_schedule')"/> :content="$t('api_test.home_page.running_task_list.scenario_schedule')"/>
@ -33,9 +33,9 @@
:content="$t('api_test.home_page.running_task_list.swagger_schedule')"/> :content="$t('api_test.home_page.running_task_list.swagger_schedule')"/>
</template> </template>
</ms-table-column> </ms-table-column>
<el-table-column prop="rule" :label="$t('api_test.home_page.running_task_list.table_coloum.run_rule')" width="120" <el-table-column prop="rule" :label="$t('home.table.run_rule')" width="120"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column width="100" :label="$t('api_test.home_page.running_task_list.table_coloum.task_status')"> <el-table-column width="100" :label="$t('home.table.task_status')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<div> <div>
<el-switch <el-switch
@ -49,14 +49,14 @@
</el-table-column> </el-table-column>
<el-table-column width="170" :label="$t('api_test.home_page.running_task_list.table_coloum.next_execution_time')"> <el-table-column width="170" :label="$t('home.table.next_execution_time')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span> <span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="creator" :label="$t('api_test.home_page.running_task_list.table_coloum.create_user')" <el-table-column prop="creator" :label="$t('home.table.create_user')"
width="100" show-overflow-tooltip/> width="100" show-overflow-tooltip/>
<el-table-column width="170" :label="$t('api_test.home_page.running_task_list.table_coloum.update_time')"> <el-table-column width="170" :label="$t('home.table.update_time')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.updateTime | datetimeFormat }}</span> <span>{{ scope.row.updateTime | datetimeFormat }}</span>
</template> </template>

View File

@ -6,9 +6,9 @@
</span> </span>
</template> </template>
<el-table border :data="tableData" class="adjust-table table-content" height="300px"> <el-table border :data="tableData" class="adjust-table table-content" height="300px">
<el-table-column prop="sortIndex" :label="$t('api_test.home_page.failed_case_list.table_coloum.index')" <el-table-column prop="sortIndex" :label="$t('home.case.index')"
width="100" show-overflow-tooltip/> width="100" show-overflow-tooltip/>
<el-table-column prop="caseName" :label="$t('api_test.home_page.failed_case_list.table_coloum.case_name')" <el-table-column prop="caseName" :label="$t('home.case.case_name')"
width="150"> width="150">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<el-link type="info" @click="redirect(row.caseType,row.id)"> <el-link type="info" @click="redirect(row.caseType,row.id)">
@ -19,7 +19,7 @@
<el-table-column <el-table-column
prop="caseType" prop="caseType"
column-key="caseType" column-key="caseType"
:label="$t('api_test.home_page.failed_case_list.table_coloum.case_type')" :label="$t('home.case.case_type')"
width="150" width="150"
show-overflow-tooltip> show-overflow-tooltip>
<template v-slot:default="scope"> <template v-slot:default="scope">
@ -33,7 +33,7 @@
:content="$t('api_test.home_page.failed_case_list.table_value.case_type.functional')"/> :content="$t('api_test.home_page.failed_case_list.table_value.case_type.functional')"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="testPlan" :label="$t('api_test.home_page.failed_case_list.table_coloum.test_plan')"> <el-table-column prop="testPlan" :label="$t('home.case.test_plan')">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<div> <div>
<el-link type="info" @click="redirect('testPlanEdit',row.testPlanId)"> <el-link type="info" @click="redirect('testPlanEdit',row.testPlanId)">
@ -42,7 +42,7 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="failureTimes" :label="$t('api_test.home_page.failed_case_list.table_coloum.failure_times')" <el-table-column prop="failureTimes" :label="$t('home.case.failure_times')"
width="110" show-overflow-tooltip/> width="110" show-overflow-tooltip/>
</el-table> </el-table>
</el-card> </el-card>

View File

@ -11,7 +11,7 @@
:data="tableData" :data="tableData"
@refresh="search" @refresh="search"
screen-height="300px"> screen-height="300px">
<el-table-column prop="index" :label="$t('api_test.home_page.running_task_list.table_coloum.index')" width="80" <el-table-column prop="index" :label="$t('home.table.index')" width="80"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="name" :label="$t('commons.name')" width="200"> <el-table-column prop="name" :label="$t('commons.name')" width="200">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
@ -27,7 +27,7 @@
<ms-table-column <ms-table-column
prop="taskType" prop="taskType"
:filters="typeFilters" :filters="typeFilters"
:label="$t('api_test.home_page.running_task_list.table_coloum.task_type')" width="120"> :label="$t('home.table.task_type')" width="120">
<template v-slot:default="scope"> <template v-slot:default="scope">
<ms-tag v-if="scope.row.taskGroup == 'API_SCENARIO_TEST'" type="success" effect="plain" <ms-tag v-if="scope.row.taskGroup == 'API_SCENARIO_TEST'" type="success" effect="plain"
:content="$t('api_test.home_page.running_task_list.scenario_schedule')"/> :content="$t('api_test.home_page.running_task_list.scenario_schedule')"/>
@ -37,9 +37,9 @@
:content="$t('api_test.home_page.running_task_list.swagger_schedule')"/> :content="$t('api_test.home_page.running_task_list.swagger_schedule')"/>
</template> </template>
</ms-table-column> </ms-table-column>
<el-table-column prop="rule" :label="$t('api_test.home_page.running_task_list.table_coloum.run_rule')" width="120" <el-table-column prop="rule" :label="$t('home.table.run_rule')" width="120"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column width="100" :label="$t('api_test.home_page.running_task_list.table_coloum.task_status')"> <el-table-column width="100" :label="$t('home.table.task_status')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<div> <div>
<el-switch <el-switch
@ -53,14 +53,14 @@
</el-table-column> </el-table-column>
<el-table-column width="170" :label="$t('api_test.home_page.running_task_list.table_coloum.next_execution_time')"> <el-table-column width="170" :label="$t('home.table.next_execution_time')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span> <span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="creator" :label="$t('api_test.home_page.running_task_list.table_coloum.create_user')" <el-table-column prop="creator" :label="$t('home.table.create_user')"
width="100" show-overflow-tooltip/> width="100" show-overflow-tooltip/>
<el-table-column width="170" :label="$t('api_test.home_page.running_task_list.table_coloum.update_time')"> <el-table-column width="170" :label="$t('home.table.update_time')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.updateTime | datetimeFormat }}</span> <span>{{ scope.row.updateTime | datetimeFormat }}</span>
</template> </template>

View File

@ -126,9 +126,9 @@
<el-col :span="12"> <el-col :span="12">
<span class="default-property"> <span class="default-property">
{{ $t('api_test.home_page.detail_card.uncoverage') }} {{ $t('api_test.home_page.detail_card.uncoverage') }}
<el-link class="rows-count-number" type="info" @click="redirectPage('notCoverate')" target="_blank"> <el-link class="rows-count-number" type="info" @click="redirectPage('notCoverage')" target="_blank">
<b> <b>
{{ apiCoverage.notCoverate }} {{ apiCoverage.notCoverage }}
</b> </b>
</el-link> </el-link>
</span> </span>
@ -136,9 +136,9 @@
<el-col :span="12"> <el-col :span="12">
<span class="main-property" style="float: right"> <span class="main-property" style="float: right">
{{ $t('api_test.home_page.detail_card.coverage') }} {{ $t('api_test.home_page.detail_card.coverage') }}
<el-link class="rows-count-number" @click="redirectPage('coverate')" target="_blank"> <el-link class="rows-count-number" @click="redirectPage('coverage')" target="_blank">
<b> <b>
{{ apiCoverage.coverate }} {{ apiCoverage.coverage }}
</b> </b>
</el-link> </el-link>
</span> </span>

View File

@ -171,16 +171,16 @@
<el-col :span="12"> <el-col :span="12">
<span class="default-property"> <span class="default-property">
{{ $t('api_test.home_page.detail_card.uncoverage') }} {{ $t('api_test.home_page.detail_card.uncoverage') }}
<el-link type="info" class="rows-count-number" @click="redirectPage('notCoverate')" target="_blank"> <el-link type="info" class="rows-count-number" @click="redirectPage('notCoverage')" target="_blank">
<b>{{ scenarioCoverage.notCoverate }}</b> <b>{{ scenarioCoverage.notCoverage }}</b>
</el-link> </el-link>
</span> </span>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<span class="main-property" style="float: right"> <span class="main-property" style="float: right">
{{ $t('api_test.home_page.detail_card.coverage') }} {{ $t('api_test.home_page.detail_card.coverage') }}
<el-link class="rows-count-number" @click="redirectPage('coverate')" target="_blank"> <el-link class="rows-count-number" @click="redirectPage('coverage')" target="_blank">
<b>{{ scenarioCoverage.coverate }}</b> <b>{{ scenarioCoverage.coverage }}</b>
</el-link> </el-link>
</span> </span>
</el-col> </el-col>
@ -214,9 +214,9 @@ export default {
}, },
methods: { methods: {
redirectPage(clickType) { redirectPage(clickType) {
if (clickType === "coverate") { if (clickType === "coverage") {
this.$emit("redirectPage", "api", "api", "coverageScenario"); this.$emit("redirectPage", "api", "api", "coverageScenario");
} else if (clickType === "notCoverate") { } else if (clickType === "notCoverage") {
this.$emit("redirectPage", "api", "api", "unCoverageScenario"); this.$emit("redirectPage", "api", "api", "unCoverageScenario");
} else { } else {
this.$emit("redirectPage", "scenario", "scenario", clickType); this.$emit("redirectPage", "scenario", "scenario", clickType);

View File

@ -5,6 +5,44 @@ import mf from "metersphere-frontend/src/i18n/lang/en-US"
const message = { const message = {
api_case: { api_case: {
please_add_api_case: "Please add api case", please_add_api_case: "Please add api case",
},
api_definition: {
document: {
name: "name",
value: "value",
is_required: "Is it required",
desc: "Description",
type: "Type",
default_value: "Default value"
}
},
home:{
table: {
index: "Index",
scenario: "Scenario",
task_type: "Task Type",
run_rule: "Rule",
task_status: "Status",
next_execution_time: "Next Execution Time",
create_user: "Creator",
update_time: "Update time",
},
case: {
index: "Ranking",
case_name: "Case Name",
case_type: "Case Type",
test_plan: "Test Plan",
failure_times: "Failure times",
},
new_case: {
index: "ID",
api_name: "Api Name",
path: "path",
api_status: "Api status",
update_time: "Update time",
relation_case: "Relation CASE",
relation_scenario: "Relation Scenario"
},
} }
} }
export default { export default {

View File

@ -3,8 +3,46 @@ import fu from "fit2cloud-ui/src/locale/lang/zh-CN"; // 加载fit2cloud的内容
import mf from "metersphere-frontend/src/i18n/lang/zh-CN" import mf from "metersphere-frontend/src/i18n/lang/zh-CN"
const message = { const message = {
api_case:{ api_case: {
please_add_api_case: "请先添加接口用例", please_add_api_case: "请先添加接口用例",
},
api_definition: {
document: {
name: "名称",
value: "值",
is_required: "是否必填",
desc: "描述",
type: "类型",
default_value: "默认值",
},
},
home: {
table: {
index: "序号",
scenario: "场景名称",
task_type: "任务类型",
run_rule: "运行规则",
task_status: "任务状态",
next_execution_time: "下次执行时间",
create_user: "创建人",
update_time: "更新时间",
},
case: {
index: "排名",
case_name: "用例名称",
case_type: "用例类型",
test_plan: "所属测试计划",
failure_times: "失败次数",
},
new_case: {
index: "ID",
api_name: "接口名称",
path: "路径",
api_status: "状态",
update_time: "更新时间",
relation_case: "关联CASE",
relation_scenario: "关联场景"
},
} }
} }

View File

@ -5,6 +5,44 @@ import mf from "metersphere-frontend/src/i18n/lang/zh-TW"
const message = { const message = {
api_case: { api_case: {
please_add_api_case: "请先添加接口用例", please_add_api_case: "请先添加接口用例",
},
api_definition: {
document: {
name: "名稱",
value: "值",
is_required: "是否必填",
desc: "描述",
type: "類型",
default_value: "默認值",
},
},
home: {
table: {
index: "序號",
scenario: "場景名稱",
task_type: "任務類型",
run_rule: "運行規則",
task_status: "任務狀態",
next_execution_time: "下次執行時間",
create_user: "創建人",
update_time: "更新時間",
},
case: {
index: "排名",
case_name: "用例名稱",
case_type: "用例類型",
test_plan: "所屬測試計劃",
failure_times: "失敗次數",
},
new_case: {
index: "ID",
api_name: "接口名稱",
path: "路徑",
api_status: "狀態",
update_time: "更新時間",
relation_case: "關聯CASE",
relation_scenario: "關聯場景"
},
} }
} }

View File

@ -76,7 +76,7 @@ export default {
} }
}, },
editorInit: function (editor) { editorInit: function (editor) {
require('brace/ext/language_tools') //language extension prerequsite... require('brace/ext/language_tools') //language extension prerequisite...
this.modes.forEach(mode => { this.modes.forEach(mode => {
require('brace/mode/' + mode); //language require('brace/mode/' + mode); //language
}); });

View File

@ -35,7 +35,7 @@
<field-custom-data-table-item :scene="scene"/> <field-custom-data-table-item :scene="scene"/>
<ms-table-column <ms-table-column
:label="$t('api_test.definition.document.table_coloum.is_required')" :label="$t('api_definition.document.is_required')"
width="80" width="80"
prop="type"> prop="type">
<template v-slot="scope"> <template v-slot="scope">

View File

@ -19,7 +19,7 @@
</ms-table-column> </ms-table-column>
<ms-table-column <ms-table-column
:label="$t('api_test.home_page.failed_case_list.table_coloum.case_name')" :label="$t('home.case.case_name')"
:min-width="120" :min-width="120"
prop="caseName"> prop="caseName">
</ms-table-column> </ms-table-column>

View File

@ -39,7 +39,7 @@
<field-custom-data-table-item :scene="scene"/> <field-custom-data-table-item :scene="scene"/>
<ms-table-column <ms-table-column
:label="$t('api_test.definition.document.table_coloum.is_required')" :label="$t('api_definition.document.is_required')"
width="80" width="80"
prop="type"> prop="type">
<template v-slot="scope"> <template v-slot="scope">

View File

@ -15,7 +15,7 @@
<el-select <el-select
:disabled="isSystem" :disabled="isSystem"
filterable v-model="form.platform" filterable v-model="form.platform"
:placeholder="$t('api_test.home_page.failed_case_list.table_coloum.case_type')"> :placeholder="$t('home.case.case_type')">
<el-option <el-option
v-for="item in platformOption" v-for="item in platformOption"
:key="item.value" :key="item.value"

View File

@ -11,10 +11,10 @@
ref="fieldTemplateEdit"> ref="fieldTemplateEdit">
<template v-slot:base> <template v-slot:base>
<el-form-item :label="$t('api_test.home_page.failed_case_list.table_coloum.case_type')" prop="type" <el-form-item :label="$t('home.case.case_type')" prop="type"
:label-width="labelWidth"> :label-width="labelWidth">
<el-select :disabled="isSystem" filterable v-model="form.type" <el-select :disabled="isSystem" filterable v-model="form.type"
:placeholder="$t('api_test.home_page.failed_case_list.table_coloum.case_type')"> :placeholder="$t('home.case.case_type')">
<el-option <el-option
v-for="item in caseTypeOption" v-for="item in caseTypeOption"
:key="item.value" :key="item.value"

View File

@ -33,7 +33,7 @@
</ms-table-column> </ms-table-column>
<ms-table-column <ms-table-column
:label="$t('api_test.home_page.failed_case_list.table_coloum.case_type')" :label="$t('home.case.case_type')"
:fields="fields" :fields="fields"
:filters="caseTypeFilters" :filters="caseTypeFilters"
prop="type"> prop="type">

View File

@ -60,7 +60,7 @@
<span v-if="scope.row.scheduleStatus === 'OPEN'"> <span v-if="scope.row.scheduleStatus === 'OPEN'">
<el-tooltip placement="bottom-start" effect="light"> <el-tooltip placement="bottom-start" effect="light">
<div slot="content"> <div slot="content">
{{ $t('api_test.home_page.running_task_list.table_coloum.run_rule') }}: {{ {{ $t('home.table.run_rule') }}: {{
scope.row.scheduleCorn scope.row.scheduleCorn
}}<br/> }}<br/>
{{ $t('test_track.plan.next_run_time') }}<span>{{ {{ $t('test_track.plan.next_run_time') }}<span>{{

View File

@ -6,9 +6,9 @@
</span> </span>
</template> </template>
<el-table border :data="tableData" class="adjust-table table-content" height="300px"> <el-table border :data="tableData" class="adjust-table table-content" height="300px">
<el-table-column prop="sortIndex" :label="$t('api_test.home_page.failed_case_list.table_coloum.index')" <el-table-column prop="sortIndex" :label="$t('home.case.index')"
width="100" show-overflow-tooltip/> width="100" show-overflow-tooltip/>
<el-table-column prop="caseName" :label="$t('api_test.home_page.failed_case_list.table_coloum.case_name')" <el-table-column prop="caseName" :label="$t('home.case.case_name')"
width="150"> width="150">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<el-link type="info" @click="redirect(row.caseType,row.id)"> <el-link type="info" @click="redirect(row.caseType,row.id)">
@ -19,7 +19,7 @@
<el-table-column <el-table-column
prop="caseType" prop="caseType"
column-key="caseType" column-key="caseType"
:label="$t('api_test.home_page.failed_case_list.table_coloum.case_type')" :label="$t('home.case.case_type')"
width="150" width="150"
show-overflow-tooltip> show-overflow-tooltip>
<template v-slot:default="scope"> <template v-slot:default="scope">
@ -33,7 +33,7 @@
:content="$t('api_test.home_page.failed_case_list.table_value.case_type.functional')"/> :content="$t('api_test.home_page.failed_case_list.table_value.case_type.functional')"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="testPlan" :label="$t('api_test.home_page.failed_case_list.table_coloum.test_plan')"> <el-table-column prop="testPlan" :label="$t('home.case.test_plan')">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
<div> <div>
<el-link type="info" @click="redirect('testPlanEdit',row.testPlanId)"> <el-link type="info" @click="redirect('testPlanEdit',row.testPlanId)">
@ -42,7 +42,7 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="failureTimes" :label="$t('api_test.home_page.failed_case_list.table_coloum.failure_times')" <el-table-column prop="failureTimes" :label="$t('home.case.failure_times')"
width="110" show-overflow-tooltip/> width="110" show-overflow-tooltip/>
</el-table> </el-table>
</el-card> </el-card>

View File

@ -11,7 +11,7 @@
:data="tableData" :data="tableData"
@refresh="search" @refresh="search"
screen-height="300px"> screen-height="300px">
<el-table-column prop="index" :label="$t('api_test.home_page.running_task_list.table_coloum.index')" width="80" <el-table-column prop="index" :label="$t('home.table.index')" width="80"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column prop="name" :label="$t('commons.name')" width="200"> <el-table-column prop="name" :label="$t('commons.name')" width="200">
<template v-slot:default="{row}"> <template v-slot:default="{row}">
@ -27,7 +27,7 @@
<ms-table-column <ms-table-column
prop="taskType" prop="taskType"
:filters="typeFilters" :filters="typeFilters"
:label="$t('api_test.home_page.running_task_list.table_coloum.task_type')" width="120"> :label="$t('home.table.task_type')" width="120">
<template v-slot:default="scope"> <template v-slot:default="scope">
<ms-tag v-if="scope.row.taskGroup == 'API_SCENARIO_TEST'" type="success" effect="plain" <ms-tag v-if="scope.row.taskGroup == 'API_SCENARIO_TEST'" type="success" effect="plain"
:content="$t('api_test.home_page.running_task_list.scenario_schedule')"/> :content="$t('api_test.home_page.running_task_list.scenario_schedule')"/>
@ -37,9 +37,9 @@
:content="$t('api_test.home_page.running_task_list.swagger_schedule')"/> :content="$t('api_test.home_page.running_task_list.swagger_schedule')"/>
</template> </template>
</ms-table-column> </ms-table-column>
<el-table-column prop="rule" :label="$t('api_test.home_page.running_task_list.table_coloum.run_rule')" width="120" <el-table-column prop="rule" :label="$t('home.table.run_rule')" width="120"
show-overflow-tooltip/> show-overflow-tooltip/>
<el-table-column width="100" :label="$t('api_test.home_page.running_task_list.table_coloum.task_status')"> <el-table-column width="100" :label="$t('home.table.task_status')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<div> <div>
<el-switch <el-switch
@ -53,14 +53,14 @@
</el-table-column> </el-table-column>
<el-table-column width="170" :label="$t('api_test.home_page.running_task_list.table_coloum.next_execution_time')"> <el-table-column width="170" :label="$t('home.table.next_execution_time')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span> <span>{{ scope.row.nextExecutionTime | datetimeFormat }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="creator" :label="$t('api_test.home_page.running_task_list.table_coloum.create_user')" <el-table-column prop="creator" :label="$t('home.table.create_user')"
width="100" show-overflow-tooltip/> width="100" show-overflow-tooltip/>
<el-table-column width="170" :label="$t('api_test.home_page.running_task_list.table_coloum.update_time')"> <el-table-column width="170" :label="$t('home.table.update_time')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<span>{{ scope.row.updateTime | datetimeFormat }}</span> <span>{{ scope.row.updateTime | datetimeFormat }}</span>
</template> </template>

View File

@ -104,7 +104,7 @@
<span v-if="scope.row.scheduleStatus === 'OPEN'"> <span v-if="scope.row.scheduleStatus === 'OPEN'">
<el-tooltip placement="bottom-start" effect="light"> <el-tooltip placement="bottom-start" effect="light">
<div slot="content"> <div slot="content">
{{ $t('api_test.home_page.running_task_list.table_coloum.run_rule') }}: {{ {{ $t('home.table.run_rule') }}: {{
scope.row.scheduleCorn scope.row.scheduleCorn
}}<br/> }}<br/>
{{ $t('test_track.plan.next_run_time') }}<span>{{ {{ $t('test_track.plan.next_run_time') }}<span>{{