From 75a9c069bf230c369d75601816d562ea0349d7df Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Fri, 27 Sep 2019 18:26:01 +0800 Subject: [PATCH 1/8] =?UTF-8?q?api=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yi/master/business/api/service/user/ApiUserService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/yi/master/business/api/service/user/ApiUserService.java b/src/main/java/yi/master/business/api/service/user/ApiUserService.java index 4950776..bd22849 100644 --- a/src/main/java/yi/master/business/api/service/user/ApiUserService.java +++ b/src/main/java/yi/master/business/api/service/user/ApiUserService.java @@ -49,7 +49,11 @@ public class ApiUserService { userService.edit(user); return new ApiReturnInfo(ApiReturnInfo.SUCCESS_CODE, "添加用户信息成功!", null); } - return new ApiReturnInfo(ApiReturnInfo.ERROR_CODE, "添加失败:userid已存在!", "{\"userid\":\"" + user.getIfNew() + "\",\"username\":\"" + user.getRealName() + "\"}"); + //如果存在就更新 + user.setPassword(passwd); + user.setUsername(username); + userService.edit(user); + return new ApiReturnInfo(ApiReturnInfo.SUCCESS_CODE, "更新成功!", null); } public ApiReturnInfo syncDel(String userid) { -- Gitee From f2a1346869ea7f0cca1cca3d2a8398aa604429e8 Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Wed, 9 Oct 2019 15:39:51 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AHTTP=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E4=BD=BF=E7=94=A8GET=E8=AF=B7=E6=B1=82=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E5=8F=82=E6=95=B0=E5=80=BC=E4=B8=BA=E7=A9=BA=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=E4=BC=9A=E5=AF=BC=E8=87=B4=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E7=9A=84=E6=8B=BC=E6=8E=A5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=B0URL=E5=90=8E=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B=20=E4=BF=AE=E5=A4=8D=EF=BC=9A?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E8=8E=B7=E5=8F=96=E8=8F=9C=E5=8D=95=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=87=BA=E7=8E=B0=E7=9A=84=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coretest/message/parse/URLMessageParse.java | 7 ++----- .../message/protocol/HTTPTestClient.java | 2 +- src/main/webapp/index.html | 16 ++++++++-------- src/main/webapp/welcome.html | 1 + update.md | 4 ++++ 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java b/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java index e740e39..a06dced 100644 --- a/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java +++ b/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java @@ -120,8 +120,7 @@ public class URLMessageParse extends MessageParse { String[] params = parseMessageToSingleRow(message).split("&"); for (String s:params) { - String[] parameter = StringUtils.split(s, "=", 2); - if (parameter.length != 2) { + if (!s.contains("=")) { return false; } } @@ -181,9 +180,7 @@ public class URLMessageParse extends MessageParse { } } } - if (parameter.length > 1) { - params.put(parameter[0], parameter[1]); - } + params.put(parameter[0], parameter.length > 1 ? parameter[1] : ""); } return params; 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 e34fb19..821ff40 100644 --- a/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java +++ b/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java @@ -422,8 +422,8 @@ public class HTTPTestClient extends TestClient { } if (!StringUtils.isBlank(query.getKey())) { sbQuery.append(query.getKey()); + sbQuery.append("="); if (!StringUtils.isBlank(query.getValue())) { - sbQuery.append("="); sbQuery.append(URLEncoder.encode(PracticalUtils.replaceGlobalVariable(query.getValue(), null), ENC_CHARSET)); } } diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 160b5c6..31a217c 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -114,10 +114,9 @@ var templates; var htmls; var menuJson; - $(document).ready(function() { - //初始化加载菜单 - loadMenuTemplate(); - + + var loadMenuFun; + $(document).ready(function() { $('iframe').attr("src", "welcome.html"); /***********通过外部登录的方式打开首页****************/ @@ -133,7 +132,10 @@ $(".openIframeNew").on("click",function(){ Hui_admin_tab(this); - }); + }); + + //初始化加载菜单 + //loadMenuTemplate(); /*******************初始化子iFrame中的模板和远程子页面html代码***************************/ //模板id @@ -164,7 +166,7 @@ } /********************加载菜单***************************/ - function loadMenuTemplate() { + loadMenuFun = function() { $.get(REQUEST_URL.MENU.GET_USER_MENUS, function(data){ if (data.returnCode == 0) { menuJson = data.data; @@ -183,8 +185,6 @@ name && (layer.msg('已切换至系统:' + name, {time:2000})); }); }) - } else { - layer.alert('获取菜单信息失败:' + (data.msg || '未知原因'), {icon: 5}); } }); } diff --git a/src/main/webapp/welcome.html b/src/main/webapp/welcome.html index 0dd2b2e..477a131 100644 --- a/src/main/webapp/welcome.html +++ b/src/main/webapp/welcome.html @@ -114,6 +114,7 @@ var df = $.Deferred(); df.done(function(){ if (!($.isEmptyObject(userInfo))) { + parent.loadMenuFun(); getSetting(); getMailNum(); getStatisticalQuantity(); diff --git a/update.md b/update.md index c60d480..7fd91fa 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,7 @@ +### v0.2.1beta +#### 2019.09.15 +- 修复:HTTP协议使用GET请求如果参数值为空的情况会导致无法正确的拼接查询参数到URL后面的问题 + ### v0.2.0beta #### 2019.09.15 - 新增:HTTP/HTTPS接口支持请求类型PUT/DELETE -- Gitee From 95fc7f06bfbd4be22a8f32401b7daa6e14327e56 Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Mon, 21 Oct 2019 16:20:27 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/test/performance/PerformanceTestObject.java | 5 +++-- src/main/java/yi/master/util/PracticalUtils.java | 4 +++- src/main/java/yi/master/util/notify/NotifyMail.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java b/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java index b0b53c4..30e568f 100644 --- a/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java +++ b/src/main/java/yi/master/coretest/message/test/performance/PerformanceTestObject.java @@ -29,6 +29,7 @@ import org.apache.struts2.json.annotations.JSON; import yi.master.business.advanced.bean.PerformanceTestConfig; import yi.master.business.advanced.bean.PerformanceTestResult; import yi.master.business.advanced.bean.config.performancetest.PerformanceTestAnalyzeResult; +import yi.master.business.advanced.enums.PtParameterGetType; import yi.master.business.advanced.service.PerformanceTestResultService; import yi.master.business.message.bean.InterfaceInfo; import yi.master.business.message.bean.Message; @@ -731,7 +732,7 @@ public class PerformanceTestObject { } //替换入参 //按顺序还是随机 - if ("1".equals(config.getParameterPickType())) { + if (PtParameterGetType.RANDOM.getType().equals(config.getParameterPickType())) { if (threadParameters.size() == 1) { index = 0; } else { @@ -740,7 +741,7 @@ public class PerformanceTestObject { } //可重复还是不可重复 Map replaceParameter = threadParameters.get(index); - if ("0".equals(config.getParameterReuse())) { + if (SystemConsts.DefaultBooleanIdentify.FALSE.getNumber().equals(config.getParameterReuse())) { //不可复用 threadParameters.remove(index); } else { diff --git a/src/main/java/yi/master/util/PracticalUtils.java b/src/main/java/yi/master/util/PracticalUtils.java index 3cf93a4..e93c67d 100644 --- a/src/main/java/yi/master/util/PracticalUtils.java +++ b/src/main/java/yi/master/util/PracticalUtils.java @@ -129,7 +129,9 @@ public class PracticalUtils { String OS = System.getProperty("os.name").toLowerCase(); if (OS.indexOf("win") >= 0) { return true; - } else return false; + } else { + return false; + } } /** diff --git a/src/main/java/yi/master/util/notify/NotifyMail.java b/src/main/java/yi/master/util/notify/NotifyMail.java index c26cdee..6e2cfd7 100644 --- a/src/main/java/yi/master/util/notify/NotifyMail.java +++ b/src/main/java/yi/master/util/notify/NotifyMail.java @@ -19,7 +19,7 @@ import yi.master.constant.SystemConsts; import yi.master.util.cache.CacheUtil; /** - * 邮件停止工具 + * 邮件通知工具 * @author xuwangcheng14@163.com * @date 2017.2 */ -- Gitee From 87c4b4386427949d8be9a0490bdb16bd245dab8d Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Mon, 21 Oct 2019 17:56:07 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E5=88=9B=E5=BB=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yi/master/business/user/action/RoleAction.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/yi/master/business/user/action/RoleAction.java b/src/main/java/yi/master/business/user/action/RoleAction.java index cbb85ab..e16ee33 100644 --- a/src/main/java/yi/master/business/user/action/RoleAction.java +++ b/src/main/java/yi/master/business/user/action/RoleAction.java @@ -97,11 +97,7 @@ public class RoleAction extends BaseAction { * 根据传入的id判断是否为新增或者更新 */ @Override - public String edit() { - if (model.getRoleId() == SystemConsts.DefaultObjectId.ADMIN_ROLE.getId() - || model.getRoleId() == SystemConsts.DefaultObjectId.DEFAULT_ROLE.getId()) { - throw new YiException(AppErrorCode.ILLEGAL_HANDLE.getCode(), "不能删除预置管理员或者默认角色信息"); - } + public String edit() { checkObjectName(); if (!checkNameFlag.equals("true")) { @@ -109,6 +105,10 @@ public class RoleAction extends BaseAction { } if (model.getRoleId() != null) { + if (SystemConsts.DefaultObjectId.ADMIN_ROLE.getId() == model.getRoleId() + || SystemConsts.DefaultObjectId.DEFAULT_ROLE.getId() == model.getRoleId()) { + throw new YiException(AppErrorCode.ILLEGAL_HANDLE.getCode(), "不能编辑预置管理员或者默认角色信息"); + } //修改 model.setOis(roleService.get(model.getRoleId()).getOis()); } -- Gitee From 9db4484efcf2b9aa9d9b031800917bcee138b241 Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Mon, 11 Nov 2019 18:23:02 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../testconfig/bean/GlobalVariable.java | 2 +- .../message/parse/FixedMessageParse.java | 11 +- .../message/parse/JSONMessageParse.java | 6 +- .../message/parse/OPTMessageParse.java | 5 +- .../message/parse/URLMessageParse.java | 21 +- .../message/parse/XMLMessageParse.java | 8 +- .../message/protocol/HTTPTestClient.java | 2 +- .../message/test/MessageAutoTest.java | 267 ++++++++++-------- .../coretest/task/time/TimeTaskJobAction.java | 7 +- .../java/yi/master/util/PracticalUtils.java | 4 +- .../java/yi/master/util/message/JsonUtil.java | 10 +- src/main/webapp/js/dcits.js | 11 +- src/main/webapp/js/globalConstant.js | 5 +- src/main/webapp/resource/message/message.js | 8 +- .../resource/message/validateParameters.js | 13 +- .../template/messageScene-validateKeyword.htm | 8 +- update.md | 7 +- 17 files changed, 221 insertions(+), 174 deletions(-) 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 0c71410..18a1000 100644 --- a/src/main/java/yi/master/business/testconfig/bean/GlobalVariable.java +++ b/src/main/java/yi/master/business/testconfig/bean/GlobalVariable.java @@ -301,7 +301,7 @@ public class GlobalVariable implements Serializable { rule.setParameterName(JSONObject.fromObject(maps).toString()); rule.setValidateMethodFlag("0"); rule.setStatus("0"); - rule.setMark("模板创建的关联验证"); + rule.setMark(StringUtils.isNotBlank(this.mark) ? this.mark : "模板创建的关联验证"); return rule; } diff --git a/src/main/java/yi/master/coretest/message/parse/FixedMessageParse.java b/src/main/java/yi/master/coretest/message/parse/FixedMessageParse.java index 099e72f..e26fb52 100644 --- a/src/main/java/yi/master/coretest/message/parse/FixedMessageParse.java +++ b/src/main/java/yi/master/coretest/message/parse/FixedMessageParse.java @@ -1,6 +1,7 @@ package yi.master.coretest.message.parse; import net.sf.json.JSONObject; +import org.apache.commons.lang.StringUtils; import yi.master.business.message.bean.ComplexParameter; import yi.master.business.message.bean.Parameter; import yi.master.constant.MessageKeys; @@ -40,7 +41,9 @@ public class FixedMessageParse extends MessageParse { @Override public Set importMessageToParameter(String message, Set existParams) { - + if (StringUtils.isBlank(message)) { + return null; + } Set params = new HashSet(); Parameter param = new Parameter(message, "name", "defaultValue", "path", "String"); if (validateRepeatabilityParameter(existParams, param)) { @@ -59,15 +62,15 @@ public class FixedMessageParse extends MessageParse { @Override public String depacketizeMessageToString(ComplexParameter complexParameter, String paramsData) { - + if (complexParameter == null) { + return ""; + } Parameter param = complexParameter.getSelfParameter(); return messageFormatBeautify(param.getParameterIdentify()); } @Override public String checkParameterValidity(List params, String message) { - - for (Parameter p:params) { if (message.equals(p.getParameterIdentify())) { return SystemConsts.DefaultBooleanIdentify.TRUE.getString(); 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 b0cdc8e..46d3e13 100644 --- a/src/main/java/yi/master/coretest/message/parse/JSONMessageParse.java +++ b/src/main/java/yi/master/coretest/message/parse/JSONMessageParse.java @@ -74,15 +74,15 @@ public class JSONMessageParse extends MessageParse { @Override public String depacketizeMessageToString(ComplexParameter complexParameter, String paramsData) { - + if (complexParameter == null) { + return ""; + } return messageFormatBeautify(paraseJsonMessage(complexParameter, new StringBuilder(""), PracticalUtils.jsonToMap(paramsData)).toString()); } @SuppressWarnings("unchecked") @Override public String checkParameterValidity(List params, String message) { - - Object[] o = null; try { o = (Object[]) JsonUtil.getJsonList(message, 3); diff --git a/src/main/java/yi/master/coretest/message/parse/OPTMessageParse.java b/src/main/java/yi/master/coretest/message/parse/OPTMessageParse.java index 7eeb6dc..a84e9b0 100644 --- a/src/main/java/yi/master/coretest/message/parse/OPTMessageParse.java +++ b/src/main/java/yi/master/coretest/message/parse/OPTMessageParse.java @@ -51,7 +51,10 @@ public class OPTMessageParse extends FixedMessageParse { @Override public String depacketizeMessageToString(ComplexParameter complexParameter, String paramsData) { - + if (complexParameter == null) { + return ""; + } + if (StringUtils.isNotEmpty(paramsData)) { Map params = PracticalUtils.jsonToMap(paramsData); for (Object o:params.values()) { diff --git a/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java b/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java index a06dced..2634347 100644 --- a/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java +++ b/src/main/java/yi/master/coretest/message/parse/URLMessageParse.java @@ -1,5 +1,6 @@ package yi.master.coretest.message.parse; +import com.mysql.fabric.xmlrpc.base.Params; import net.sf.json.JSONObject; import org.apache.commons.lang3.StringUtils; import yi.master.business.message.bean.ComplexParameter; @@ -55,13 +56,14 @@ public class URLMessageParse extends MessageParse { @Override public String depacketizeMessageToString(ComplexParameter complexParameter, String paramsData) { - + if (complexParameter == null) { + return ""; + } return messageFormatBeautify(paraseUrlMessage(complexParameter, new StringBuilder(""), PracticalUtils.jsonToMap(paramsData)).toString().substring(1)); } @Override public String checkParameterValidity(List params, String message) { - if (!messageFormatValidation(message)) { return "不是合法的url入参格式,请检查!"; } @@ -117,19 +119,22 @@ public class URLMessageParse extends MessageParse { @Override public boolean messageFormatValidation(String message) { - String[] params = parseMessageToSingleRow(message).split("&"); for (String s:params) { if (!s.contains("=")) { return false; } + + String[] ss = s.split("="); + if (ss == null || ss.length < 1) { + return false; + } } return true; } @Override public Set importMessageToParameter(String message, Set existParams) { - if (!messageFormatValidation(message)) { return null; } @@ -173,6 +178,10 @@ public class URLMessageParse extends MessageParse { loop: for (String s:urlParams) { String[] parameter = StringUtils.split(s, "=", 2); + if (parameter.length < 1) { + continue; + } + if (excludeAttributeNames != null) { for (String name:excludeAttributeNames) { if (name.equals(parameter[0])) { @@ -191,7 +200,9 @@ public class URLMessageParse extends MessageParse { StringBuilder message = new StringBuilder(); for (Object key:nodes.keySet()) { - if ("rootId".equals(key.toString())) continue; + if ("rootId".equals(key.toString())) { + continue; + } JSONObject node = nodes.getJSONObject(key.toString()); if (MessageKeys.MessageParameterType.isStringOrNumberType(node.getString("type"))) { if (message.length() > 0) { diff --git a/src/main/java/yi/master/coretest/message/parse/XMLMessageParse.java b/src/main/java/yi/master/coretest/message/parse/XMLMessageParse.java index c36e1f6..a268df0 100644 --- a/src/main/java/yi/master/coretest/message/parse/XMLMessageParse.java +++ b/src/main/java/yi/master/coretest/message/parse/XMLMessageParse.java @@ -75,6 +75,10 @@ public class XMLMessageParse extends MessageParse { @Override public String depacketizeMessageToString(ComplexParameter complexParameter, String paramsData) { + if (complexParameter == null) { + return ""; + } + return messageFormatBeautify(parseXmlMessage(complexParameter, new StringBuilder(""), PracticalUtils.jsonToMap(paramsData)).toString()); } @@ -125,8 +129,8 @@ public class XMLMessageParse extends MessageParse { } @SuppressWarnings("unchecked") - private StringBuilder parseXmlMessage(ComplexParameter parameter, StringBuilder message, Map messageData) { - + private StringBuilder parseXmlMessage(ComplexParameter parameter, StringBuilder message, Map messageData) { + if (parameter.getSelfParameter() == null) { return null; } 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 821ff40..db75c94 100644 --- a/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java +++ b/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java @@ -238,7 +238,7 @@ public class HTTPTestClient extends TestClient { requestSuccessFlag = true; } catch (Exception e) { LOGGER.info("发送请求出错...重试次数..." + retryCount, e); - errorMsg = e.getMessage(); + errorMsg = PracticalUtils.getExceptionAllinformation(e); } finally { retryCount++; } 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 29b23ef..382ce2f 100644 --- a/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java +++ b/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java @@ -243,139 +243,144 @@ public class MessageAutoTest { */ @SuppressWarnings("unchecked") public Object singleTestComplexScene (TestMessageScene testScene, TestReport report) { - //该组合场景测试上下文保存的变量 - Map saveVariables = new HashMap(); List results = new ArrayList<>(); - //组合场景测试备注 - StringBuilder complexMark = new StringBuilder(); - - MessageParse parseUtil = null; - //停止标记 - boolean stopFlag = false; - //测试最后一个的标记 - boolean lastTestFlag = false; - boolean allSuccessFlag = true; - - int lastSeqNum = 1; - //获取httpclient,其他协议的暂时也走这个,但是不影响,后期需要针对不同协议的客户端做改动 DefaultHttpClient procotolClient = null; - if (testScene.isNewClient()) { - procotolClient = (DefaultHttpClient) testScene.getTestClient().getTestClient(); - } - - for (TestMessageScene scene:testScene.getScenes()) { - if (stopFlag || scene == null || (lastTestFlag && !scene.getScene().getSequenceNum().equals(testScene.getScenes().size()))) { - complexMark.append("测试序号为[" + ++lastSeqNum + "]" + ",跳过测试该场景!\n"); - continue; + Boolean allSuccessFlag = null; + //组合场景测试备注 + StringBuilder complexMark = new StringBuilder(); + + //组合场景中的场景是否为空 + if (testScene.getScenes().size() > 0) { + allSuccessFlag = true; + //该组合场景测试上下文保存的变量 + Map saveVariables = new HashMap(); + + //停止标记 + boolean stopFlag = false; + //测试最后一个的标记 + boolean lastTestFlag = false; + + int lastSeqNum = 1; + + if (testScene.isNewClient()) { + procotolClient = (DefaultHttpClient) testScene.getTestClient().getTestClient(); } - - lastSeqNum = scene.getScene().getSequenceNum(); - parseUtil = scene.getParseUtil(); - //替换上下文变量 - for (Map.Entry entry:scene.getScene().getConfig().getUseVariables().entrySet()) { - String value = null; - if (saveVariables.containsKey(entry.getValue())) { - //如果有对应上下文替换变量的就替换掉,否则使用常量 - value = saveVariables.get(entry.getValue()); - } else { - value = entry.getValue(); - } - - if (scene.getCallParameter() == null) { - scene.setCallParameter(new HashMap()); - scene.getCallParameter().put(MessageKeys.HTTP_PARAMETER_HEADER, new HashMap()); - } - if (scene.getCallParameter().get(MessageKeys.HTTP_PARAMETER_QUERYS) == null) { - scene.getCallParameter().put(MessageKeys.HTTP_PARAMETER_QUERYS, new HashMap()); + + for (TestMessageScene scene:testScene.getScenes()) { + if (stopFlag || scene == null || (lastTestFlag && !scene.getScene().getSequenceNum().equals(testScene.getScenes().size()))) { + complexMark.append("测试序号为[" + ++lastSeqNum + "]" + ",跳过测试该场景!\n"); + continue; } - - //根据变量名来判断是替换请求头还是请求体还是query参数 - if (entry.getKey().startsWith("RequestHeader.")) { - ((Map) scene.getCallParameter().get(MessageKeys.HTTP_PARAMETER_HEADER)).put(entry.getKey().substring(entry.getKey().indexOf(".") + 1) - , value); - } else if (entry.getKey().startsWith("Querys.")) { - ((Map) scene.getCallParameter().get(MessageKeys.HTTP_PARAMETER_QUERYS)).put(entry.getKey().substring(entry.getKey().indexOf(".") + 1) - , value); - } else { - scene.setRequestMessage(scene.getRequestMessage().replace(MessageKeys.CUSTOM_PARAMETER_BOUNDARY_SYMBOL_LEFT + - entry.getValue() + MessageKeys.CUSTOM_PARAMETER_BOUNDARY_SYMBOL_RIGHT, value)); + + lastSeqNum = scene.getScene().getSequenceNum(); + //替换上下文变量 + for (Map.Entry entry:scene.getScene().getConfig().getUseVariables().entrySet()) { + String value = null; + if (saveVariables.containsKey(entry.getValue())) { + //如果有对应上下文替换变量的就替换掉,否则使用常量 + value = saveVariables.get(entry.getValue()); + } else { + value = entry.getValue(); + } + + if (scene.getCallParameter() == null) { + scene.setCallParameter(new HashMap()); + scene.getCallParameter().put(MessageKeys.HTTP_PARAMETER_HEADER, new HashMap()); + } + if (scene.getCallParameter().get(MessageKeys.HTTP_PARAMETER_QUERYS) == null) { + scene.getCallParameter().put(MessageKeys.HTTP_PARAMETER_QUERYS, new HashMap()); + } + + //根据变量名来判断是替换请求头还是请求体还是query参数 + if (entry.getKey().startsWith("RequestHeader.")) { + ((Map) scene.getCallParameter().get(MessageKeys.HTTP_PARAMETER_HEADER)).put(entry.getKey().substring(entry.getKey().indexOf(".") + 1) + , value); + } else if (entry.getKey().startsWith("Querys.")) { + ((Map) scene.getCallParameter().get(MessageKeys.HTTP_PARAMETER_QUERYS)).put(entry.getKey().substring(entry.getKey().indexOf(".") + 1) + , value); + } else { + scene.setRequestMessage(scene.getRequestMessage().replace(MessageKeys.CUSTOM_PARAMETER_BOUNDARY_SYMBOL_LEFT + + entry.getValue() + MessageKeys.CUSTOM_PARAMETER_BOUNDARY_SYMBOL_RIGHT, value)); + } + } - - } - boolean successFlag = false; - int requestCount = 0; - TestResult result = null; - int maxRetryCount = scene.getScene().getConfig().getRetryCount(); - while (!successFlag && maxRetryCount >= requestCount ++) { + boolean successFlag = false; + int requestCount = 0; + TestResult result = null; + int maxRetryCount = scene.getScene().getConfig().getRetryCount(); + while (!successFlag && maxRetryCount >= requestCount ++) { - result = singleTest(scene, procotolClient); - - //如果场景测试成功 - if (MessageKeys.TestRunStatus.SUCCESS.getCode().equals(result.getRunStatus())) { - successFlag = true; - continue; + result = singleTest(scene, procotolClient); + + //如果场景测试成功 + if (MessageKeys.TestRunStatus.SUCCESS.getCode().equals(result.getRunStatus())) { + successFlag = true; + continue; + } + try { + Thread.sleep(scene.getScene().getConfig().getIntervalTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + + } } - try { - Thread.sleep(scene.getScene().getConfig().getIntervalTime()); - } catch (InterruptedException e) { - e.printStackTrace(); - + result.setMark("组合场景名 [" + testScene.getComplexScene().getComplexSceneName() + "] ,执行序号 [" + scene.getScene().getSequenceNum() + "] \n\n" + result.getMark()); + results.add(result); + //测试成功要获取保存变量并设置数据状态 + if (successFlag) { + //保存上下文变量 + for (Map.Entry entry:scene.getScene().getConfig().getSaveVariables().entrySet()) { + String str = null; + //保存响应头中的变量 + if (entry.getKey().startsWith("ResponseHeader.") && StringUtils.isNotBlank(result.getHeaders())) { + JSONObject header = JSONObject.fromObject(result.getHeaders()); + String headerKey = entry.getKey().substring(entry.getKey().indexOf(".") + 1); + if (header.getJSONObject("ResponseHeader").has(headerKey)) { + str = header.getJSONObject("ResponseHeader").getString(headerKey); + } + } else { + //保存body体中的变量 + str = MessageParse.judgeMessageType(result.getResponseMessage()).getObjectByPath(result.getResponseMessage(), entry.getKey()); + } + + if (StringUtils.isNotEmpty(str)) { + saveVariables.put(entry.getValue(), str); + } + } } - } - result.setMark("组合场景名 [" + testScene.getComplexScene().getComplexSceneName() + "] ,执行序号 [" + scene.getScene().getSequenceNum() + "] \n\n" + result.getMark()); - results.add(result); - //测试成功要获取保存变量并设置数据状态 - if (successFlag) { - //保存上下文变量 - for (Map.Entry entry:scene.getScene().getConfig().getSaveVariables().entrySet()) { - String str = null; - //保存响应头中的变量 - if (entry.getKey().startsWith("ResponseHeader.") && StringUtils.isNotBlank(result.getHeaders())) { - JSONObject header = JSONObject.fromObject(result.getHeaders()); - String headerKey = entry.getKey().substring(entry.getKey().indexOf(".") + 1); - if (header.getJSONObject("ResponseHeader").has(headerKey)) { - str = header.getJSONObject("ResponseHeader").getString(headerKey); - } - } else { - //保存body体中的变量 - str = MessageParse.judgeMessageType(result.getResponseMessage()).getObjectByPath(result.getResponseMessage(), entry.getKey()); + //测试不成功的处理 + if (!successFlag) { + allSuccessFlag = false; + switch (scene.getScene().getConfig().getErrorExecFlag()) { + //退出组合场景的测试 + case "0": + stopFlag = true; + break; + //继续执行下一个场景 + case "1": + break; + //直接执行最后一个场景 + case "2": + lastTestFlag = true; + break; + default: + break; } - - if (StringUtils.isNotEmpty(str)) { - saveVariables.put(entry.getValue(), str); + } + + //一定时间间隔后执行下一个场景 + if (!stopFlag) { + try { + Thread.sleep(scene.getScene().getConfig().getIntervalTime()); + } catch (InterruptedException e) { + LOGGER.warn("InterruptedException", e); } - } - } - //测试不成功的处理 - if (!successFlag) { - allSuccessFlag = false; - switch (scene.getScene().getConfig().getErrorExecFlag()) { - //退出组合场景的测试 - case "0": - stopFlag = true; - break; - //继续执行下一个场景 - case "1": - break; - //直接执行最后一个场景 - case "2": - lastTestFlag = true; - break; - default: - break; } } - - //一定时间间隔后执行下一个场景 - if (!stopFlag) { - try { - Thread.sleep(scene.getScene().getConfig().getIntervalTime()); - } catch (InterruptedException e) { - LOGGER.warn("InterruptedException", e); - } - } - } + } + + if(testScene.getTestClient() != null) { testScene.getTestClient().putBackTestClient(procotolClient); @@ -396,8 +401,13 @@ public class MessageAutoTest { complexResult.setMark(complexMark.toString()); complexResult.setUseTime(0); complexResult.setProtocolType("FIXED"); - complexResult.setStatusCode("000"); - complexResult.setRunStatus(allSuccessFlag ? MessageKeys.TestRunStatus.SUCCESS.getCode() : MessageKeys.TestRunStatus.FAIL.getCode()); + if (allSuccessFlag == null) { + complexResult.setStatusCode("false"); + complexResult.setRunStatus(MessageKeys.TestRunStatus.STOP.getCode()); + } else { + complexResult.setStatusCode("000"); + complexResult.setRunStatus(allSuccessFlag ? MessageKeys.TestRunStatus.SUCCESS.getCode() : MessageKeys.TestRunStatus.FAIL.getCode()); + } complexResult.setComplexSceneResults(new TreeSet(results)); complexResult.setRequestUrl(""); complexResult.setRequestMessage(""); @@ -478,12 +488,22 @@ public class MessageAutoTest { } //场景数量 分别为finishCount和totalCount final int[] count = new int[]{0, testObjects.size()}; - + + //检查场景数量,包含单场景和组合场景中的场景 + boolean noSceneFlag = testObjects.size() > 0 ? false : true; //组装组合场景中的测试场景 for (ComplexScene s:complexScenes) { TestMessageScene testScene = packageComplexRequestObject(s, config); count[1] = count[1] + testScene.getTestCount(); testObjects.add(testScene); + + if (noSceneFlag && testScene.getScenes().size() > 0) { + noSceneFlag = false; + } + } + + if (noSceneFlag) { + return null; } //筛选出置顶测试场景 @@ -501,7 +521,6 @@ public class MessageAutoTest { Collections.sort(testObjects, new Comparator() { @Override public int compare(TestMessageScene o1, TestMessageScene o2) { - return o2.getPriority() - o1.getPriority(); } }); diff --git a/src/main/java/yi/master/coretest/task/time/TimeTaskJobAction.java b/src/main/java/yi/master/coretest/task/time/TimeTaskJobAction.java index b8a329a..70189ac 100644 --- a/src/main/java/yi/master/coretest/task/time/TimeTaskJobAction.java +++ b/src/main/java/yi/master/coretest/task/time/TimeTaskJobAction.java @@ -21,12 +21,7 @@ import yi.master.util.cache.CacheUtil; * */ public class TimeTaskJobAction implements Job { - -/* @Autowired - private MessageAutoTest messageAutoTest; - @Autowired - private UserService userSerivce;*/ - + private static final Logger LOGGER = Logger.getLogger(TimeTaskJobAction.class); @SuppressWarnings("rawtypes") diff --git a/src/main/java/yi/master/util/PracticalUtils.java b/src/main/java/yi/master/util/PracticalUtils.java index e93c67d..b488ed7 100644 --- a/src/main/java/yi/master/util/PracticalUtils.java +++ b/src/main/java/yi/master/util/PracticalUtils.java @@ -675,7 +675,6 @@ public class PracticalUtils { * * @return */ - @SuppressWarnings("resource") public static String doGetHttpRequest(String requestUrl) { HTTPTestClient client = (HTTPTestClient) TestClient.getTestClientInstance("HTTP"); HttpRequestBase request = null; @@ -693,7 +692,6 @@ public class PracticalUtils { return returnMsg.toString(); } catch (Exception e) { - e.printStackTrace(); return e.getMessage(); } finally { if (request != null) { @@ -742,7 +740,7 @@ public class PracticalUtils { Map objs = (Map) obj.toBean(obj, Map.class); for (String key:objs.keySet()) { JSONObject o = obj.getJSONObject(key); - configs.put(key, (ComplexSceneConfig) o.getJSONObject(key).toBean(o, ComplexSceneConfig.class, classMap)); + configs.put(key, (ComplexSceneConfig) JSONObject.toBean(o, ComplexSceneConfig.class, classMap)); } return configs; diff --git a/src/main/java/yi/master/util/message/JsonUtil.java b/src/main/java/yi/master/util/message/JsonUtil.java index 06f05f8..ca7ddb4 100644 --- a/src/main/java/yi/master/util/message/JsonUtil.java +++ b/src/main/java/yi/master/util/message/JsonUtil.java @@ -112,16 +112,12 @@ public class JsonUtil { try { Map mp = null; List ls = null; - if (m instanceof Map || m instanceof LinkedHashMap) { mp = (LinkedHashMap) m; for (Iterator ite = mp.entrySet().iterator(); ite.hasNext();) { - Map.Entry e = (Map.Entry) ite.next(); - if (e.getValue() instanceof String) { - jsonTreeMap.put(e.getKey().toString(), e.getValue() .toString()); jsonTreeList.add(e.getKey().toString()); @@ -155,18 +151,16 @@ public class JsonUtil { parentNameC); } else if (e.getValue() instanceof Number) { - jsonTreeList.add(e.getKey().toString()); jsonTreeMap.put(e.getKey().toString(), String.valueOf(e.getValue())); jsonTreeType.add("Number"); jsonTreePath.add(parentName); - } else if (e.getValue() == null) { - + //不确定的类型统一识别为String类型 jsonTreeList.add(e.getKey().toString()); jsonTreeMap.put(e.getKey().toString(), "null"); - jsonTreeType.add("Unsureness"); + jsonTreeType.add("String"); jsonTreePath.add(parentName); } } diff --git a/src/main/webapp/js/dcits.js b/src/main/webapp/js/dcits.js index eed6feb..ece0ced 100644 --- a/src/main/webapp/js/dcits.js +++ b/src/main/webapp/js/dcits.js @@ -130,7 +130,7 @@ var publish = { * getUrl:获取实体对象时的请求地址 * rules:rules规则 定义验证规则 * messages 提示 定义验证时展示的提示信息 - * beforeSubmitCallback 提交表单数据之前的回调,带一个参数modeFlag表示当前是新增(0)还是编辑数据(1) + * beforeSubmitCallback 提交表单数据之前的回调,参数modeFlag表示当前是新增(0)还是编辑数据(1),参数formObj是提交表单的jquery对象 * closeFlag:成功提交并返回之后是否关闭当前编辑窗口 默认为true 可选false * ajaxCallbackFun: ajax提交中的回调函数 如传入null,则使用默认 * renderCallback:function(obj){} 如果默认的渲染结果不是完整或者正确的,可以传入该回调重新或者附加渲染 obj=通过get方法获取的对应实体对象 @@ -235,7 +235,7 @@ var publish = { getUrl:"", rules:{}, messages:{}, - beforeSubmitCallback:function(modeFlag) {}, + beforeSubmitCallback:function(modeFlag, formObj) {}, closeFlag:true, ajaxCallbackFun:null, renderCallback:function(obj) {}, @@ -807,10 +807,11 @@ function formValidate(formObj, rules, messages, ajaxUrl, closeFlag, ajaxCallback submitHandlerCallbackFun($(form).serialize()); return false; } - - if (beforeSubmitCallback != null) { - beforeSubmitCallback(publish.renderParams.editPage.modeFlag); + + if (typeof beforeSubmitCallback === 'function') { + beforeSubmitCallback(publish.renderParams.editPage.modeFlag, $(form)); } + var formData = $(form).serialize(); $.post(ajaxUrl, formData, callbackFun); } diff --git a/src/main/webapp/js/globalConstant.js b/src/main/webapp/js/globalConstant.js index f102c9e..918ab84 100644 --- a/src/main/webapp/js/globalConstant.js +++ b/src/main/webapp/js/globalConstant.js @@ -451,7 +451,10 @@ var MESSAGE_PROTOCOL = { "ConnectTimeOut":"", "ReadTimeOut":"" }, - "Dubbo":{} + "Dubbo":{ + "ConnectTimeOut":"", + "ReadTimeOut":"" + } } diff --git a/src/main/webapp/resource/message/message.js b/src/main/webapp/resource/message/message.js index 33ac7c5..379d204 100644 --- a/src/main/webapp/resource/message/message.js +++ b/src/main/webapp/resource/message/message.js @@ -86,13 +86,13 @@ var templateParams = { }] }, { - label:"处理类型", + label:"报文处理器", select:[{ name:"processType", option:function(){ let options = [{ value:"", - text:"请选择一个处理类型" + text:"请选择一个报文处理器" }]; $.each(MESSAGE_PROCESS, function(k, p) { options.push({ @@ -529,11 +529,11 @@ var eventList = { "#setting-process-parameter":function(){ var processType = $("#processType").val(); if (!strIsNotEmpty(processType)) { - layer.msg('请先选择一个处理类型!', {icon:5, time:1600}); + layer.msg('请先选择一个报文处理器!', {icon:5, time:1600}); return false; } var processParameter = JSON.parse($("#processParameter").val() || MESSAGE_PROCESS[processType]) ; - window.settingLayerIndex = layer_show("报文处理参数" + window.settingLayerIndex = layer_show("报文处理器参数" , templates["message-process-parameter-setting"](processParameter), 680, 400, 1, function(layero, index) { }); }, diff --git a/src/main/webapp/resource/message/validateParameters.js b/src/main/webapp/resource/message/validateParameters.js index 9a38519..0d47c3f 100644 --- a/src/main/webapp/resource/message/validateParameters.js +++ b/src/main/webapp/resource/message/validateParameters.js @@ -64,7 +64,7 @@ var templateParams = { }, { required:true, - label:"预期验证值类型", + label:"预期比对值类型", button:[{ style:"primary", value:"选择", @@ -354,11 +354,11 @@ var eventList = { changeTigs("4"); layer.close(index); }} - ,function(index){ + ,function(index){//常量 changeTigs("0"); layer.close(index); } - ,function(index){ + ,function(index){//入参节点 changeTigs("1"); layer.close(index); }); @@ -372,6 +372,7 @@ var eventList = { $("#" + name).val(value); } }); + $('#mark').val(globalVariable['mark']); layer.msg('已加载配置!', {icon:1, time:1500}); layer.close(index); }); @@ -456,6 +457,8 @@ $(function(){ * 绑定事件 */ function bindChooseRequestNodePath(){ + //防止重复绑定事件,先解绑 + $("#validateValue").unbind('click'); $("#validateValue").bind('click', function(){ chooseParameterNodePath(REQUEST_URL.MESSAGE_SCENE.GET_REQUEST_MSG_JSON_TREE, {messageSceneId:messageSceneId}, { titleName:"入参节点选择", @@ -532,7 +535,7 @@ function addEditPageHtml() { function showValidatRulePage(validateId) { //关联验证 根据publish.renderParams.editPage.modeFlag 0为增加 1为编辑 if (addValidateMethodFlag == 0) { - layer_show('关联验证', htmls["messageScene-validateKeyword"], '840', '490', 1, function() { + layer_show('关联验证', htmls["messageScene-validateKeyword"], '840', '560', 1, function() { if (publish.renderParams.editPage.modeFlag == 1) { $.get(REQUEST_URL.VALIDATE.GET, {id:validateId},function(data){ if(data.returnCode == 0) { @@ -552,6 +555,7 @@ function showValidatRulePage(validateId) { $("#getValueMethod").val(data.getValueMethod || "0"); $("#messageScene\\.messageSceneId").val(messageSceneId); $("#status").val(data.status); + $("#mark").val(data.mark); } else { layer.alert(data.msg,{icon:5}); } @@ -595,6 +599,7 @@ function saveValidateJson(){ sendData.validateValue = $("#validateValue").val(); sendData.validateId = $("#validateId").val(); sendData.getValueMethod = $("#getValueMethod").val(); + sendData.mark = $('#mark').val(); sendData["messageScene.messageSceneId"] = messageSceneId; sendData["status"] = $("#status").val(); diff --git a/src/main/webapp/resource/template/messageScene-validateKeyword.htm b/src/main/webapp/resource/template/messageScene-validateKeyword.htm index a55bdad..d11d765 100644 --- a/src/main/webapp/resource/template/messageScene-validateKeyword.htm +++ b/src/main/webapp/resource/template/messageScene-validateKeyword.htm @@ -57,10 +57,16 @@ -
+
+
+ +
+ +
+
\ No newline at end of file diff --git a/update.md b/update.md index 7fd91fa..cc08bcc 100644 --- a/update.md +++ b/update.md @@ -1,6 +1,11 @@ ### v0.2.1beta #### 2019.09.15 -- 修复:HTTP协议使用GET请求如果参数值为空的情况会导致无法正确的拼接查询参数到URL后面的问题 +- 修复:HTTP协议使用GET请求如果参数值为空的情况会导致无法正确的拼接查询参数到URL后面的问题; +- 修复:组合场景中没有测试场景测试集测试也会显示成功的问题; +- 修复:验证规则->节点验证时,重复指定预期验证比对值类型为入参节点时,点击预期比对值会弹出多个节点选择框的问题; +- 更新:导入接口参数时对值为‘null’的节点类型统一设置为String; +- 更新:关联验证可以添加备注信息; +- 更新:组合场景里如果没有测试场景则该组合场景将会被置为Stop状态; ### v0.2.0beta #### 2019.09.15 -- Gitee From 24c80638ef880387208f9ba84909ce821e50dd71 Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Wed, 13 Nov 2019 19:09:54 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/message/action/MessageAction.java | 9 +++++---- .../message/protocol/DubboTestClient.java | 16 +++++++++------- .../entity/ClientTestResponseObject.java | 11 +++++++++++ src/main/webapp/resource/message/message.js | 2 +- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/main/java/yi/master/business/message/action/MessageAction.java b/src/main/java/yi/master/business/message/action/MessageAction.java index 260a3a0..9d85b36 100644 --- a/src/main/java/yi/master/business/message/action/MessageAction.java +++ b/src/main/java/yi/master/business/message/action/MessageAction.java @@ -164,10 +164,11 @@ public class MessageAction extends BaseAction{ } else { //删除之前的复杂参数 Message msg = messageService.get(model.getMessageId()); - Integer delId = msg.getComplexParameter().getId(); - msg.setComplexParameter(null); - - complexParameterService.delete(delId); + if (msg != null && msg.getComplexParameter() != null) { + Integer delId = msg.getComplexParameter().getId(); + msg.setComplexParameter(null); + complexParameterService.delete(delId); + } } model.setLastModifyUser(user.getRealName()); model.setParameterJson(parseUtil.messageFormatBeautify(model.getParameterJson())); diff --git a/src/main/java/yi/master/coretest/message/protocol/DubboTestClient.java b/src/main/java/yi/master/coretest/message/protocol/DubboTestClient.java index 359ea15..8c8093d 100644 --- a/src/main/java/yi/master/coretest/message/protocol/DubboTestClient.java +++ b/src/main/java/yi/master/coretest/message/protocol/DubboTestClient.java @@ -61,7 +61,7 @@ public class DubboTestClient extends TestClient { } String[] urls = requestUrl.split(":"); if (3 != urls.length) { - responseObject.setMark("配置出错,请检查!"); + responseObject.addMark("配置出错,请检查!"); return responseObject; } @@ -76,7 +76,7 @@ public class DubboTestClient extends TestClient { try { telnetClient = createClient(host, port,connectTimeOut, readTimeOut); } catch (IOException e) { - responseObject.setMark("无法连接到:" + host + ":" + port); + responseObject.addMark("Telnet无法连接到:" + host + ":" + port); } if (telnetClient != null && telnetClient.isConnected()) { @@ -85,22 +85,24 @@ public class DubboTestClient extends TestClient { try { long start = System.currentTimeMillis(); + responseObject.addMark(StrUtil.format("Telent成功连接到{}:{}", host, port)); + responseObject.addMark(StrUtil.format("执行命令: invoke {}({})", method, requestMessage)); String responseMsg = sendMsg("invoke " + method + "(" + requestMessage + ")", out, in); long end = System.currentTimeMillis(); - if (responseMsg != null) { logger.info(StrUtil.format("[{}:{}]Dubbo请求方法{},返回内容:\n{}", host, port, method, responseMsg)); + responseObject.addMark(StrUtil.format("返回内容:\n{}", responseMsg)); if (responseMsg.indexOf("syntax error") > -1) { - responseObject.setMark("请求参数格式错误(注意单个字符串请用双引号括起来)"); + responseObject.addMark("请求参数格式错误(注意单个字符串请用双引号括起来)"); return responseObject; } if (responseMsg.indexOf("Invalid parameters") > -1) { - responseObject.setMark("缺少方法参数"); + responseObject.addMark("缺少方法参数"); return responseObject; } if (responseMsg.indexOf("No such service") > -1 || responseMsg.indexOf("No such method") > -1) { - responseObject.setMark("无此方法:" + method); + responseObject.addMark("无此方法:" + method); return responseObject; } @@ -117,7 +119,7 @@ public class DubboTestClient extends TestClient { responseObject.setUseTime(end - start); responseObject.setResponseMessage(responseMsg); } catch (IOException e) { - responseObject.setMark("调用方法 " + method + " 失败:\n" + PracticalUtils.getExceptionAllinformation(e)); + responseObject.addMark("调用方法 " + method + " 失败:\n" + PracticalUtils.getExceptionAllinformation(e)); } finally { if (telnetClient != null && telnetClient.isConnected()) { try { diff --git a/src/main/java/yi/master/coretest/message/protocol/entity/ClientTestResponseObject.java b/src/main/java/yi/master/coretest/message/protocol/entity/ClientTestResponseObject.java index 6f9c4c4..95ec84e 100644 --- a/src/main/java/yi/master/coretest/message/protocol/entity/ClientTestResponseObject.java +++ b/src/main/java/yi/master/coretest/message/protocol/entity/ClientTestResponseObject.java @@ -1,5 +1,7 @@ package yi.master.coretest.message.protocol.entity; +import org.apache.commons.lang3.StringUtils; + /** * 测试结果返回 * @author xuwangcheng @@ -69,5 +71,14 @@ public class ClientTestResponseObject { public void setMark(String mark) { this.mark = mark; } + + public void addMark (String mark) { + if (this.mark == null) { + this.mark = ""; + } + if (StringUtils.isNotBlank(mark)) { + this.mark += ("\n" + mark); + } + } } diff --git a/src/main/webapp/resource/message/message.js b/src/main/webapp/resource/message/message.js index 379d204..6ef8b75 100644 --- a/src/main/webapp/resource/message/message.js +++ b/src/main/webapp/resource/message/message.js @@ -646,7 +646,7 @@ var mySetting = { }, messages:{ messageName:"请输入报文名称", - parameterJson:"请输入正确的报文 入参并点击验证", + parameterJson:"请输入正确的报文入参并点击验证", callParameter:"请点击配置按钮配置参数" }, renderCallback:function(obj){ -- Gitee From 4cfb27783ac48ad2eccea794d07c6e1c77943bd5 Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Fri, 15 Nov 2019 18:57:18 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yi/master/business/base/dao/BaseDao.java | 3 ++ .../business/base/dao/impl/BaseDaoImpl.java | 3 +- .../message/action/MessageAction.java | 34 ++++++++---- .../message/action/MessageSceneAction.java | 23 ++------ .../message/service/MessageSceneService.java | 11 ++++ .../message/service/MessageService.java | 11 +++- .../service/impl/MessageSceneServiceImpl.java | 52 +++++++++++++++++-- .../service/impl/MessageServiceImpl.java | 28 +++++++++- .../message/protocol/HTTPTestClient.java | 19 ++++--- .../message/protocol/WebSocketTestClient.java | 6 +-- .../message/test/MessageAutoTest.java | 4 +- src/main/webapp/js/dcits.js | 1 + src/main/webapp/resource/message/message.js | 20 +++++-- .../resource/template/customTemplate.htm | 2 +- update.md | 1 + 15 files changed, 167 insertions(+), 51 deletions(-) diff --git a/src/main/java/yi/master/business/base/dao/BaseDao.java b/src/main/java/yi/master/business/base/dao/BaseDao.java index 2d07135..2c2fc22 100644 --- a/src/main/java/yi/master/business/base/dao/BaseDao.java +++ b/src/main/java/yi/master/business/base/dao/BaseDao.java @@ -3,6 +3,7 @@ package yi.master.business.base.dao; import java.util.Date; import java.util.List; +import org.hibernate.Session; import yi.master.business.base.bean.PageModel; /** * 通用DAO接口 @@ -101,4 +102,6 @@ public interface BaseDao { * @return */ int getHqlCount(String hql); + + Session getSession(); } diff --git a/src/main/java/yi/master/business/base/dao/impl/BaseDaoImpl.java b/src/main/java/yi/master/business/base/dao/impl/BaseDaoImpl.java index 89595bd..1745e77 100644 --- a/src/main/java/yi/master/business/base/dao/impl/BaseDaoImpl.java +++ b/src/main/java/yi/master/business/base/dao/impl/BaseDaoImpl.java @@ -34,7 +34,8 @@ public class BaseDaoImpl implements BaseDao { public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } - + + @Override public Session getSession() { return this.sessionFactory.getCurrentSession(); } diff --git a/src/main/java/yi/master/business/message/action/MessageAction.java b/src/main/java/yi/master/business/message/action/MessageAction.java index 9d85b36..8f542d0 100644 --- a/src/main/java/yi/master/business/message/action/MessageAction.java +++ b/src/main/java/yi/master/business/message/action/MessageAction.java @@ -15,11 +15,9 @@ import org.springframework.stereotype.Controller; import yi.master.business.base.action.BaseAction; 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.Parameter; -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.business.message.service.*; import yi.master.business.user.bean.User; import yi.master.constant.ReturnCodeConsts; import yi.master.constant.SystemConsts; @@ -48,8 +46,16 @@ public class MessageAction extends BaseAction{ private String path; private String nodes; + + /** + * 是否在创建报文时创建一个默认的场景,只在新增时有效 + */ + private Boolean createDefaultScene; private MessageService messageService; + + @Autowired + private MessageSceneService messageSceneService; @Autowired public void setMessageService(MessageService messageService) { @@ -157,10 +163,16 @@ public class MessageAction extends BaseAction{ } User user = FrameworkUtil.getLoginUser(); + model.setLastModifyUser(user.getRealName()); + model.setParameterJson(parseUtil.messageFormatBeautify(model.getParameterJson())); if (model.getMessageId() == null) { //增加 model.setCreateTime(new Timestamp(System.currentTimeMillis())); - model.setUser(user); + model.setUser(user); + model.setComplexParameter(parseUtil.parseMessageToObject(model.getParameterJson(), new ArrayList(params))); + + //新增 + messageService.save(model, createDefaultScene); } else { //删除之前的复杂参数 Message msg = messageService.get(model.getMessageId()); @@ -169,11 +181,11 @@ public class MessageAction extends BaseAction{ msg.setComplexParameter(null); complexParameterService.delete(delId); } + model.setComplexParameter(parseUtil.parseMessageToObject(model.getParameterJson(), new ArrayList(params))); + //更新 + messageService.edit(model); } - model.setLastModifyUser(user.getRealName()); - model.setParameterJson(parseUtil.messageFormatBeautify(model.getParameterJson())); - model.setComplexParameter(parseUtil.parseMessageToObject(model.getParameterJson(), new ArrayList(params))); - messageService.edit(model); + return SUCCESS; } @@ -212,4 +224,8 @@ public class MessageAction extends BaseAction{ public void setNodes(String nodes) { this.nodes = nodes; } + + public void setCreateDefaultScene(Boolean createDefaultScene) { + this.createDefaultScene = createDefaultScene; + } } diff --git a/src/main/java/yi/master/business/message/action/MessageSceneAction.java b/src/main/java/yi/master/business/message/action/MessageSceneAction.java index 6283e50..61f70b8 100644 --- a/src/main/java/yi/master/business/message/action/MessageSceneAction.java +++ b/src/main/java/yi/master/business/message/action/MessageSceneAction.java @@ -179,25 +179,10 @@ public class MessageSceneAction extends BaseAction{ @Override public String edit() { - if (model.getMessageSceneId() == null) { //新增 - model.setCreateTime(new Timestamp(System.currentTimeMillis())); - model.setMessageSceneId(messageSceneService.save(model)); - //新增时默认该该场景添加一条默认数据 - TestData defaultData = new TestData(); - defaultData.setDataDiscr("默认数据"); - defaultData.setStatus(TestDataStatus.AVAILABLE.getStatus()); - defaultData.setMessageScene(model); - defaultData.setParamsData(""); - defaultData.setDefaultData(CommonStatus.ENABLED.getStatus()); - testDataService.edit(defaultData); - - //是否配置关联验证模板 - if (variableId != null) { - GlobalVariable v = globalVariableService.get(variableId); - SceneValidateRule rule = (SceneValidateRule) v.createSettingValue(); - rule.setMessageScene(model); - sceneValidateRuleService.save(rule); - } + //新增 + if (model.getMessageSceneId() == null) { + messageSceneService.save(model, true, variableId); + //编辑 } else { messageSceneService.edit(model); } diff --git a/src/main/java/yi/master/business/message/service/MessageSceneService.java b/src/main/java/yi/master/business/message/service/MessageSceneService.java index a88da21..cce4d40 100644 --- a/src/main/java/yi/master/business/message/service/MessageSceneService.java +++ b/src/main/java/yi/master/business/message/service/MessageSceneService.java @@ -49,4 +49,15 @@ public interface MessageSceneService extends BaseService{ * @param response */ void updateResponseExample (Integer messageSceneId, String response); + + /** + * 保存测试场景 + * @author xuwangcheng + * @date 2019/11/15 17:05 + * @param messageScene messageScene + * @param createDefaultData createDefaultData 是否创建默认的数据 + * @param variableId variableId 是否根据模板创建默认的验证 + * @return {@link Integer} id + */ + Integer save(MessageScene messageScene, Boolean createDefaultData, Integer variableId); } diff --git a/src/main/java/yi/master/business/message/service/MessageService.java b/src/main/java/yi/master/business/message/service/MessageService.java index 9a693a4..17df637 100644 --- a/src/main/java/yi/master/business/message/service/MessageService.java +++ b/src/main/java/yi/master/business/message/service/MessageService.java @@ -10,5 +10,14 @@ import yi.master.business.message.bean.Message; * @version 1.0.0.0,2017.2.17 */ -public interface MessageService extends BaseService { +public interface MessageService extends BaseService { + /** + * 保存报文 + * @author xuwangcheng + * @date 2019/11/15 17:06 + * @param message message + * @param createDefaultScene createDefaultScene 是否创建默认的测试场景 + * @return {@link Integer} + */ + Integer save(Message message, Boolean createDefaultScene); } diff --git a/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java b/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java index 684f3fc..1a79d87 100644 --- a/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java +++ b/src/main/java/yi/master/business/message/service/impl/MessageSceneServiceImpl.java @@ -1,16 +1,21 @@ package yi.master.business.message.service.impl; +import java.sql.Timestamp; import java.util.List; 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.MessageScene; +import yi.master.business.message.bean.*; import yi.master.business.message.dao.MessageSceneDao; +import yi.master.business.message.dao.SceneValidateRuleDao; +import yi.master.business.message.dao.TestDataDao; +import yi.master.business.message.enums.CommonStatus; +import yi.master.business.message.enums.TestDataStatus; import yi.master.business.message.service.MessageSceneService; +import yi.master.business.testconfig.bean.GlobalVariable; +import yi.master.business.testconfig.dao.GlobalVariableDao; /** * 报文场景service实现 @@ -21,6 +26,15 @@ import yi.master.business.message.service.MessageSceneService; public class MessageSceneServiceImpl extends BaseServiceImpl implements MessageSceneService{ private MessageSceneDao messageSceneDao; + + @Autowired + private TestDataDao testDataDao; + + @Autowired + private GlobalVariableDao globalVariableDao; + + @Autowired + private SceneValidateRuleDao sceneValidateRuleDao; @Autowired public void setMessageSceneDao(MessageSceneDao messageSceneDao) { @@ -58,4 +72,36 @@ public class MessageSceneServiceImpl extends BaseServiceImpl imple messageSceneDao.updateResponseExample(messageSceneId, response); } + @Override + public Integer save(MessageScene messageScene, Boolean createDefaultData, Integer variableId) { + if (messageScene.getMessageSceneId() != null) { + messageScene.setMessageSceneId(null); + } + + messageScene.setCreateTime(new Timestamp(System.currentTimeMillis())); + + messageSceneDao.getSession().clear(); + messageScene.setMessageSceneId(messageSceneDao.save(messageScene)); + + if (createDefaultData) { + //新增时默认该该场景添加一条默认数据 + TestData defaultData = new TestData(); + defaultData.setDataDiscr("默认数据"); + defaultData.setStatus(TestDataStatus.AVAILABLE.getStatus()); + defaultData.setMessageScene(messageScene); + defaultData.setParamsData(""); + defaultData.setDefaultData(CommonStatus.ENABLED.getStatus()); + testDataDao.save(defaultData); + } + + //是否配置关联验证模板 + if (variableId != null) { + GlobalVariable v = globalVariableDao.get(variableId); + SceneValidateRule rule = (SceneValidateRule) v.createSettingValue(); + rule.setMessageScene(messageScene); + sceneValidateRuleDao.save(rule); + } + return messageScene.getMessageSceneId(); + } + } 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 d007ec0..0fd4f70 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 @@ -5,7 +5,9 @@ import org.springframework.stereotype.Service; import yi.master.business.base.service.impl.BaseServiceImpl; import yi.master.business.message.bean.Message; +import yi.master.business.message.bean.MessageScene; import yi.master.business.message.dao.MessageDao; +import yi.master.business.message.service.MessageSceneService; import yi.master.business.message.service.MessageService; /** @@ -19,12 +21,36 @@ import yi.master.business.message.service.MessageService; public class MessageServiceImpl extends BaseServiceImpl implements MessageService{ private MessageDao messageDao; + + @Autowired + private MessageSceneService messageSceneService; @Autowired public void setMessageDao(MessageDao messageDao) { super.setBaseDao(messageDao); this.messageDao = messageDao; } - + + @Override + public Integer save(Message message, Boolean createDefaultScene) { + if (message.getMessageId() != null) { + message.setMessageId(null); + } + + messageDao.getSession().clear(); + message.setMessageId(messageDao.save(message)); + + if (createDefaultScene == true) { + MessageScene messageScene = new MessageScene(); + messageScene.setMessage(message); + messageScene.setSceneName("默认场景"); + messageScene.setSystems(message.getSystems()); + messageScene.setMark("这是自动创建的测试场景"); + + messageSceneService.save(messageScene, true, null); + } + + return message.getMessageId(); + } } 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 db75c94..b565229 100644 --- a/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java +++ b/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java @@ -211,6 +211,7 @@ public class HTTPTestClient extends TestClient { } } catch (Exception e) { + returnMap.addMark("报文附加参数获取出错:" + e.getMessage()); LOGGER.info("报文附加参数获取出错:" + callParameter.toString(), e); } } @@ -223,7 +224,6 @@ public class HTTPTestClient extends TestClient { long useTime = 0; HttpRequestBase request = null; Object[] returnInfo = null; - String errorMsg = ""; //失败重试 boolean requestSuccessFlag = false; @@ -237,15 +237,16 @@ public class HTTPTestClient extends TestClient { } requestSuccessFlag = true; } catch (Exception e) { - LOGGER.info("发送请求出错...重试次数..." + retryCount, e); - errorMsg = PracticalUtils.getExceptionAllinformation(e); + LOGGER.info("发送请求出错...重试次数..." + (retryCount + 1), e); + returnMap.addMark("发送请求出错...重试次数..." + (retryCount + 1)); + returnMap.addMark(e.getMessage()); } finally { retryCount++; } } if (!requestSuccessFlag) { - returnMap.setMark("发送请求出错:\n" + errorMsg); + returnMap.addMark("超过最大请求重试次数:" + config.getRetryCount() + ", 测试终止。"); } if (returnInfo != null) { @@ -271,7 +272,7 @@ public class HTTPTestClient extends TestClient { } } catch (Exception e) { LOGGER.info("解析返回出错", e); - returnMap.setMark("解析返回内容出错:" + e.getMessage()); + returnMap.addMark("解析返回内容出错:" + e.getMessage()); } returnMap.setResponseMessage(returnMsg.toString()); returnMap.setStatusCode(String.valueOf(response.getStatusLine().getStatusCode())); @@ -320,7 +321,9 @@ public class HTTPTestClient extends TestClient { for (Header h:headers) { if (json.get(h.getName()) != null) { String newValue = json.getString(h.getName()); - if (!newValue.endsWith(";")) newValue += ";"; + if (!newValue.endsWith(";")) { + newValue += ";"; + } json.put(h.getName(), newValue + h.getValue()); } else { json.put(h.getName(), h.getValue()); @@ -339,7 +342,9 @@ public class HTTPTestClient extends TestClient { */ public Object[] doGet(String host, Map headers, Map querys, String requestMessage, DefaultHttpClient client) throws Exception { - if (querys == null) querys = new HashMap(); + if (querys == null) { + querys = new HashMap(); + } if (StringUtils.isNotEmpty(requestMessage) && MessageKeys.MessageType.URL.getParseUtil().messageFormatValidation(requestMessage)) { querys.putAll(URLMessageParse.parseUrlToMap(requestMessage, null)); diff --git a/src/main/java/yi/master/coretest/message/protocol/WebSocketTestClient.java b/src/main/java/yi/master/coretest/message/protocol/WebSocketTestClient.java index f12f399..8736abf 100644 --- a/src/main/java/yi/master/coretest/message/protocol/WebSocketTestClient.java +++ b/src/main/java/yi/master/coretest/message/protocol/WebSocketTestClient.java @@ -69,7 +69,7 @@ public class WebSocketTestClient extends TestClient { } if (StringUtils.isBlank(responseObject.getStatusCode())) { - responseObject.setMark("请求超时"); + responseObject.addMark("请求超时"); responseObject.setStatusCode("false"); } @@ -81,7 +81,7 @@ public class WebSocketTestClient extends TestClient { } catch (Exception e) { logger.info(requestUrl + ",websocket error!", e); responseObject.setStatusCode("false"); - responseObject.setMark(PracticalUtils.getExceptionAllinformation(e)); + responseObject.addMark(PracticalUtils.getExceptionAllinformation(e)); } finally { if (webSocketClient != null && webSocketClient.isOpen()) { webSocketClient.close(); @@ -129,7 +129,7 @@ public class WebSocketTestClient extends TestClient { public void onError(Exception e) { logger.info(StrUtil.format("[{}]WebSocket error:{}", url, PracticalUtils.getExceptionAllinformation(e))); if (StringUtils.isBlank(responseObject.getStatusCode())) { - responseObject.setMark(PracticalUtils.getExceptionAllinformation(e)); + responseObject.addMark(PracticalUtils.getExceptionAllinformation(e)); responseObject.setResponseMessage(""); responseObject.setStatusCode("false"); } 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 382ce2f..16f6220 100644 --- a/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java +++ b/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java @@ -83,8 +83,6 @@ public class MessageAutoTest { @Autowired private TestSetService testSetService; @Autowired - private UserService userService; - @Autowired private TestReportService testReportService; @Autowired private MessageValidateResponse validateUtil; @@ -228,7 +226,7 @@ public class MessageAutoTest { //解除数据预占 CacheUtil.removeLockedTestData(testScene.getDataId()); - result.setMark(map.get(MessageValidateResponse.VALIDATE_MAP_MSG_KEY)); + result.setMark(map.get(MessageValidateResponse.VALIDATE_MAP_MSG_KEY) + "\n" + responseMap.getMark()); return result; } diff --git a/src/main/webapp/js/dcits.js b/src/main/webapp/js/dcits.js index ece0ced..dcd5395 100644 --- a/src/main/webapp/js/dcits.js +++ b/src/main/webapp/js/dcits.js @@ -722,6 +722,7 @@ function ObjectEditPage(id, ajaxUrl, callback) { $(".form-horizontal").spinModal(); //编辑模式时将某些隐藏的控件展示 $(".editFlag").css("display","block"); + $(".addFlag").css("display","none"); $.post(ajaxUrl, {id:id}, function(data) { if (data.returnCode == 0) { var o = data.data; diff --git a/src/main/webapp/resource/message/message.js b/src/main/webapp/resource/message/message.js index 6ef8b75..8045e17 100644 --- a/src/main/webapp/resource/message/message.js +++ b/src/main/webapp/resource/message/message.js @@ -172,7 +172,21 @@ var templateParams = { text:"禁用" }] }] - }, + }, + { + add: true, + label:"创建默认场景", + select:[{ + name:"createDefaultScene", + option:[{ + value:"1", + text:"是" + },{ + value:"0", + text:"否" + }] + }] + }, { edit:true, label:"创建日期", @@ -609,8 +623,8 @@ var mySetting = { } //编辑页面高度重设 - editPageHeight.add != null && (editPageHeight.add += 60); - editPageHeight.edit != null && (editPageHeight.edit += 60); + editPageHeight.add != null && (editPageHeight.add += 90); + editPageHeight.edit != null && (editPageHeight.edit += 10); df.resolve(); }, editPage:{ diff --git a/src/main/webapp/resource/template/customTemplate.htm b/src/main/webapp/resource/template/customTemplate.htm index e9a68d3..8d4b0a1 100644 --- a/src/main/webapp/resource/template/customTemplate.htm +++ b/src/main/webapp/resource/template/customTemplate.htm @@ -105,7 +105,7 @@
{{#each this}} {{#if label}} -
+
{{#if objText}} diff --git a/update.md b/update.md index cc08bcc..b7c1f29 100644 --- a/update.md +++ b/update.md @@ -6,6 +6,7 @@ - 更新:导入接口参数时对值为‘null’的节点类型统一设置为String; - 更新:关联验证可以添加备注信息; - 更新:组合场景里如果没有测试场景则该组合场景将会被置为Stop状态; +- 增加:测试备注中的测试过程日志; ### v0.2.0beta #### 2019.09.15 -- Gitee From 8b2eb7128c86969dbe0f64f605a9a3dd15061c27 Mon Sep 17 00:00:00 2001 From: xuwangcheng Date: Sun, 17 Nov 2019 20:47:11 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../master/annotation/CustomConditionSetting.java | 12 ++++++++++-- .../java/yi/master/annotation/FieldNameMapper.java | 14 +++++++++++--- .../yi/master/annotation/util/AnnotationUtil.java | 4 ---- .../business/message/bean/InterfaceInfo.hbm.xml | 2 +- .../master/business/message/bean/Message.hbm.xml | 2 +- src/main/webapp/resource/message/message.js | 5 +++-- update.md | 1 + 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/yi/master/annotation/CustomConditionSetting.java b/src/main/java/yi/master/annotation/CustomConditionSetting.java index 6068804..acd3145 100644 --- a/src/main/java/yi/master/annotation/CustomConditionSetting.java +++ b/src/main/java/yi/master/annotation/CustomConditionSetting.java @@ -6,12 +6,20 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +/** + * 自定义查询(高级查询)通过此注解表明各个查询字段的查询设置 + * @author xuwangcheng + * @date 20191027 + */ @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface CustomConditionSetting { public static final String DATETIME_TYPE = "datetime"; public static final String STRING_TYPE = "string"; - String conditionType() default STRING_TYPE;//条件类型,目前支持string、datetime - String operator() default "like"; //运算符,目前仅支持 ‘like’ 和 ‘=’ '>' '<' + + //条件类型,目前支持string、datetime + String conditionType() default STRING_TYPE; + //运算符,目前仅支持 ‘like’ 和 ‘=’ '>' '<' + String operator() default "like"; } diff --git a/src/main/java/yi/master/annotation/FieldNameMapper.java b/src/main/java/yi/master/annotation/FieldNameMapper.java index b44f4ae..cd98de7 100644 --- a/src/main/java/yi/master/annotation/FieldNameMapper.java +++ b/src/main/java/yi/master/annotation/FieldNameMapper.java @@ -6,11 +6,19 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +/** + * 实体类字段对应数据库查询字段名,包含关联字段或者使用HQL函数的字段 + * @date 20191027 + * @author xuwangcheng + */ @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface FieldNameMapper { - String fieldPath() default ""; //对应的HQL中的查询名 - boolean ifSearch() default true; //该字段是否需要被全局模糊查询 - boolean ifOrder() default true;//是否可以被排序 + //对应的HQL中的查询名 + String fieldPath() default ""; + //该字段是否需要被全局模糊查询 + boolean ifSearch() default true; + //是否可以被排序 + boolean ifOrder() default true; } diff --git a/src/main/java/yi/master/annotation/util/AnnotationUtil.java b/src/main/java/yi/master/annotation/util/AnnotationUtil.java index ea16aeb..42a0b58 100644 --- a/src/main/java/yi/master/annotation/util/AnnotationUtil.java +++ b/src/main/java/yi/master/annotation/util/AnnotationUtil.java @@ -52,10 +52,6 @@ public class AnnotationUtil { if ((field.getType().getCanonicalName().equals("java.sql.Timestamp") || field.getType().getCanonicalName().equals("java.sql.Date") || field.getType().getCanonicalName().equals("java.util.Timestamp")) && getType == 0) { - /*if (StringUtils.isNotBlank(searchValue)) { - //判断是否为yyyy-MM-dd HH:mm:ss的日期格式 - - }*/ return null; } String columPath = fieldName; diff --git a/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml b/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml index 6d82db3..d440cbb 100644 --- a/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/InterfaceInfo.hbm.xml @@ -14,7 +14,7 @@ - + diff --git a/src/main/java/yi/master/business/message/bean/Message.hbm.xml b/src/main/java/yi/master/business/message/bean/Message.hbm.xml index 74e3a89..3a6db69 100644 --- a/src/main/java/yi/master/business/message/bean/Message.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/Message.hbm.xml @@ -10,7 +10,7 @@ - + diff --git a/src/main/webapp/resource/message/message.js b/src/main/webapp/resource/message/message.js index 8045e17..93587be 100644 --- a/src/main/webapp/resource/message/message.js +++ b/src/main/webapp/resource/message/message.js @@ -175,14 +175,15 @@ var templateParams = { }, { add: true, + reminder:"创建此报文时同时创建一个默认的测试场景和测试数据。", label:"创建默认场景", select:[{ name:"createDefaultScene", option:[{ - value:"1", + value:"true", text:"是" },{ - value:"0", + value:"false", text:"否" }] }] diff --git a/update.md b/update.md index b7c1f29..6d71a41 100644 --- a/update.md +++ b/update.md @@ -7,6 +7,7 @@ - 更新:关联验证可以添加备注信息; - 更新:组合场景里如果没有测试场景则该组合场景将会被置为Stop状态; - 增加:测试备注中的测试过程日志; +- 增加:创建测试报文时可以选择同时创建一个默认的测试场景。 ### v0.2.0beta #### 2019.09.15 -- Gitee