diff --git a/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java b/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java index b2741387483b5ea9871d374266a28e3671687d45..4babe468c1b39b46024d2e51d794991dc2f15bd5 100644 --- a/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java +++ b/src/main/java/yi/master/business/message/action/InterfaceInfoAction.java @@ -1,5 +1,6 @@ package yi.master.business.message.action; +import cn.hutool.core.util.StrUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; @@ -8,14 +9,8 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import yi.master.business.base.action.BaseAction; import yi.master.business.base.dto.ParseMessageToNodesOutDTO; -import yi.master.business.message.bean.InterfaceInfo; -import yi.master.business.message.bean.Message; -import yi.master.business.message.bean.MessageScene; -import yi.master.business.message.bean.TestData; -import yi.master.business.message.service.InterfaceInfoService; -import yi.master.business.message.service.MessageSceneService; -import yi.master.business.message.service.MessageService; -import yi.master.business.message.service.TestDataService; +import yi.master.business.message.bean.*; +import yi.master.business.message.service.*; import yi.master.business.testconfig.bean.BusinessSystem; import yi.master.business.testconfig.service.BusinessSystemService; import yi.master.business.user.bean.User; @@ -55,6 +50,10 @@ public class InterfaceInfoAction extends BaseAction { private TestDataService testDataService; @Autowired private MessageSceneService messageSceneService; + @Autowired + private ParameterService parameterService; + @Autowired + private ComplexParameterService complexParameterService; private String path; @@ -67,6 +66,8 @@ public class InterfaceInfoAction extends BaseAction { private String updateSystems; private Integer systemId; + + private Boolean batchUpdateMessage; @Autowired public void setInterfaceInfoService(InterfaceInfoService interfaceInfoService) { @@ -90,6 +91,26 @@ public class InterfaceInfoAction extends BaseAction { } + /** + * 批量新增更新参数 + * @author xuwangcheng + * @date 2021/3/5 16:31 + * @param + * @return {@link String} + */ + public String batchUpdateParam(){ + if (StringUtils.isBlank(ids)) { + throw new YiException("接口ID不能为空"); + } + Parameter updateParam = model.getUpdateParam(); + if (updateParam == null || StrUtil.isBlank(updateParam.getParameterIdentify()) || StrUtil.isBlank(updateParam.getType())) { + throw new YiException(AppErrorCode.MISS_PARAM); + } + interfaceInfoService.batchInsertParam(updateParam, ids, batchUpdateMessage); + + return SUCCESS; + } + /** * 获取参数jsonTree数据 * @return @@ -265,7 +286,12 @@ public class InterfaceInfoAction extends BaseAction { return SUCCESS; } - public void setMessageId(Integer messageId) { + + public void setBatchUpdateMessage(Boolean batchUpdateMessage) { + this.batchUpdateMessage = batchUpdateMessage; + } + + public void setMessageId(Integer messageId) { this.messageId = messageId; } diff --git a/src/main/java/yi/master/business/message/action/TestResultAction.java b/src/main/java/yi/master/business/message/action/TestResultAction.java index ecf71865ac31d22a85a134244ca571a154788bac..cabceef0e8367e54485c9e98cb13911cfd12203b 100644 --- a/src/main/java/yi/master/business/message/action/TestResultAction.java +++ b/src/main/java/yi/master/business/message/action/TestResultAction.java @@ -1,12 +1,8 @@ package yi.master.business.message.action; -import java.util.ArrayList; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; - import yi.master.business.advanced.bean.InterfaceProbe; import yi.master.business.advanced.service.InterfaceProbeService; import yi.master.business.base.action.BaseAction; @@ -14,6 +10,9 @@ import yi.master.business.message.bean.TestResult; import yi.master.business.message.service.TestResultService; import yi.master.business.reportform.AnalyzeUtil; +import java.util.ArrayList; +import java.util.List; + /** * 接口自动化
* 测试结果详情Action @@ -49,7 +48,7 @@ public class TestResultAction extends BaseAction { List conditions = new ArrayList(); if (reportId != null && model.getRunStatus() != null) { - conditions.add("protocolType!='FIXED'"); + //conditions.add("protocolType!='FIXED'"); conditions.add("testReport.reportId=" + reportId); if (!"all".equalsIgnoreCase(model.getRunStatus())) { conditions.add("runStatus='" + model.getRunStatus() + "'"); @@ -65,6 +64,8 @@ public class TestResultAction extends BaseAction { return this.filterCondition; } + + public String getCount() { setData(AnalyzeUtil.analyzeProbeResultSynopsisView(interfacePorbeService.listProbeBeforeResultInfo(7))); diff --git a/src/main/java/yi/master/business/message/bean/InterfaceInfo.java b/src/main/java/yi/master/business/message/bean/InterfaceInfo.java index 726ad3a046a27314f83b1480fc4e3ec2c21273d3..3bb48cedabf3584b0b91a71275493823b50898b6 100644 --- a/src/main/java/yi/master/business/message/bean/InterfaceInfo.java +++ b/src/main/java/yi/master/business/message/bean/InterfaceInfo.java @@ -150,6 +150,11 @@ public class InterfaceInfo implements Serializable,Cloneable { */ private String MessageType; /**************************/ + + /** + * 批量更新参数接受 + */ + private Parameter updateParam; /** default constructor */ public InterfaceInfo() { @@ -164,7 +169,17 @@ public class InterfaceInfo implements Serializable,Cloneable { } return null; } - + + + public void setUpdateParam(Parameter updateParam) { + this.updateParam = updateParam; + } + + @JSON(serialize = false) + public Parameter getUpdateParam() { + return updateParam; + } + public Set getSystems() { return systems; } diff --git a/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml b/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml index 823d0fd72ebb8eebf21f57957923e4e206563afd..7f0714a0b427d299bf5a03db3489f04dff234288 100644 --- a/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/MessageScene.hbm.xml @@ -69,6 +69,13 @@ + + + + + + + diff --git a/src/main/java/yi/master/business/message/bean/MessageScene.java b/src/main/java/yi/master/business/message/bean/MessageScene.java index 604deec4b91dfe8c6c3590001340dccddc5a057e..1589ed7bf6440e7e7ea105ebec9a091276df02f3 100644 --- a/src/main/java/yi/master/business/message/bean/MessageScene.java +++ b/src/main/java/yi/master/business/message/bean/MessageScene.java @@ -10,6 +10,7 @@ import yi.master.business.advanced.bean.PerformanceTestConfig; import yi.master.business.message.service.TestDataService; import yi.master.business.system.bean.ProjectInfo; import yi.master.business.testconfig.bean.BusinessSystem; +import yi.master.business.testconfig.bean.PoolDataItem; import yi.master.constant.MessageKeys; import yi.master.util.FrameworkUtil; import yi.master.util.PracticalUtils; @@ -91,6 +92,11 @@ public class MessageScene implements Serializable, Cloneable { * 验证规则 */ private Set rules = new HashSet(); + + /** + * 关联的数据池类别 + */ + private Set dataItems = new HashSet<>(); private String validateMethodStr; @@ -98,8 +104,8 @@ public class MessageScene implements Serializable, Cloneable { * 请求路径,他的优先级高于报文和接口中配置的 */ private String requestUrl; - - @FieldNameMapper(fieldPath="size(testDatas)", ifSearch=false) + + @FieldNameMapper(fieldPath="size(testDatas)", ifSearch=false) private Integer testDataNum = getTestDataNum(); @FieldNameMapper(fieldPath="size(rules)", ifSearch=false) @@ -394,6 +400,15 @@ public class MessageScene implements Serializable, Cloneable { this.sceneName = sceneName; } + @JSON(serialize = false) + public Set getDataItems() { + return dataItems; + } + + public void setDataItems(Set dataItems) { + this.dataItems = dataItems; + } + public String getMark() { if (this.mark == null) { return ""; diff --git a/src/main/java/yi/master/business/message/bean/Parameter.java b/src/main/java/yi/master/business/message/bean/Parameter.java index 54be029fa3fcf86aa584b53c4108ab7d2811e5fb..f1b6cc9fc49c5a902d08aa3b9645e4f917890d3d 100644 --- a/src/main/java/yi/master/business/message/bean/Parameter.java +++ b/src/main/java/yi/master/business/message/bean/Parameter.java @@ -1,13 +1,12 @@ package yi.master.business.message.bean; +import org.apache.struts2.json.annotations.JSON; +import yi.master.constant.MessageKeys; + import java.io.Serializable; import java.util.HashSet; import java.util.Set; -import org.apache.struts2.json.annotations.JSON; - -import yi.master.constant.MessageKeys; - /** * 接口自动化 @@ -17,7 +16,7 @@ import yi.master.constant.MessageKeys; * @version 1.0.0.0,2017.2.13 */ -public class Parameter implements Serializable { +public class Parameter implements Serializable,Cloneable { private static final long serialVersionUID = 1L; @@ -278,4 +277,17 @@ public class Parameter implements Serializable { return true; } + @Override + public Parameter clone() { + Parameter parameter = new Parameter(); + parameter.setAttributes(this.attributes); + parameter.setPath(this.path); + parameter.setType(this.type); + parameter.setDefaultValue(this.defaultValue); + parameter.setMark(this.mark); + parameter.setParameterIdentify(this.parameterIdentify); + parameter.setParameterName(this.parameterName); + + return parameter; + } } \ No newline at end of file diff --git a/src/main/java/yi/master/business/message/service/ComplexParameterService.java b/src/main/java/yi/master/business/message/service/ComplexParameterService.java index 74deb42661aa8882c23799b9a8134d2f560ccf70..a4126c9f4466351aeac1ff67100a9a0156ae38d7 100644 --- a/src/main/java/yi/master/business/message/service/ComplexParameterService.java +++ b/src/main/java/yi/master/business/message/service/ComplexParameterService.java @@ -3,6 +3,26 @@ package yi.master.business.message.service; import yi.master.business.base.service.BaseService; import yi.master.business.message.bean.ComplexParameter; +import java.util.List; + public interface ComplexParameterService extends BaseService { + /** + * 查询ids + * @author xuwangcheng + * @date 2021/3/8 8:49 + * @param parameterId parameterId + * @return {@link List} + */ + List listIds(Integer parameterId); + + /** + * 直接插入 + * @author xuwangcheng + * @date 2021/3/8 9:15 + * @param parameterId parameterId + * @param parentId parentId + * @return {@link boolean} + */ + void insert(Integer parameterId, Integer parentId); } diff --git a/src/main/java/yi/master/business/message/service/InterfaceInfoService.java b/src/main/java/yi/master/business/message/service/InterfaceInfoService.java index 011ede3bf4ed833e09ca1a2c307faf29321e49a0..73d410a00d2174236c0891d349b0439a6261a6c7 100644 --- a/src/main/java/yi/master/business/message/service/InterfaceInfoService.java +++ b/src/main/java/yi/master/business/message/service/InterfaceInfoService.java @@ -2,6 +2,7 @@ package yi.master.business.message.service; import yi.master.business.base.service.BaseService; import yi.master.business.message.bean.InterfaceInfo; +import yi.master.business.message.bean.Parameter; import java.util.List; @@ -43,4 +44,15 @@ public interface InterfaceInfoService extends BaseService { * @return */ void copyInterfaceInfo (InterfaceInfo interfaceInfo, List copyParams); + + /** + * 批量往接口中插入参数 + * @author xuwangcheng + * @date 2021/3/8 9:28 + * @param parameter parameter + * @param ids ids + * @param updateMessage updateMessage 是否将新增的参数更新到接口下的报文中去 + * @return + */ + void batchInsertParam(Parameter parameter, String ids, boolean updateMessage); } diff --git a/src/main/java/yi/master/business/message/service/impl/ComplexParameterServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/ComplexParameterServiceImpl.java index 1c9abb06e520b8f26ba65b240c340f955672bb1c..f28dc3a82d19c926bbf639b69597f68c0ae19cd3 100644 --- a/src/main/java/yi/master/business/message/service/impl/ComplexParameterServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/ComplexParameterServiceImpl.java @@ -2,12 +2,14 @@ package yi.master.business.message.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import yi.master.business.base.service.impl.BaseServiceImpl; import yi.master.business.message.bean.ComplexParameter; import yi.master.business.message.dao.ComplexParameterDao; import yi.master.business.message.service.ComplexParameterService; +import java.util.ArrayList; +import java.util.List; + @Service("complexParameterService") public class ComplexParameterServiceImpl extends BaseServiceImpl implements ComplexParameterService { @@ -19,4 +21,22 @@ public class ComplexParameterServiceImpl extends BaseServiceImpl listIds(Integer parameterId) { + List parameters = complexParameterDao.findAll("selfParameter.parameterId=" + parameterId); + List ids = new ArrayList<>(); + parameters.stream().forEach(param -> { + ids.add(param.getId()); + }); + + return ids; + } + + @Override + public void insert(Integer parameterId, Integer parentId) { + String sql = "insert into at_complex_parameter values(null, :parameterId, :parentId, null)"; + complexParameterDao.getSession().createSQLQuery(sql).setInteger("parameterId", parameterId) + .setInteger("parentId", parentId).executeUpdate(); + } } diff --git a/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java index c414a026aee61007609ead9e3626d8d13ab55c0c..974320a6bdce4b85d474f0054d3537493aef2559 100644 --- a/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/InterfaceInfoServiceImpl.java @@ -1,14 +1,21 @@ package yi.master.business.message.service.impl; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import yi.master.business.base.service.impl.BaseServiceImpl; import yi.master.business.message.bean.InterfaceInfo; +import yi.master.business.message.bean.Message; +import yi.master.business.message.bean.Parameter; import yi.master.business.message.dao.InterfaceInfoDao; +import yi.master.business.message.service.ComplexParameterService; import yi.master.business.message.service.InterfaceInfoService; import yi.master.business.message.service.MessageService; +import yi.master.business.message.service.ParameterService; +import yi.master.constant.MessageKeys; import java.util.List; +import java.util.Set; /** * 接口信息Service实现 @@ -21,6 +28,10 @@ public class InterfaceInfoServiceImpl extends BaseServiceImpl imp private InterfaceInfoDao interfaceInfoDao; @Autowired private MessageService messageService; + @Autowired + private ParameterService parameterService; + @Autowired + private ComplexParameterService complexParameterService; @Autowired public void setInterfaceInfoDao(InterfaceInfoDao interfaceInfoDao) { @@ -52,4 +63,37 @@ public class InterfaceInfoServiceImpl extends BaseServiceImpl imp public void copyInterfaceInfo(InterfaceInfo interfaceInfo, List copyParams) { //todo 接口复制,包括接口信息和参数信息,报文信息 } + + @Override + public void batchInsertParam(Parameter parameter, String ids, boolean updateMessage) { + parameter.setPath(MessageKeys.MESSAGE_PARAMETER_DEFAULT_ROOT_PATH + (StringUtils.isBlank(parameter.getPath()) ? "" : ("." + parameter.getPath()))); + List interfaceInfos = findAll("all".equalsIgnoreCase(ids) ? "1 = 1" : "interfaceId in (" + ids + ")"); + for (InterfaceInfo info:interfaceInfos) { + // 父节点ID是否存在? + Integer parentParameterId = Parameter.getParentId(parameter.getPath(), info.getParameters()); + if (parentParameterId == null) { + continue; + } + Parameter insertParameter = parameter.clone(); + insertParameter.setInterfaceInfo(info); + insertParameter.setParameterId(parameterService.save(insertParameter)); + + // 插入报文的节点信息 + if (updateMessage) { + // 根节点 + if (parentParameterId == 0) { + Set messages = info.getMessages(); + for (Message msg:messages) { + complexParameterService.insert(insertParameter.getParameterId(), msg.getComplexParameter().getId()); + } + } else { + List parentIds = complexParameterService.listIds(parentParameterId); + for (Integer id:parentIds) { + complexParameterService.insert(insertParameter.getParameterId(), id); + } + } + } + + } + } } diff --git a/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java index cb2661b666a81c0b9134412c3d5f64af20e0b39b..7d7ba3c56621e897777b9990680c3c58c20e59f3 100644 --- a/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/MessageServiceImpl.java @@ -47,9 +47,9 @@ public class MessageServiceImpl extends BaseServiceImpl implements Mess MessageScene messageScene = new MessageScene(); messageScene.setMessage(message); messageScene.setProjectInfo(message.getProjectInfo()); - messageScene.setSceneName("默认场景"); + messageScene.setSceneName("正常场景"); messageScene.setSystems(message.getSystems()); - messageScene.setMark("这是自动创建的测试场景"); + messageScene.setMark("这是自动创建的正常测试场景"); messageSceneService.save(messageScene, true, null); } diff --git a/src/main/java/yi/master/business/testconfig/action/PoolDataItemAction.java b/src/main/java/yi/master/business/testconfig/action/PoolDataItemAction.java index f56ae131266fe69bd636f35612814b9b408d2bd4..2d7fc2e0e21861dd8fd7d76151d3658515f03041 100644 --- a/src/main/java/yi/master/business/testconfig/action/PoolDataItemAction.java +++ b/src/main/java/yi/master/business/testconfig/action/PoolDataItemAction.java @@ -195,6 +195,7 @@ public class PoolDataItemAction extends BaseAction { poolDataItem.setUser(FrameworkUtil.getLoginUser()); poolDataItem.setCreateTime(new Timestamp(System.currentTimeMillis())); poolDataItem.setDataPool(new DataPool(poolId)); + poolDataItem.setBeforeUseAutoUpdate(SystemConsts.DefaultBooleanIdentify.TRUE.getNumber()); poolDataItem.setName(name); poolDataItem.setMark(name); poolDataItemService.save(poolDataItem); diff --git a/src/main/java/yi/master/business/testconfig/bean/DataPool.hbm.xml b/src/main/java/yi/master/business/testconfig/bean/DataPool.hbm.xml index 0a1cec48a26d17305784366456a2eac17565fb7c..75cf3e4afca955aae737ffb0bc85e02f8c95028b 100644 --- a/src/main/java/yi/master/business/testconfig/bean/DataPool.hbm.xml +++ b/src/main/java/yi/master/business/testconfig/bean/DataPool.hbm.xml @@ -31,6 +31,12 @@ + + + + + + diff --git a/src/main/java/yi/master/business/testconfig/bean/DataPool.java b/src/main/java/yi/master/business/testconfig/bean/DataPool.java index 9e2b988d278db3fcf3a2ef7de3224e767c79b4ff..c0dcf81fb248101ebf80cac8b0aa3ef60b573d0e 100644 --- a/src/main/java/yi/master/business/testconfig/bean/DataPool.java +++ b/src/main/java/yi/master/business/testconfig/bean/DataPool.java @@ -49,6 +49,11 @@ public class DataPool implements Serializable { */ private Set dataNames = new HashSet<>(); + /** + * 关联测试配置 + */ + private Set testConfigs = new HashSet<>(); + /** * 所属项目 */ @@ -67,6 +72,16 @@ public class DataPool implements Serializable { public DataPool() { } + + @JSON(serialize = false) + public Set getTestConfigs() { + return testConfigs; + } + + public void setTestConfigs(Set testConfigs) { + this.testConfigs = testConfigs; + } + public Integer getNameCount() { return this.dataNames.size(); } diff --git a/src/main/java/yi/master/business/testconfig/bean/GlobalVariable.java b/src/main/java/yi/master/business/testconfig/bean/GlobalVariable.java index 5cfb5fffe873450f0b75057580a2716a7c4f77ff..fbc93bfb1bcda8bbafe0293aec5962e2b4393dc4 100644 --- a/src/main/java/yi/master/business/testconfig/bean/GlobalVariable.java +++ b/src/main/java/yi/master/business/testconfig/bean/GlobalVariable.java @@ -351,10 +351,17 @@ public class GlobalVariable implements Serializable { && !forceCreate) { return this.lastCreateValue; } - int min = Integer.parseInt(maps.get(GlobalVariableConstant.RANDOM_MIN_NUM_ATTRIBUTE_NAME)); - int max = Integer.parseInt(maps.get(GlobalVariableConstant.RANDOM_MAX_NUM_ATTRIBUTE_NAME)); - this.lastCreateValue = String.valueOf(PracticalUtils.getRandomNum(max, min)); + long min = 0; + long max = 0; + try { + max = Long.valueOf(maps.get(GlobalVariableConstant.RANDOM_MAX_NUM_ATTRIBUTE_NAME)); + min = Long.valueOf(maps.get(GlobalVariableConstant.RANDOM_MIN_NUM_ATTRIBUTE_NAME)); + } catch (NumberFormatException e) { + throw new RuntimeException("参数非数字类型"); + } + + this.lastCreateValue = String.valueOf(PracticalUtils.getRandomLongNum(max, min)); update(); return this.lastCreateValue; } diff --git a/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.hbm.xml b/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.hbm.xml index c58e8c7018811dfb0cf4d272760792b083d2ba58..6afa1c79a326255a7ab43583ff295af98dcc3f1d 100644 --- a/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.hbm.xml +++ b/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.hbm.xml @@ -46,5 +46,11 @@ + + + + + + diff --git a/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.java b/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.java index 78f4cfb5ae7f87f94a94e69b7140168fa7337549..dcd9767f94384e4997486826153e05dee7fa85a9 100644 --- a/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.java +++ b/src/main/java/yi/master/business/testconfig/bean/PoolDataItem.java @@ -3,6 +3,7 @@ package yi.master.business.testconfig.bean; import org.apache.struts2.json.annotations.JSON; import yi.master.annotation.FieldNameMapper; import yi.master.business.message.bean.MessageScene; +import yi.master.business.message.bean.TestResult; import yi.master.business.user.bean.User; import java.io.Serializable; @@ -86,9 +87,24 @@ public class PoolDataItem implements Serializable { */ private String responseDataJsonPath; + /** + * 关联结果集 + */ + private Set results = new HashSet<>(); + public PoolDataItem() { } + + @JSON(serialize = false) + public Set getResults() { + return results; + } + + public void setResults(Set results) { + this.results = results; + } + public PoolDataItem(Integer itemId) { this.itemId = itemId; } diff --git a/src/main/java/yi/master/coretest/message/parse/JSONMessageParse.java b/src/main/java/yi/master/coretest/message/parse/JSONMessageParse.java index 1dcb46dc13049d1e2b3635b456c0985ccb33dc4c..04ac7160051c5180e90119a9cb6c081475742f69 100644 --- a/src/main/java/yi/master/coretest/message/parse/JSONMessageParse.java +++ b/src/main/java/yi/master/coretest/message/parse/JSONMessageParse.java @@ -275,7 +275,7 @@ public class JSONMessageParse extends MessageParse { } JSONObject parentNode = nodes.getJSONObject(node.getString("parentId")); String parentType = null; - if (parentNode != null) { + if (parentNode != null && !parentNode.isNullObject()) { parentType = parentNode.getString("type").toUpperCase(); } diff --git a/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java b/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java index 1abaf715f6f97f515d8273b6a3da6b043fca8e66..b18db0ec7d1f932486ed7a23a77231ae1b12335c 100644 --- a/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java +++ b/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java @@ -76,7 +76,7 @@ public class HTTPTestClient extends TestClient { private static final String DEFAULT_HTTP_METHOD = HttpMethod.POST.name(); /**可同时存在的最大httpclient数量*/ - private static final int MAX_DEFAULT_HTTP_CLIENT_COUNT = 200; + private static final int MAX_DEFAULT_HTTP_CLIENT_COUNT = 2; /**活跃客户端池*/ private static final List activeClientPool = new ArrayList(); /**可用客户端池*/ @@ -99,30 +99,32 @@ public class HTTPTestClient extends TestClient { * @return */ private static DefaultHttpClient getHttpClient () { - synchronized(lock) { - //可用客户端不足 - if (availableClientPool.size() < 1) { - if (activeClientPool.size() >= MAX_DEFAULT_HTTP_CLIENT_COUNT) { - //等待释放 - while (availableClientPool.size() < 1) { - try { - lock.wait(800); - } catch (InterruptedException e) { - LOGGER.warn("InterruptedException", e); - } - } - } else { - //新建客户端 - DefaultHttpClient newClient = getNewHttpClient(); - activeClientPool.add(newClient); - return newClient; - } - } - DefaultHttpClient client = availableClientPool.get(0); - client.getCookieStore().clear(); - availableClientPool.remove(client); - return client; - } +// synchronized(lock) { +// //可用客户端不足 +// if (availableClientPool.size() < 1) { +// if (activeClientPool.size() >= MAX_DEFAULT_HTTP_CLIENT_COUNT) { +// //等待释放 +// while (availableClientPool.size() < 1) { +// LOGGER.info("等待释放HTTPClient请求客户端!"); +// try { +// lock.wait(800); +// } catch (InterruptedException e) { +// LOGGER.warn("InterruptedException", e); +// } +// } +// } else { +// //新建客户端 +// DefaultHttpClient newClient = getNewHttpClient(); +// activeClientPool.add(newClient); +// return newClient; +// } +// } +// DefaultHttpClient client = availableClientPool.get(0); +// client.getCookieStore().clear(); +// availableClientPool.remove(client); +// return client; +// } + return getNewHttpClient(); } private static DefaultHttpClient getNewHttpClient () { @@ -187,7 +189,7 @@ public class HTTPTestClient extends TestClient { DefaultHttpClient client = null; if (httpclient == null) { - client = defaultClient; + client = getNewHttpClient(); } else { client = (DefaultHttpClient) httpclient; } @@ -365,19 +367,19 @@ public class HTTPTestClient extends TestClient { returnMap.setUseTime(useTime); // 清除代理设置 - if (proxyClient != null) { - clearProxy(proxyClient); - putBackTestClient(proxyClient); - } +// if (proxyClient != null) { +// clearProxy(proxyClient); +// putBackTestClient(proxyClient); +// } return returnMap; } @Override public void putBackTestClient(Object procotolClient) { - - if (procotolClient != null && procotolClient instanceof DefaultHttpClient) { - availableClientPool.add((DefaultHttpClient) procotolClient); - } +// if (procotolClient != null && procotolClient instanceof DefaultHttpClient) { +// availableClientPool.add((DefaultHttpClient) procotolClient); +// } + procotolClient = null; } diff --git a/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java b/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java index d5fb554b2d06b6bc89a06c83ce8581d64b58e2a5..bf519d00e679fa0ea413fd8bac0ca51adcd60472 100644 --- a/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java +++ b/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java @@ -29,6 +29,7 @@ import yi.master.constant.MessageKeys; import yi.master.constant.SystemConsts; import yi.master.coretest.message.parse.MessageParse; import yi.master.coretest.message.process.MessageProcess; +import yi.master.coretest.message.protocol.HTTPTestClient; import yi.master.coretest.message.protocol.TestClient; import yi.master.coretest.message.protocol.entity.ClientTestResponseObject; import yi.master.exception.YiException; @@ -287,6 +288,7 @@ public class MessageAutoTest { Boolean allSuccessFlag = null; //组合场景测试备注 StringBuilder complexMark = new StringBuilder(); + complexMark.append("这是一个组合场景。\n"); //该组合场景测试上下文保存的变量 Map saveVariables = new HashMap(); @@ -303,7 +305,7 @@ public class MessageAutoTest { //是否使用新的测试客户端来进行测试 if (testScene.isNewClient()) { - procotolClient = (DefaultHttpClient) testScene.getTestClient().getTestClient(); + procotolClient = (DefaultHttpClient) HTTPTestClient.getInstance().getTestClient(); } //需要异步执行的场景 @@ -894,9 +896,7 @@ public class MessageAutoTest { } //替换入参报文中的测试集公共变量 - if (MapUtil.isNotEmpty(config.getPublicDataObject())) { - requestMessage = PracticalUtils.replaceSetPublicVariable(requestMessage, config.getPublicDataObject()); - } + requestMessage = PracticalUtils.replaceSetPublicVariable(requestMessage, config.getPublicDataObject()); //处理请求URL中的全局变量 requestUrl = PracticalUtils.replaceGlobalVariable(requestUrl, globalVariableService); @@ -912,8 +912,16 @@ public class MessageAutoTest { testScene.setParseUtil(parseUtil); testScene.setBusinessSystem(system); testScene.setConfig(config); + //提前在此处替换调用参数中的全局变量,防止在异步线程中调用时出现一些不可预期的错误 - testScene.setCallParameter(PracticalUtils.jsonToMap(PracticalUtils.replaceGlobalVariable(msg.getCallParameter(), null))); + // 替换全局变量 + String callParams = PracticalUtils.replaceGlobalVariable(msg.getCallParameter(), null); + // 替换数据池 + callParams = PracticalUtils.replacePoolData(callParams, testScene.getPoolData()); + // 替换测试集公共变量 + callParams = PracticalUtils.replaceSetPublicVariable(callParams, config.getPublicDataObject()); + testScene.setCallParameter(PracticalUtils.jsonToMap(callParams)); + testObjects.add(testScene); } } diff --git a/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobAction.java b/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobAction.java index c4fc420f45503262d1fad918d3c4b562309ad373..3968d0b54178e2b49ea60c0fad72f63f15fdb76d 100644 --- a/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobAction.java +++ b/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobAction.java @@ -72,16 +72,17 @@ public class ProbeTaskJobAction implements Job { Timestamp lastCallTime = null; TestResult result = null; if (resultId == null) { - //变更状态为“执行出错” + //变更状态为"执行出错" task.setStatus(InterfaceProbeStatus.EXECUTE_ERROR.getStatus()); } else { result = testResultService.get(resultId); task.setMark(""); + lastCallTime = result.getOpTime(); + task.setStatus(InterfaceProbeStatus.RUNNING.getStatus()); //变更状态为“缺少数据” if (result.getQualityLevel() == 0) { task.setStatus(InterfaceProbeStatus.NO_DATA.getStatus()); } - lastCallTime = result.getOpTime(); } task.setLastCallTime(lastCallTime == null ? new Timestamp(System.currentTimeMillis()) : lastCallTime); diff --git a/src/main/java/yi/master/util/PracticalUtils.java b/src/main/java/yi/master/util/PracticalUtils.java index ca4671314989ef2a31764c3c01d8f13c322522d7..839d6a2797690daf281f9b7857666531dbc46677 100644 --- a/src/main/java/yi/master/util/PracticalUtils.java +++ b/src/main/java/yi/master/util/PracticalUtils.java @@ -1,7 +1,9 @@ package yi.master.util; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import net.sf.json.JSONObject; @@ -614,7 +616,23 @@ public class PracticalUtils { return ran.nextInt(max) % (max - min + 1) + min; } - /** + + /** + * 获取随机数 + * + * @param max + * 最大值 + * @param min + * 最小值 + * @return + */ + public static long getRandomLongNum(long max, long min) { + return RandomUtil.randomLong(min, max); + } + + + + /** * 替换报文入参中的全局变量 * * @param msg @@ -661,7 +679,7 @@ public class PracticalUtils { * @return {@link String} */ public static String replacePoolData (String msg, Map values) { - if (StringUtils.isBlank(msg)) { + if (StringUtils.isBlank(msg) || MapUtil.isEmpty(values)) { return msg; } diff --git a/src/main/resources/update/1.1.3 b/src/main/resources/update/1.1.3 index 5a8320abc86d18cd47beb782dcd94b78689a6aad..4ace50fdd1f703da61bd695ebe89b758b55fab6c 100644 --- a/src/main/resources/update/1.1.3 +++ b/src/main/resources/update/1.1.3 @@ -1,4 +1,5 @@ SET FOREIGN_KEY_CHECKS=0; ALTER TABLE `at_message` ADD COLUMN `body_to_query` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '0' COMMENT 'body体内容转query参数' AFTER `project_id`; INSERT INTO `at_global_setting`(`setting_id`, `setting_name`, `default_value`, `setting_value`, `mark`) VALUES (26, 'messageCallHomeUrl', '0', '0', '接口自动化内部请求地址'); +UPDATE `at_operation_interface` SET `op_name` = '从测试结果中获取视图数据', `call_name` = 'ptr-analyseView', `is_parent` = 'false', `op_type` = NULL, `mark` = '', `status` = '0', `parent_op_id` = 1078, `permission_mark` = NULL, `page_name` = NULL WHERE `op_id` = 1091; SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/src/main/webapp/index.js b/src/main/webapp/index.js index 8b517f93ec010bd42cbec6b61467e57b8202c861..5467ab54bebab0e525dc2ff579b425d96e29698a 100644 --- a/src/main/webapp/index.js +++ b/src/main/webapp/index.js @@ -55,6 +55,7 @@ $(document).ready(function() { "messageScene-test", "messageScene-validateFullJson", "messageScene-validateKeyword", + "interface-batchAddParameter", "role-power", "showDataPoolUseSample", "viewWindow"]); diff --git a/src/main/webapp/js/globalConstant.js b/src/main/webapp/js/globalConstant.js index f823a2ecfc83d0e30735c681d8aa27df58b6728e..1fafa3afe79ba185a44e5fdc0166b5692b3241b1 100644 --- a/src/main/webapp/js/globalConstant.js +++ b/src/main/webapp/js/globalConstant.js @@ -59,7 +59,8 @@ var REQUEST_URL = { IMPORT_FROM_EXCEL: "interface-importFromExcel", EXPORT_DOCUMENT_EXCEL: "interface-exportInterfaceDocument", GET_PARAMETERS_JSON_TREE: "interface-getParametersJsonTree", - UPDATE_CHILDREN_BUSINESS_SYSTEMS: "interface-updateChildrenBusinessSystems" + UPDATE_CHILDREN_BUSINESS_SYSTEMS: "interface-updateChildrenBusinessSystems", + BATCH_UPDATE_PARAM: "interface-batchUpdateParam" }, //报文 MESSAGE: { @@ -335,7 +336,7 @@ var REQUEST_URL = { DEL: "ptr-del", GET:"ptr-get", LIST: "ptr-list", - ANALYZE: "ptr-anaylzeView", + ANALYZE: "ptr-analyseView", SUMMARIZED: "ptr-summarizedView", DETAILS_LIST_ALL: "ptr-detailsList" }, diff --git a/src/main/webapp/libs/h-ui.admin/js/H-ui.admin.js b/src/main/webapp/libs/h-ui.admin/js/H-ui.admin.js index 41c3f0c0f3a5d3055f3c96ca9aca6a0c111f489c..a9760d8480221f1e8b49e5d8f9d629edd7b7bd45 100644 --- a/src/main/webapp/libs/h-ui.admin/js/H-ui.admin.js +++ b/src/main/webapp/libs/h-ui.admin/js/H-ui.admin.js @@ -42,7 +42,7 @@ function getskincookie(){ var v = getCookie("Huiskin"); var hrefStr=$("#skin").attr("href"); if(v==null||v==""){ - v="default"; + v="blue"; } if(hrefStr!=undefined){ var hrefRes=hrefStr.substring(0,hrefStr.lastIndexOf('skin/'))+'skin/'+v+'/skin.css'; diff --git a/src/main/webapp/libs/h-ui.admin/skin/blue/skin.css b/src/main/webapp/libs/h-ui.admin/skin/blue/skin.css index c428e3dc61d1117ad285b14b65785febb6ae3ad0..5f6a1a0e1aec3dfb422e0114bf377c032eb8e96c 100644 --- a/src/main/webapp/libs/h-ui.admin/skin/blue/skin.css +++ b/src/main/webapp/libs/h-ui.admin/skin/blue/skin.css @@ -2,7 +2,7 @@ /* 蓝色 */ /*全站默认字体颜色*/ a{color:#333}a:hover,a:focus,.maincolor,.maincolor a{color:#06c} -.navbar{ background:#2d6dcc}/*顶部导航*/ +.navbar{ background:#409eff;}/*顶部导航*/ .navbar-logo,.navbar-logo-m,.navbar-slogan,.navbar-userbar{color:#fff}/*logo 及 用户信息文字颜色*/ .navbar-logo:hover,.navbar-logo-m:hover{color:#fff;text-decoration: none} diff --git a/src/main/webapp/reportHtml/offlineReportTemplateNew.xml b/src/main/webapp/reportHtml/offlineReportTemplateNew.xml index a80f3b146ab722df218e4f30abac33345a59af1c..1fb060e23321a32bc5138e2c6b3eee6f1e6f05b7 100644 --- a/src/main/webapp/reportHtml/offlineReportTemplateNew.xml +++ b/src/main/webapp/reportHtml/offlineReportTemplateNew.xml @@ -103,7 +103,7 @@ - +
@@ -138,7 +138,7 @@
@@ -298,7 +298,7 @@ var mySetting = { $("#testDate").append(object.desc.testDate); var $selectSystems = $("#business-system-views"); $.each(object.desc.systems, function(i, name){ - $selectSystems.append(''); + $selectSystems.append(''); }); resultData = object.data; diff --git a/src/main/webapp/resource/advanced/interfaceProbe.js b/src/main/webapp/resource/advanced/interfaceProbe.js index 4e3d6f4b5c748f8aeb02cde9dcc56aaae62322df..d30b4f1084444582319e368f42fc34908f4f1365 100644 --- a/src/main/webapp/resource/advanced/interfaceProbe.js +++ b/src/main/webapp/resource/advanced/interfaceProbe.js @@ -4,7 +4,7 @@ var validateConfig = {//配置选项验证规则 "config.intervalTime":{ required:true, digits:true, - range:[60, 86400] + range:[30, 86400] }, "config.maxCallTime":{ number:true, @@ -428,7 +428,6 @@ var eventList = { var data = table.row( $(this).parents('tr') ).data(); layer_show(data.scene.interfaceName + "-探测任务配置", templates["interface-probe-setting-config"](data.config), 860, 600, 1, function(layero, index) { - $("#addHeaderFlag").val(data.config.addHeaderFlag); $("#notifyType").val(data.config.notifyType); $("#notifyLevel").val(data.config.notifyLevel); $("#probeId").val(data.probeId); @@ -482,7 +481,7 @@ var eventList = { }); }, "#choose-probe-scene":function () { - layer_show("选择探测接口场景", "chooseMessageScene.html?callbackFun=c", null, null, 2); + layer_show("选择探测接口场景", "chooseMessageScene.html?callbackFun=chooseScene", null, null, 2); }, "#add-object":function(){ publish.renderParams.editPage.modeFlag = 0; diff --git a/src/main/webapp/resource/message/autoTask.js b/src/main/webapp/resource/message/autoTask.js index 16f0fdf1b0264f1c4d5d69af856f9b1c2f62eb95..818752afb9943bf613faaebbfb694758a13a7b92 100644 --- a/src/main/webapp/resource/message/autoTask.js +++ b/src/main/webapp/resource/message/autoTask.js @@ -107,21 +107,6 @@ var templateParams = { }] }] }, - { - required:true, - reminder: "暂不可用", - label:"短信通知", - select:[{ - name:"smsNotify", - option:[{ - value:"0", - text:"否" - },{ - value:"1", - text:"是" - }] - }] - }, { name:"status", value:"1" diff --git a/src/main/webapp/resource/message/interface.js b/src/main/webapp/resource/message/interface.js index a970cfda4a0d9ff6b2e0559d980fd14ce8e9ee72..90ecfe0da9f4756bc4ddd9681fbd83e02f297e22 100644 --- a/src/main/webapp/resource/message/interface.js +++ b/src/main/webapp/resource/message/interface.js @@ -21,6 +21,10 @@ var templateParams = { { name: '更新测试环境', id: 'batch-update-system' + }, + { + name: '新增接口参数', + id: 'batch-insert-parameter' } ] },{ @@ -330,6 +334,31 @@ var columnsSetting = [ ]; var eventList = { + "#batch-insert-parameter":function () { + layer_show("批量新增参数", htmls['interface-batchAddParameter'], 777, 575, 1, function (layero, index) { + $(layero).find('#confirm-batch-add').click(function () { + let msg = $('#batch-add-param-json').val(); + if (!strIsNotEmpty(msg)) { + layer.msg('请输入完整再提交!', {icon: 0, time:1800}); + return; + } + if (!isJSON(msg)) { + layer.msg('提交报文格式有误!', {icon: 0, time:1800}); + return; + } + loading(true, "正在更新..."); + $.post(REQUEST_URL.INTERFACE.BATCH_UPDATE_PARAM, JSON.parse(msg), function (json) { + loading(false); + if (json.returnCode == 0) { + layer.msg('批量新增成功', {icon: 1, time:1800}) + refreshTable(); + } else { + layer.alert(json.msg, {icon:5}); + } + }); + }); + }); + }, ".show-interface-messages":function(){ var data = table.row( $(this).parents('tr') ).data(); $(this).attr("data-title", data.interfaceName + "-" + data.interfaceCnName + " " + "报文管理"); diff --git a/src/main/webapp/resource/message/message.js b/src/main/webapp/resource/message/message.js index fa837bc1c7b2438d5ddb6dc64324f1f77c0ab2ae..3751f90cdb3976c2a384470b2d442e43e1e09440 100644 --- a/src/main/webapp/resource/message/message.js +++ b/src/main/webapp/resource/message/message.js @@ -190,7 +190,7 @@ var templateParams = { { add: true, reminder:"创建此报文时同时创建一个默认的测试场景和测试数据。", - label:"创建默认场景", + label:"创建正常场景", select:[{ name:"createDefaultScene", option:[{ diff --git a/src/main/webapp/resource/message/report.js b/src/main/webapp/resource/message/report.js index b7d6f420f145ab8be8f7cf59828fa40cfeb44e69..ef1a85e6b7d02522e719304a7a679194720f068f 100644 --- a/src/main/webapp/resource/message/report.js +++ b/src/main/webapp/resource/message/report.js @@ -1,6 +1,6 @@ var templateParams = { - tableTheads:["测试集", "场景数", "成功数", "失败数", "异常数", "进度", "开始时间", "结束时间", "测试人" ,"备注", "操作"], + tableTheads:["测试报告", "场景数", "成功数", "失败数", "异常数", "进度", "开始时间", "结束时间", "测试人" ,"备注", "操作"], btnTools:[{ type:"danger", size:"M", diff --git a/src/main/webapp/resource/message/reportView.html b/src/main/webapp/resource/message/reportView.html index 3675988ca19762376502af2156c30f71bb5d68c1..5a735eab1c0ccabe69355bd84ae429e4f543c786 100644 --- a/src/main/webapp/resource/message/reportView.html +++ b/src/main/webapp/resource/message/reportView.html @@ -94,7 +94,7 @@ - +
diff --git a/src/main/webapp/resource/message/reportView.js b/src/main/webapp/resource/message/reportView.js index cb4caa2e3d42c1b034ca0b40564c08796959f501..681a394e890eda50bf155167cca920400084c1b4 100644 --- a/src/main/webapp/resource/message/reportView.js +++ b/src/main/webapp/resource/message/reportView.js @@ -87,7 +87,7 @@ var mySetting = { $("#testDate").append(data.desc.testDate); var $selectSystems = $("#business-system-views"); $.each(data.desc.systems, function(i, name){ - $selectSystems.append(''); + $selectSystems.append(''); }); resultData = data.data; diff --git a/src/main/webapp/resource/message/result.js b/src/main/webapp/resource/message/result.js index 1d219db77dad01b1b3fe859fc870bfd56a5d26df..d8f3db91fcae21e47ace0c95c968499cfa7a773f 100644 --- a/src/main/webapp/resource/message/result.js +++ b/src/main/webapp/resource/message/result.js @@ -11,7 +11,7 @@ var templateParams = { iconFont:"", name:"统计视图" }], - tableTheads:["接口", "结果", "状态码", "耗时ms", "测试时间", "备注","详情"] + tableTheads:["接口/组合场景", "结果", "状态码", "耗时ms", "测试时间", "备注","详情"] }; var columnsSetting = [ @@ -22,9 +22,8 @@ var columnsSetting = [ }}, { "data":"messageInfo", - "className":"ellipsis probe-scene-name", + "className":"ellipsis", "render":function(data, type, full, meta){ - data = (data.split(","))[0]; return '' + data + ''; } @@ -125,38 +124,22 @@ var eventList = { }, '.show-result-detail':function() { var data = table.row( $(this).parents('tr') ).data(); + if (data.protocolType == 'FIXED') { + if (data.complexSceneResults == null || data.complexSceneResults.length < 1) { + layer.msg('该组合场景没有测试结果', {icon: 0, time: 1800}); + return false; + } + layer_show( '组合场景-测试结果 点击查看对应详情', templates["complex-scene-results-view"]({results:data.complexSceneResults}), 600, 300, 1, function(layero, index){ + layero.find('.result-view').bind('click', function(){ + renderResultViewPage(data.complexSceneResults[$(this).attr("data-id")]); + }); + }, function(index, layero) { + layero.find('.result-view').unbind('click'); + }, null); + return false; + } renderResultViewPage(data); - - // var color = ""; - // var flag = ""; - // if (data.runStatus == "0") { - // color = "success"; - // flag = "SUCCESS"; - // } else if (data.runStatus == "1"){ - // color = "danger"; - // flag = "FAIL"; - // } else { - // color = "default"; - // flag = "STOP"; - // } - // var resultData = { - // requestMessage:(data.requestMessage == "null") ? "" : data.requestMessage, - // requestUrl:data.requestUrl, - // businessSystemName:data.businessSystemName, - // color:color, - // flag:flag, - // useTime:data.useTime, - // statusCode:data.statusCode, - // responseMessage:(data.responseMessage != "null") ? data.responseMessage : "", - // mark:data.mark - // }; - // - // layer_show('测试结果', templates["scene-test-result"](resultData), null, null, 1, null, null, null, { - // shade: 0.35, - // shadeClose:true, - // skin: 'layui-layer-rim', //加上边框 - // }) } }; diff --git a/src/main/webapp/resource/message/setScene.js b/src/main/webapp/resource/message/setScene.js index f5658a5a444e6b0a9d3eb66ff7f558abe0ce17fd..60d1a14b70849eda64190ff20ede0a749e4f8bef 100644 --- a/src/main/webapp/resource/message/setScene.js +++ b/src/main/webapp/resource/message/setScene.js @@ -209,7 +209,7 @@ var eventList = { $.get(REQUEST_URL.POOL_DATA_ITEM.LIST_ALL, {poolId: poolId},function(json) { if (json.returnCode == 0) { layerMultipleChoose({ - title:"请选择数据池类别(可多选)", + title:"请选择数据池类别(只能选择一个)", customData:{//自定义数据,Array数组对象 enable:true, data:json.data, @@ -219,6 +219,7 @@ var eventList = { choosedValues:$("#poolItemIds").val().split(','),//已被选择的数据合集 closeLayer:true,//是否在确认之后自动关闭窗口 minChooseCount:1, + maxChooseCount:1, confirmCallback:function (chooseValues, chooseObjects, index) { $("#choose-pool-item-ids").siblings('p').remove(); $.each(chooseObjects, function (i, n) { @@ -468,7 +469,7 @@ function changeTestData () { function viewRunSettingConfig () { layer_show(currentSetInfo.setName + "-运行时配置", templates["set-setting-config"](currentSetInfo.config), '800', '640', 1, function() { - //resetOptions(); + $("#runType").val(currentSetInfo.config.runType); }); } diff --git a/src/main/webapp/resource/message/testData.js b/src/main/webapp/resource/message/testData.js index 9a18030846fef85346d7fae96a9820e2213bf065..b5158962373afe7ffefdd95fa31d08dd2f5c0e78 100644 --- a/src/main/webapp/resource/message/testData.js +++ b/src/main/webapp/resource/message/testData.js @@ -52,7 +52,7 @@ var templateParams = { }, { label:"可用于的测试环境", - required:true, + reminder: "不选择默认适用于所有测试环境", input:[{ name:"systems", hidden:true @@ -364,9 +364,9 @@ var mySetting = { } }} }, - systems:{ - required:true - } + // systems:{ + // required:true + // } }, beforeInit:function(df){ $("#messageScene\\.messageSceneId").val(messageSceneId); diff --git a/src/main/webapp/resource/template/customTemplate.htm b/src/main/webapp/resource/template/customTemplate.htm index 5e7b020b381575b874908a028fbd012e50b14f71..b3ee5474e9361938d14fdc29d02210219688b34a 100644 --- a/src/main/webapp/resource/template/customTemplate.htm +++ b/src/main/webapp/resource/template/customTemplate.htm @@ -187,7 +187,7 @@ {{setName}} {{sceneNum}} {{complexSceneNum}} - 选择 + 执行测试 {{/each}} @@ -202,7 +202,7 @@
- +
@@ -223,17 +223,17 @@
-
- -
- - - -
-
+ + + + + + + + + + +
@@ -242,8 +242,7 @@ - - +
@@ -273,12 +272,12 @@
-
- -
- -
-
+ + + + + +
@@ -466,7 +465,11 @@
@@ -611,20 +614,9 @@
- +
- - - - - - - - - - -
@@ -667,12 +659,6 @@
- - - - - -
diff --git a/src/main/webapp/resource/template/interface-batchAddParameter.htm b/src/main/webapp/resource/template/interface-batchAddParameter.htm new file mode 100644 index 0000000000000000000000000000000000000000..6c5c15c2d203c2e05cf4af41862c42ffd292659a --- /dev/null +++ b/src/main/webapp/resource/template/interface-batchAddParameter.htm @@ -0,0 +1,31 @@ +
+ + +

通过以下指定的JSON报文来批量新增多个或者全部接口下的参数信息,并可以将更新到关联的报文信息

+

+ ids: 要更新的接口ID集合,多个以逗号分隔,传入all|All表示更新到全部的接口下 必填
+ batchUpdateMessage: 是否同步更新参数到接口下的所有报文信息中 必填
+ updateParam.attributes: 参数的节点属性,key=value形式,多个;号分隔
+ updateParam.path: 参数的节点路径,不包括自己的节点名,根节点则为空
+ updateParam.type: 参数的类型,支持String,Number等 必填
+ updateParam.defaultValue: 参数的默认值
+ updateParam.mark: 参数的备注
+ updateParam.parameterIdentify: 参数的标识 必填
+ updateParam.parameterName: 参数的名称,一般为中文释义 +

+
+ +
\ No newline at end of file diff --git a/src/main/webapp/welcome.js b/src/main/webapp/welcome.js index 3e0eb459a2d53bd6a633eaf3ae763ae1796b3478..948956e8ada1c4568f6c1b56e8267c476cea90ed 100644 --- a/src/main/webapp/welcome.js +++ b/src/main/webapp/welcome.js @@ -30,7 +30,14 @@ $(document).ready(function(){ if (json.returnCode == RETURN_CODE.SUCCESS) { top.currentUserPermissionList = json.data; } else { - layer.alert('获取用户权限信息出错,请重新登陆!'); + setTimeout(function () { + $.get(REQUEST_URL.ROLE.GET_USER_PERMISSION_LIST, function (json) { + if (json.returnCode == RETURN_CODE.SUCCESS) { + top.currentUserPermissionList = json.data; + } + }); + }, 500); + //layer.alert('获取用户权限信息出错,请重新登陆!'); } }); diff --git a/update.md b/update.md index d21d102022f18029d07156a188e912a0605a58ed..1503f7341ef41e87e603a28219794702b5780e37 100644 --- a/update.md +++ b/update.md @@ -3,6 +3,8 @@ - 增加全局变量动态组合接口类型,通过组合场景去获取变量参数; - 修复测试时获取不到用户的全局配置的问题; - 报文增加BodyToQuery选项,方便在Post请求时管理Query参数; +- 增加批量增加接口参数的快捷操作; +- 优化页面的一些展示内容。 ### v1.1.2 #### 2021.01.30 diff --git a/yi_20190801.sql b/yi_20190801.sql index 07093b10a3441a2704db61f8575443b191415107..2ce10f13d93651fa69fe20d95f76ae9c682b7aaf 100644 --- a/yi_20190801.sql +++ b/yi_20190801.sql @@ -720,46 +720,7 @@ DELETE FROM `at_parameter`; INSERT INTO `at_parameter` (`parameter_id`, `parameter_identify`, `parameter_name`, `default_value`, `path`, `type`, `attributes`, `mark`, `interface_id`) VALUES (1, '', '', '', '', 'Object', NULL, NULL, NULL), (2, '', '', '', '', 'Array_array', NULL, NULL, NULL), - (3, '', '', '', '', 'Array_map', NULL, NULL, NULL), - (2393, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (2394, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (2395, '28 10045099000001200001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2396, '28 10094099000001300001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2397, '2f 20801099000001400001013675181286~1~201611;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2398, '28 10033099000001500001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2399, '28 10037099000001600001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2400, '28 10076099000001700001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2401, '28 20014099000001800001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2402, '28 20022099000001900001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2403, '28 20027099000002000001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2404, '28 20046099000002100001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2405, '28 20125099000002200001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2406, '28 20126099000002300001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2407, '28 20342099000002400001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2408, '28 20401099000002500001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2409, '28 20604099000002600001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2410, '28 20888099000002700001013675181286~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2411, '{\r\n"ROOT":{\r\n"ROUTE_NO":"13505501356",\r\n"CHANNEL_TYPE":"31a",\r\n"PHONE_NO":"13505501356",\r\n"LOGIN_NO":"Y18600TCH"\r\n}\r\n}', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2768, '10008;13675181286~100866~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2769, '10008;13675181286~100866~1;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2770, '5002;13675181286~14;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (2771, '5004;13675181286~14;', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3110, '\r\n\r\n \r\n \r\n 01\r\n 15851740243\r\n 69\r\n UMMPBIP3A20120161027103750293250\r\n 392c4ff582984c9b9474016e6a8e3dbd\r\n ]]>\r\n \r\n', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3115, '\n\n \n \n \n 01\n 15851740243\n 69\n UMMPBIP3A20120161027103750293250\n 392c4ff582984c9b9474016e6a8e3dbd\n ]]> \n\n', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3362, 'sdadasdasda', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3363, 'sdadasdasda', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3397, '{\n"code":200,\n"errorMsg":""\n"id":987,\n"name":"xuwangcheng",\n"age":28,\n"profession":"性能测试工程师",\n"salary":2587\n}', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3398, '{\n"code":200,\n"errorMsg":""\n"id":987,\n"name":"xuwangcheng",\n"age":28,\n"profession":"性能测试工程师",\n"salary":2587\n}', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3399, '{\n"code":200,\n"errorMsg":""\n"id":987,\n"name":"xuwangcheng",\n"age":28,\n"profession":"性能测试工程师",\n"salary":2587\n}', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3421, '31231', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3422, '', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3423, '', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3424, '', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3425, '', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3426, '', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3427, ' ', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3428, '{\r\n}', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL), - (3429, '{\r\n}', 'name', 'defaultValue', 'path', 'String', NULL, NULL, NULL); + (3, '', '', '', '', 'Array_map', NULL, NULL, NULL); /*!40000 ALTER TABLE `at_parameter` ENABLE KEYS */; -- 导出 表 yi.at_performance_test_config 结构