diff --git a/src/main/java/yi/master/business/message/bean/SceneValidateRule.hbm.xml b/src/main/java/yi/master/business/message/bean/SceneValidateRule.hbm.xml index 02b5da78150563ae6bada294a265cc1237f0fd0a..d519a5ea28cb8d7a91fc95f8af6167fbc604ee4c 100644 --- a/src/main/java/yi/master/business/message/bean/SceneValidateRule.hbm.xml +++ b/src/main/java/yi/master/business/message/bean/SceneValidateRule.hbm.xml @@ -17,7 +17,7 @@ - + @@ -25,6 +25,9 @@ + + + diff --git a/src/main/java/yi/master/business/message/bean/SceneValidateRule.java b/src/main/java/yi/master/business/message/bean/SceneValidateRule.java index 5f2e83ae2c3562b1fb79492bd3a6b2552f472f33..1ba83e899fccbf0f06feea9f86d144eb7c26d4e3 100644 --- a/src/main/java/yi/master/business/message/bean/SceneValidateRule.java +++ b/src/main/java/yi/master/business/message/bean/SceneValidateRule.java @@ -39,15 +39,20 @@ public class SceneValidateRule implements Serializable { /** * 获取validate_value的方式
*/ - @FieldRealSearch(names = {"常量", "入参节点值", "SQL语句", "全局变量", "正则表达式"}, values = {"0", "1", "2", "3", "4"}) + @FieldRealSearch(names = {"常量", "入参节点值", "SQL语句", "全局变量", "正则表达式"}, values = {"0", "1", "999999", "3", "4"}) private String getValueMethod; /** * 0-左右边界取关键字验证
* 1-节点参数验证
*/ - @FieldRealSearch(names = {"关联验证", "节点验证"}, values = {"0", "1"}) + @FieldRealSearch(names = {"关联验证", "节点验证", "自定义验证"}, values = {"0", "1", "2"}) private String validateMethodFlag; + + /** + * 比对条件 + */ + private String validateCondition; /** * 当validate_method_flag为1时有效:
@@ -89,11 +94,17 @@ public class SceneValidateRule implements Serializable { super(); } - - - - - public String getGetValueMethod() { + + + public void setValidateCondition(String validateCondition) { + this.validateCondition = validateCondition; + } + + public String getValidateCondition() { + return validateCondition; + } + + public String getGetValueMethod() { return getValueMethod; } public void setGetValueMethod(String getValueMethod) { diff --git a/src/main/java/yi/master/business/message/enums/SceneValidateCondition.java b/src/main/java/yi/master/business/message/enums/SceneValidateCondition.java new file mode 100644 index 0000000000000000000000000000000000000000..ec662b2afb5f8712d374ae98c0fb20ecbf116530 --- /dev/null +++ b/src/main/java/yi/master/business/message/enums/SceneValidateCondition.java @@ -0,0 +1,43 @@ +package yi.master.business.message.enums; + +/** + * 验证条件 + * @author xuwangcheng + * @version 1.0.0 + * @description + * @date 2019/12/26 17:27 + */ +public enum SceneValidateCondition { + /** + * 大于 + */ + gt, + /** + * 等于 + */ + eq, + /** + * 小于 + */ + lt, + /** + * 包含 + */ + contain, + /** + * 不包含 + */ + notcontain, + /** + * 存在值即可 + */ + exist, + /** + * 匹配正则 + */ + reg, + /** + * 不做任何验证 + */ + nothing +} diff --git a/src/main/java/yi/master/business/message/enums/SceneValidateType.java b/src/main/java/yi/master/business/message/enums/SceneValidateType.java index 0ccab269e9d242e979e2b567886d78b7b29d3eb6..52bfcf35ae36b1f86ab5c440f51e205187275fac 100644 --- a/src/main/java/yi/master/business/message/enums/SceneValidateType.java +++ b/src/main/java/yi/master/business/message/enums/SceneValidateType.java @@ -13,7 +13,11 @@ public enum SceneValidateType { /** * 1 - 节点验证 */ - NODE_VALIDATION("1"); + NODE_VALIDATION("1"), + /** + * 2 - 自定义验证 + */ + CUSTOM_VALIDATION("2"); private String type; diff --git a/src/main/java/yi/master/business/message/enums/SceneValidateValueGetMethod.java b/src/main/java/yi/master/business/message/enums/SceneValidateValueGetMethod.java index 320f350554c31803631bbeec6e2161b662f4c255..8d1c20f3ebae779c8c627c9b9319830abe3ac1a8 100644 --- a/src/main/java/yi/master/business/message/enums/SceneValidateValueGetMethod.java +++ b/src/main/java/yi/master/business/message/enums/SceneValidateValueGetMethod.java @@ -25,7 +25,19 @@ public enum SceneValidateValueGetMethod { /** * 正则表达式 */ - REGULAR_EXPRESSION("4"); + REGULAR_EXPRESSION("4"), + /** + * 响应时间 + */ + RESPONSE_TIME("5"), + /** + * 状态码 + */ + STATUS_CODE("6"), + /** + * 响应头 + */ + RESPONSE_HEADER("7"); private String method; 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 ed3945977abc25db1566a630e611328668f1d955..2fd180273b7588b941d405af206b5999d38a07f5 100644 --- a/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java +++ b/src/main/java/yi/master/coretest/message/test/MessageAutoTest.java @@ -188,7 +188,7 @@ public class MessageAutoTest { } - Map map = validateUtil.validate(result.getResponseMessage(), testScene.getRequestMessage(), scene, msg.getMessageType(), testScene.getConfig().getConfigId()); + Map map = validateUtil.validate(result, msg.getMessageType(), testScene.getConfig().getConfigId()); //变更数据状态 if (MessageValidateResponse.VALIDATE_SUCCESS_FLAG.equals(map.get(MessageValidateResponse.VALIDATE_MAP_STATUS_KEY))) { @@ -538,7 +538,7 @@ public class MessageAutoTest { testReportService.edit(report); //提前生成静态报告 - String createReportUrl = CacheUtil.getSettingValue(SystemConsts.GLOBAL_SETTING_HOME) + "/" + String createReportUrl = CacheUtil.getHomeUrl() + "/" + SystemConsts.CREATE_STATIC_REPORT_HTML_RMI_URL + "?reportId=" + report.getReportId() + "&token=" + SystemConsts.REQUEST_ALLOW_TOKEN; PracticalUtils.doGetHttpRequest(createReportUrl); diff --git a/src/main/java/yi/master/coretest/message/test/MessageValidateResponse.java b/src/main/java/yi/master/coretest/message/test/MessageValidateResponse.java index 1ecdfba945965c5b88043979486f047ef9801f1c..16d9f3ccb25135f8b6e5996b53815e83efa0f366 100644 --- a/src/main/java/yi/master/coretest/message/test/MessageValidateResponse.java +++ b/src/main/java/yi/master/coretest/message/test/MessageValidateResponse.java @@ -1,24 +1,30 @@ package yi.master.coretest.message.test; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReUtil; +import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import yi.master.business.message.bean.MessageScene; import yi.master.business.message.bean.SceneValidateRule; +import yi.master.business.message.bean.TestResult; import yi.master.business.message.enums.CommonStatus; +import yi.master.business.message.enums.SceneValidateCondition; import yi.master.business.message.enums.SceneValidateType; import yi.master.business.message.enums.SceneValidateValueGetMethod; import yi.master.business.message.service.SceneValidateRuleService; import yi.master.business.testconfig.bean.DataDB; import yi.master.business.testconfig.service.GlobalVariableService; +import yi.master.constant.SystemConsts; import yi.master.coretest.message.parse.MessageParse; import yi.master.util.DBUtil; import yi.master.util.PracticalUtils; import yi.master.util.cache.CacheUtil; +import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -53,16 +59,14 @@ public class MessageValidateResponse { private GlobalVariableService globalVariableService; /** - * - * @param responseMessage - * @param requestMessage - * @param scene + * 验证方法 + * @param result * @return Map<String, String>
* status 验证结果 0-成功 1-不成功
* msg 备注信息 */ - public Map validate(String responseMessage, String requestMessage, MessageScene scene, String messageType, Integer configId) { - List rules = validateRuleService.getParameterValidate(scene.getMessageSceneId()); + public Map validate(TestResult result, String messageType, Integer configId) { + List rules = validateRuleService.getParameterValidate(result.getMessageScene().getMessageSceneId()); List configRules = validateRuleService.getConfigRules(configId); CollUtil.addAll(rules, configRules); @@ -93,11 +97,13 @@ public class MessageValidateResponse { Map resultMap = null; //关键字匹配验证,通过左右边界 if (SceneValidateType.ASSOCIATED_VALIDATION.getType().equals(rule.getValidateMethodFlag())) { - resultMap = relateKeyValidate(responseMessage, requestMessage, rule, parseUtil); + resultMap = relateKeyValidate(result, rule, parseUtil); //节点参数验证,复杂验证 } else if (SceneValidateType.NODE_VALIDATION.getType().equals(rule.getValidateMethodFlag())) { - resultMap = nodeParameterValidate(responseMessage, requestMessage, rule, parseUtil); - } + resultMap = nodeParameterValidate(result, rule, parseUtil); + } else if (SceneValidateType.CUSTOM_VALIDATION.getType().equals(rule.getValidateMethodFlag())) { + resultMap = customValidate(result, rule, parseUtil); + } msg.append(resultMap.get(VALIDATE_MAP_MSG_KEY) + "\n"); if (!VALIDATE_SUCCESS_FLAG.equals(resultMap.get(VALIDATE_MAP_STATUS_KEY))) { @@ -112,16 +118,181 @@ public class MessageValidateResponse { + successCount + "条,失败" + failCount + "条。"); return validateMap; } - + + + /** + * 自定义验证 + * @author xuwangcheng + * @date 2019/12/27 9:38 + * @param result result + * @param rule rule + * @param parseUtil parseUtil + * @return {@link Map} + */ + private Map customValidate (TestResult result, SceneValidateRule rule, MessageParse parseUtil) { + Map map = new HashMap(); + map.put(VALIDATE_MAP_STATUS_KEY, VALIDATE_FAIL_FLAG); + StringBuilder msg = new StringBuilder("【自定义验证】"); + + String verifyVal = null; + String compareVal = rule.getValidateValue(); + + //响应时间 + if (SceneValidateValueGetMethod.RESPONSE_TIME.getMethod().equals(rule.getGetValueMethod())) { + verifyVal = result.getUseTime().toString(); + msg.append("验证响应时间,响应时间为" + verifyVal + "ms,"); + + } + + //状态码 + if (SceneValidateValueGetMethod.STATUS_CODE.getMethod().equals(rule.getGetValueMethod())) { + verifyVal = result.getStatusCode(); + msg.append("验证状态码,状态码为" + verifyVal + ","); + } + + //响应头 + if (SceneValidateValueGetMethod.RESPONSE_HEADER.getMethod().equals(rule.getGetValueMethod())) { + JSONObject headerObject = JSONObject.fromObject(result.getHeaders()).getJSONObject("ResponseHeader"); + msg.append("验证响应头,"); + + for (Object key:headerObject.keySet()) { + if (key != null && key.toString().equalsIgnoreCase(rule.getParameterName())) { + verifyVal = headerObject.getString(key.toString()); + } + } + + if (StringUtils.isBlank(verifyVal)) { + map.put(VALIDATE_MAP_MSG_KEY, msg.append("没有获取key为" + rule.getParameterName() + "的响应头信息。").toString()); + return map; + } + msg.append("key为" + rule.getParameterName() + "的响应头值为" + verifyVal + ","); + } + + //数据库取值 + if (rule.getGetValueMethod().startsWith(SceneValidateValueGetMethod.QUERY_SQL.getMethod())) { + msg.append("验证数据库变动,"); + DataDB db = CacheUtil.getQueryDBById(rule.getGetValueMethod()); + + if (db == null) { + map.put(VALIDATE_MAP_MSG_KEY, msg.append("没有找到dbId为 " + rule.getGetValueMethod() + " 的数据源信息!").toString()); + return map; + } + + String querySql = PracticalUtils.replaceGlobalVariable( + parseUtil.parameterReplaceByNodePath(result.getRequestMessage(), rule.getParameterName()), globalVariableService); + + verifyVal = DBUtil.getDBData(db, querySql); + + if (StringUtils.isBlank(verifyVal)) { + map.put(VALIDATE_MAP_MSG_KEY, msg.append("从数据源 " + db.getDbName() + " 中查询数据出错[" + querySql + "]").toString()); + return map; + } + + msg.append("数据源" + db.getDbName() + ",执行SQL[" + querySql + "],获取校验值为" + verifyVal + ","); + } + + String verifyResult = customCompareValue(verifyVal, compareVal, rule.getValidateCondition()); + if (SystemConsts.DefaultBooleanIdentify.TRUE.getString().equalsIgnoreCase(verifyResult)) { + map.put(VALIDATE_MAP_STATUS_KEY, VALIDATE_SUCCESS_FLAG); + map.put(VALIDATE_MAP_MSG_KEY, msg.append("与比对值" + compareVal + "比对正确,验证成功!").toString()); + return map; + } + + map.put(VALIDATE_MAP_MSG_KEY, msg.append("与比对值" + compareVal + "比对失败:[" + verifyResult + "],验证失败!").toString()); + return map; + } + + + /** + * 按照配置对校验值和比对值进行正确比对 + * @author xuwangcheng + * @date 2019/12/27 11:02 + * @param val1 val1 校验值 + * @param val2 val2 比对值 + * @param compareCondition compareCondition + * @return {@link String} 正确返回true,否则返回错误信息 + */ + private String customCompareValue (String val1, String val2, String compareCondition) { + String result = "true"; + if (StringUtils.isBlank(val1) || StringUtils.isBlank(compareCondition)) { + return "校验值、比对条件不能为空"; + } + + if (SceneValidateCondition.eq.name().equalsIgnoreCase(compareCondition)) { + if (!StringUtils.equals(val1, val2)) { + return val1 + "不等于" + val2; + } + + return result; + } + + if (SceneValidateCondition.nothing.name().equalsIgnoreCase(compareCondition)) { + return result; + } + + if (SceneValidateCondition.contain.name().equalsIgnoreCase(compareCondition)) { + if (!StringUtils.contains(val1, val2)) { + return val1 + "不包含" + val2; + } + + return result; + } + + if (SceneValidateCondition.notcontain.name().equalsIgnoreCase(compareCondition)) { + if (StringUtils.contains(val1, val2)) { + return val1 + "包含" + val2; + } + + return result; + } + + if (SceneValidateCondition.exist.name().equalsIgnoreCase(compareCondition)) { + if (StringUtils.isBlank(val1)) { + return "校验值不存在"; + } + + return result; + } + + if (SceneValidateCondition.reg.name().equalsIgnoreCase(compareCondition)) { + if (!ReUtil.isMatch(val2, val1)) { + return val1 + "无法正确匹配正则表达式" + val2; + } + + return result; + } + + if (!NumberUtils.isDigits(val1)) { + return val1 + "不是数字类型,无法比对"; + } + + if (!NumberUtils.isDigits(val2)) { + return val2 + "不是数字类型,无法比对"; + } + + if (SceneValidateCondition.gt.name().equalsIgnoreCase(compareCondition)) { + if ((new BigDecimal(val1).compareTo(new BigDecimal(val2))) <= 0) { + return val1 + "小于等于" + val2; + } + } + + if (SceneValidateCondition.lt.name().equalsIgnoreCase(compareCondition)) { + if ((new BigDecimal(val1).compareTo(new BigDecimal(val2))) >= 0) { + return val1 + "大于等于" + val2; + } + } + + return result; + } + /** * 关联左右边界取值 - * @param responseMessage - * @param requestMessage + * @param result * @param rule * @return */ @SuppressWarnings("rawtypes") - private Map relateKeyValidate(String responseMessage, String requestMessage, SceneValidateRule rule, MessageParse parseUtil) { + private Map relateKeyValidate(TestResult result, SceneValidateRule rule, MessageParse parseUtil) { Map map = new HashMap(); Map maps = null; try { @@ -136,7 +307,7 @@ public class MessageValidateResponse { return map; } - String getValue = PracticalUtils.getValueByRelationKeyWord(maps, responseMessage); + String getValue = PracticalUtils.getValueByRelationKeyWord(maps, result.getResponseMessage()); if (getValue == null) { map.put(VALIDATE_MAP_STATUS_KEY, VALIDATE_FAIL_FLAG); map.put(VALIDATE_MAP_MSG_KEY, "根据指定的左右边界等参数无法在出参报文中匹配到相应的内容,请检查!"); @@ -155,7 +326,7 @@ public class MessageValidateResponse { //入参节点获取 if (SceneValidateValueGetMethod.REQUEST_PARAMS_NODE.getMethod().equals(rule.getGetValueMethod())) { - validateValue = parseUtil.getObjectByPath(requestMessage, rule.getValidateValue()); + validateValue = parseUtil.getObjectByPath(result.getRequestMessage(), rule.getValidateValue()); if (validateValue == null) { map.put(VALIDATE_MAP_MSG_KEY, msg + "在入参报文中没有找到路径为 " + rule.getValidateValue() + " 的节点,请检查验证规则!"); @@ -190,23 +361,21 @@ public class MessageValidateResponse { /** * 针对返回报文中各个指定path的节点进行验证
* 出错则停止验证并返回失败标记 - * @param responseMessage - * @param requestMessage + * @param result * @param rule * @param parseUtil * @return */ - private Map nodeParameterValidate(String responseMessage, String requestMessage, SceneValidateRule rule, MessageParse parseUtil) { + private Map nodeParameterValidate(TestResult result, SceneValidateRule rule, MessageParse parseUtil) { Map map = new HashMap(); map.put(VALIDATE_MAP_STATUS_KEY, VALIDATE_FAIL_FLAG); StringBuilder msg = new StringBuilder(); //不是指定的格式,不能用此方式验证 - MessageParse responseMessageParseUtil = MessageParse.judgeMessageType(responseMessage); + MessageParse responseMessageParseUtil = MessageParse.judgeMessageType(result.getResponseMessage()); - msg.append("【节点验证】在验证出参节点路径为 " + rule.getParameterName() + " 时: "); - String vaildateStr = responseMessageParseUtil.getObjectByPath(responseMessage, rule.getParameterName()); + String vaildateStr = responseMessageParseUtil.getObjectByPath(result.getResponseMessage(), rule.getParameterName()); if (vaildateStr == null) { map.put(VALIDATE_MAP_MSG_KEY, msg + "返回报文中没有找到该路径节点,请检查验证规则!"); @@ -222,7 +391,7 @@ public class MessageValidateResponse { //入参节点获取 if (rule.getGetValueMethod().equals(SceneValidateValueGetMethod.REQUEST_PARAMS_NODE.getMethod())) { - validateValue = parseUtil.getObjectByPath(requestMessage, rule.getValidateValue()); + validateValue = parseUtil.getObjectByPath(result.getRequestMessage(), rule.getValidateValue()); if (validateValue == null) { map.put(VALIDATE_MAP_MSG_KEY, msg + "在入参报文中没有找到路径为 " + rule.getValidateValue() + " 的节点,请检查验证规则!"); @@ -245,7 +414,7 @@ public class MessageValidateResponse { } String querySql = PracticalUtils.replaceGlobalVariable( - parseUtil.parameterReplaceByNodePath(requestMessage, rule.getValidateValue()), globalVariableService); + parseUtil.parameterReplaceByNodePath(result.getRequestMessage(), rule.getValidateValue()), globalVariableService); validateValue = DBUtil.getDBData(db, querySql); 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 1cb3bfc2cac516bd6ca446960ce9cef6e407e772..5ecfca4d974886b91b1f7fc857de6aad4cba7210 100644 --- a/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobAction.java +++ b/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobAction.java @@ -1,14 +1,5 @@ package yi.master.coretest.task.probe; -import java.sql.Timestamp; -import java.util.Map; - -import javax.mail.Address; -import javax.mail.Session; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMessage.RecipientType; - import org.apache.log4j.Logger; import org.codehaus.jackson.map.ObjectMapper; import org.quartz.Job; @@ -16,7 +7,6 @@ import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; - import yi.master.business.advanced.bean.InterfaceProbe; import yi.master.business.advanced.enums.InterfaceProbeNotifyType; import yi.master.business.advanced.enums.InterfaceProbeStatus; @@ -29,10 +19,12 @@ import yi.master.constant.ReturnCodeConsts; import yi.master.constant.SystemConsts; import yi.master.util.PracticalUtils; import yi.master.util.cache.CacheUtil; -import yi.master.util.notify.EmailCreator; import yi.master.util.notify.NotifyMail; import yi.master.util.notify.ProbeEmailCreator; +import java.sql.Timestamp; +import java.util.Map; + /** * 探测任务执行工作类 * @author xuwangcheng @@ -58,7 +50,7 @@ public class ProbeTaskJobAction implements Job { InterfaceProbe task = (InterfaceProbe) dataMap.get(context.getJobDetail().getKey().getName()); //获取请求地址 - String testUrl = CacheUtil.getSettingValue(SystemConsts.GLOBAL_SETTING_HOME) + "/" + SystemConsts.PROBE_TASK_TEST_RMI_URL + String testUrl = CacheUtil.getHomeUrl() + "/" + SystemConsts.PROBE_TASK_TEST_RMI_URL + "?probeId=" + task.getProbeId() + "&token=" + SystemConsts.REQUEST_ALLOW_TOKEN; LOGGER.info("[接口探测任务]执行探测任务:url=" + testUrl); diff --git a/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobListener.java b/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobListener.java index 8aa3c1c92bc20a26aaf7ccd521350a015eefbf7b..4f10610a14471a76d29e0833710dac79185a2718 100644 --- a/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobListener.java +++ b/src/main/java/yi/master/coretest/task/probe/ProbeTaskJobListener.java @@ -18,7 +18,6 @@ public class ProbeTaskJobListener implements JobListener { @Override public String getName() { - return LISTENER_NAME; } 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 17c4952674d3ae3b9c48088a7492dbe1df7f3826..b56d4c6ff29c4ce774f90b9b5435105e216462c3 100644 --- a/src/main/java/yi/master/coretest/task/time/TimeTaskJobAction.java +++ b/src/main/java/yi/master/coretest/task/time/TimeTaskJobAction.java @@ -34,7 +34,7 @@ public class TimeTaskJobAction implements Job { String[] result = new String[2]; //获取请求地址 - String testUrl = CacheUtil.getSettingValue(SystemConsts.GLOBAL_SETTING_HOME) + "/" + SystemConsts.AUTO_TASK_TEST_RMI_URL + String testUrl = CacheUtil.getHomeUrl() + "/" + SystemConsts.AUTO_TASK_TEST_RMI_URL + "?setId=" + task.getRelatedId() + "&autoTestFlag=true" + "&token=" + SystemConsts.REQUEST_ALLOW_TOKEN + "&userId=" + task.getUser().getUserId(); LOGGER.info("[自动化定时任务]执行自动化测试任务:url=" + testUrl); diff --git a/src/main/java/yi/master/coretest/task/time/TimeTaskJobListener.java b/src/main/java/yi/master/coretest/task/time/TimeTaskJobListener.java index 9a29be1ea15f74481e732800a8610bf7f85b2b87..60a02dfae53609cba5871a5484d29c3a3d6a1bc9 100644 --- a/src/main/java/yi/master/coretest/task/time/TimeTaskJobListener.java +++ b/src/main/java/yi/master/coretest/task/time/TimeTaskJobListener.java @@ -1,9 +1,5 @@ package yi.master.coretest.task.time; -import java.sql.Timestamp; -import java.util.HashSet; -import java.util.Map; - import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.codehaus.jackson.map.ObjectMapper; @@ -12,7 +8,6 @@ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobListener; import org.springframework.beans.factory.annotation.Autowired; - import yi.master.business.message.bean.AutoTask; import yi.master.business.message.bean.TestReport; import yi.master.business.message.bean.TestResult; @@ -31,6 +26,10 @@ import yi.master.util.cache.CacheUtil; import yi.master.util.notify.NotifyMail; import yi.master.util.notify.ReportEmailCreator; +import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Map; + /** * 定时任务监听器 * @author xuwangcheng @@ -114,7 +113,7 @@ public class TimeTaskJobListener implements JobListener { //发送推送邮件 if (CommonStatus.ENABLED.getStatus().equals(CacheUtil.getSettingValue(SystemConsts.GLOBAL_SETTING_IF_SEND_REPORT_MAIL)) && SystemConsts.DefaultBooleanIdentify.TRUE.getNumber().equals(task.getMailNotify())) { - String createReportUrl = CacheUtil.getSettingValue(SystemConsts.GLOBAL_SETTING_HOME) + "/" + String createReportUrl = CacheUtil.getHomeUrl() + "/" + SystemConsts.CREATE_STATIC_REPORT_HTML_RMI_URL + "?reportId=" + result[0] + "&token=" + SystemConsts.REQUEST_ALLOW_TOKEN; String returnJson = PracticalUtils.doGetHttpRequest(createReportUrl); diff --git a/src/main/java/yi/master/util/DBUtil.java b/src/main/java/yi/master/util/DBUtil.java index 7d2a6ac200743969d9f4e122c020050650df1560..c7009ec8b70eafef7b3906ef80873e5fd5e55189 100644 --- a/src/main/java/yi/master/util/DBUtil.java +++ b/src/main/java/yi/master/util/DBUtil.java @@ -1,15 +1,10 @@ package yi.master.util; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - import org.apache.log4j.Logger; - import yi.master.business.testconfig.bean.DataDB; +import java.sql.*; + /** * 仅用于测试过程中查询数据的数据库连接工具类 * @author xuwangcheng @@ -55,7 +50,7 @@ public class DBUtil { if (dbType.equals("mysql")) { Class.forName("com.mysql.jdbc.Driver"); - con = DriverManager.getConnection("jdbc:mysql://" + dbUrl + "/" + dbName + "?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true", dbUserName, dbPasswd); + con = DriverManager.getConnection("jdbc:mysql://" + dbUrl + "/" + dbName + "?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false", dbUserName, dbPasswd); } } catch (ClassNotFoundException e) { @@ -65,10 +60,6 @@ public class DBUtil { } catch (SQLException e1) { LOGGER.error("创建数据库连接出错!", e1); throw new SQLException(); - } finally { - if (con != null) { - con.close(); - } } if (!dbType.equals("oracle") && !dbType.equals("mysql")) { diff --git a/src/main/java/yi/master/util/cache/CacheUtil.java b/src/main/java/yi/master/util/cache/CacheUtil.java index 5fb7adca7ab1cf91b01590e27b6c011d479c1850..d857e0064015fbdb5b57f49ca82b42b7489dd7a8 100644 --- a/src/main/java/yi/master/util/cache/CacheUtil.java +++ b/src/main/java/yi/master/util/cache/CacheUtil.java @@ -5,10 +5,8 @@ import yi.master.business.log.bean.LogRecord; import yi.master.business.log.service.LogRecordService; import yi.master.business.system.bean.GlobalSetting; import yi.master.business.system.bean.OperationInterface; -import yi.master.business.system.service.GlobalSettingService; import yi.master.business.system.service.OperationInterfaceService; import yi.master.business.testconfig.bean.DataDB; -import yi.master.constant.SystemConsts; import yi.master.coretest.message.test.mock.MockServer; import yi.master.coretest.message.test.performance.PerformanceTestObject; import yi.master.util.FrameworkUtil; @@ -298,15 +296,10 @@ public class CacheUtil { if (StringUtils.isNotBlank(homeUrl)) { return; } - if (request != null) { - homeUrl = request.getRequestURL().toString().replace(request.getServletPath(), ""); - //更新数据库中内容 - if (!homeUrl.equals(getSettingValue(SystemConsts.GLOBAL_SETTING_HOME))) { - //如果不相同则更新 - GlobalSettingService globalSettingService = (GlobalSettingService) FrameworkUtil.getSpringBean(GlobalSettingService.class); - globalSettingService.updateSetting(SystemConsts.GLOBAL_SETTING_HOME, homeUrl); - updateGlobalSettingValue(SystemConsts.GLOBAL_SETTING_HOME, homeUrl); - } - } + homeUrl = request.getRequestURL().toString().replace(request.getServletPath(), ""); + } + + public static String getHomeUrl() { + return homeUrl; } } diff --git a/src/main/resources/update/1.0.1 b/src/main/resources/update/1.0.1 new file mode 100644 index 0000000000000000000000000000000000000000..06af0fd3129490f2332568ef28c69db447c66f6c --- /dev/null +++ b/src/main/resources/update/1.0.1 @@ -0,0 +1,4 @@ +ALTER TABLE `at_scene_validate_rule` ADD COLUMN `validate_condition` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '验证条件,例如大于小于等于等' AFTER `get_value_method`; +ALTER TABLE `at_scene_validate_rule` MODIFY COLUMN `parameter_name` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '根据validate_method_flag的值有不同的含义:validate_method_flag=0时,其为取值的json串,例如:{\"LB\":\"ss\",\"RB\":\"vv\",\"ORDER\":1},分别表示左边界、右边界、取值顺序,validate_method_flag=1时,该值表示节点路径' AFTER `message_scene_id`; +ALTER TABLE `at_scene_validate_rule` MODIFY COLUMN `validate_method_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '验证方式0-左右边界取关键字验证,1-节点参数验证' AFTER `parameter_name`; +ALTER TABLE `at_scene_validate_rule` MODIFY COLUMN `get_value_method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '获取validate_value的方式,0 - 常量,1 - 入参节点值,2 - SQL语句,3 - 全局变量,4 - 正则表达式' AFTER `validate_method_flag`; diff --git a/src/main/webapp/resource/message/validateParameters.html b/src/main/webapp/resource/message/validateParameters.html index 25b8d0d0f8f532a1dbe9a5afd83cb7b7302d205a..561c1883e0dfbbda1115c96da69f82b8edce4b1b 100644 --- a/src/main/webapp/resource/message/validateParameters.html +++ b/src/main/webapp/resource/message/validateParameters.html @@ -15,9 +15,9 @@ - + + -