From 74e1b0ce90cae6bb3bdc0f09fc8cf14b2e8f060d Mon Sep 17 00:00:00 2001 From: song-tianyang Date: Fri, 14 May 2021 13:30:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0Metersphere=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=8F=98=E9=87=8F=E5=AD=98=E5=8F=96=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加Metersphere环境变量存取功能 --- .../metersphere/api/dto/RunningParamKeys.java | 20 + .../dto/definition/request/MsTestElement.java | 3 +- .../post/MsJSR223PostProcessor.java | 4 + .../processors/pre/MsJSR223PreProcessor.java | 4 + .../request/sampler/MsHTTPSamplerProxy.java | 1 + .../metersphere/api/jmeter/RunningParam.java | 38 + .../ApiEnvironmentRunningParamService.java | 88 +++ .../domain/ApiEnvironmentRunningParam.java | 25 + .../ApiEnvironmentRunningParamExample.java | 670 ++++++++++++++++++ .../ApiEnvironmentRunningParamMapper.java | 36 + .../ApiEnvironmentRunningParamMapper.xml | 304 ++++++++ .../db/migration/V83__v1.10_release.sql | 16 +- .../src/main/resources/generatorConfig.xml | 2 +- .../common/Jsr233ProcessorContent.vue | 24 +- frontend/src/i18n/en-US.js | 6 +- frontend/src/i18n/zh-CN.js | 6 +- frontend/src/i18n/zh-TW.js | 6 +- 17 files changed, 1242 insertions(+), 11 deletions(-) create mode 100644 backend/src/main/java/io/metersphere/api/dto/RunningParamKeys.java create mode 100644 backend/src/main/java/io/metersphere/api/jmeter/RunningParam.java create mode 100644 backend/src/main/java/io/metersphere/api/service/ApiEnvironmentRunningParamService.java create mode 100644 backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParam.java create mode 100644 backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParamExample.java create mode 100644 backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.java create mode 100644 backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.xml diff --git a/backend/src/main/java/io/metersphere/api/dto/RunningParamKeys.java b/backend/src/main/java/io/metersphere/api/dto/RunningParamKeys.java new file mode 100644 index 0000000000..f37ed1c95a --- /dev/null +++ b/backend/src/main/java/io/metersphere/api/dto/RunningParamKeys.java @@ -0,0 +1,20 @@ +package io.metersphere.api.dto; + +import org.apache.commons.lang3.StringUtils; + + +public class RunningParamKeys { + public static final String API_ENVIRONMENT_ID = "${__metersphere_evn_id}"; + + public static String escapeExprSpecialWord(String keyword) { + if (StringUtils.isNotBlank(keyword)) { + String[] fbsArr = {"\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|"}; + for (String key : fbsArr) { + if (keyword.contains(key)) { + keyword = keyword.replace(key, "\\" + key); + } + } + } + return keyword; + } +} diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java index 070ea76561..d1cf69ae9b 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java @@ -108,7 +108,8 @@ public abstract class MsTestElement { private String projectId; @JSONField(ordinal = 13) private boolean isMockEnvironment; - + @JSONField(ordinal = 14) + private String useEnviroment; private MsTestElement parent; private static final String BODY_FILE_DIR = FileUtils.BODY_FILE_DIR; diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java index 8ee9656bb4..34f1125504 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/post/MsJSR223PostProcessor.java @@ -2,6 +2,7 @@ package io.metersphere.api.dto.definition.request.processors.post; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONType; +import io.metersphere.api.dto.RunningParamKeys; import io.metersphere.api.dto.definition.request.MsTestElement; import io.metersphere.api.dto.definition.request.ParameterConfig; import lombok.Data; @@ -29,6 +30,9 @@ public class MsJSR223PostProcessor extends MsTestElement { @Override public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) { + //替换Metersphere环境变量 + script = StringUtils.replace(script,RunningParamKeys.API_ENVIRONMENT_ID,"\""+this.getUseEnviroment()+"\""); + // 非导出操作,且不是启用状态则跳过执行 if (!config.isOperating() && !this.isEnable()) { return; diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java index e3499b698b..84a849f056 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/processors/pre/MsJSR223PreProcessor.java @@ -2,6 +2,7 @@ package io.metersphere.api.dto.definition.request.processors.pre; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONType; +import io.metersphere.api.dto.RunningParamKeys; import io.metersphere.api.dto.definition.request.MsTestElement; import io.metersphere.api.dto.definition.request.ParameterConfig; import lombok.Data; @@ -29,6 +30,9 @@ public class MsJSR223PreProcessor extends MsTestElement { @Override public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) { + //替换Metersphere环境变量 + script = StringUtils.replace(script,RunningParamKeys.API_ENVIRONMENT_ID,"\""+this.getUseEnviroment()+"\""); + // 非导出操作,且不是启用状态则跳过执行 if (!config.isOperating() && !this.isEnable()) { return; diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java index 7c10a7a095..8336948db5 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java @@ -405,6 +405,7 @@ public class MsHTTPSamplerProxy extends MsTestElement { } if (CollectionUtils.isNotEmpty(hashTree)) { for (MsTestElement el : hashTree) { + el.setUseEnviroment(useEnvironment); el.toHashTree(httpSamplerTree, el.getHashTree(), config); } } diff --git a/backend/src/main/java/io/metersphere/api/jmeter/RunningParam.java b/backend/src/main/java/io/metersphere/api/jmeter/RunningParam.java new file mode 100644 index 0000000000..1373a6fcfe --- /dev/null +++ b/backend/src/main/java/io/metersphere/api/jmeter/RunningParam.java @@ -0,0 +1,38 @@ +package io.metersphere.api.jmeter; + +import io.metersphere.api.service.ApiEnvironmentRunningParamService; +import io.metersphere.commons.utils.CommonBeanFactory; + +/** + * @author song.tianyang + * 2021/5/13 5:24 下午 + */ +public class RunningParam { + private static ApiEnvironmentRunningParamService apiEnvironmentRunningParamService; + + public static void setParam(String enviromentId, String key, String value){ + checkService(); + apiEnvironmentRunningParamService.addParam(enviromentId,key,value); + } + + public static void deleteParam(String enviromentId, String key){ + checkService(); + apiEnvironmentRunningParamService.deleteParam(enviromentId,key); + } + + public static String getParam(String enviromentId, String key){ + checkService(); + return apiEnvironmentRunningParamService.getParam(enviromentId,key); + } + + public static String showParams(String enviromentId){ + checkService(); + return apiEnvironmentRunningParamService.showParams(enviromentId); + } + + public static void checkService(){ + if(apiEnvironmentRunningParamService == null){ + apiEnvironmentRunningParamService = CommonBeanFactory.getBean(ApiEnvironmentRunningParamService.class); + } + } +} diff --git a/backend/src/main/java/io/metersphere/api/service/ApiEnvironmentRunningParamService.java b/backend/src/main/java/io/metersphere/api/service/ApiEnvironmentRunningParamService.java new file mode 100644 index 0000000000..123bd74011 --- /dev/null +++ b/backend/src/main/java/io/metersphere/api/service/ApiEnvironmentRunningParamService.java @@ -0,0 +1,88 @@ +package io.metersphere.api.service; + +import com.alibaba.fastjson.JSONArray; +import io.metersphere.base.domain.ApiEnvironmentRunningParam; +import io.metersphere.base.domain.ApiEnvironmentRunningParamExample; +import io.metersphere.base.mapper.ApiEnvironmentRunningParamMapper; +import io.metersphere.commons.utils.SessionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +/** + * @author song.tianyang + * 2021/5/13 6:24 下午 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class ApiEnvironmentRunningParamService { + @Resource + ApiEnvironmentRunningParamMapper apiEnvironmentRunningParamMapper; + + public synchronized void addParam(String enviromentId, String key, String value) { + if(StringUtils.isEmpty(key)){ + return; + } + ApiEnvironmentRunningParamExample example = new ApiEnvironmentRunningParamExample(); + example.createCriteria().andApiEnviromentIdEqualTo(enviromentId).andKeyEqualTo(key); + List list = apiEnvironmentRunningParamMapper.selectByExampleWithBLOBs(example); + long timeStamp = System.currentTimeMillis(); + String userId = SessionUtils.getUserId(); + if(list.isEmpty()){ + ApiEnvironmentRunningParam model = new ApiEnvironmentRunningParam(); + model.setApiEnviromentId(enviromentId); + model.setKey(key); + model.setValue(value); + model.setCreateUserId(userId); + model.setId(UUID.randomUUID().toString()); + model.setCreateTime(timeStamp); + model.setUpdateTime(timeStamp); + model.setUpdateUserId(userId); + apiEnvironmentRunningParamMapper.insert(model); + }else { + ApiEnvironmentRunningParam model = list.get(0); + model.setValue(value); + model.setUpdateTime(timeStamp); + model.setUpdateUserId(userId); + apiEnvironmentRunningParamMapper.updateByPrimaryKeySelective(model); + } + } + + public void deleteParam(String enviromentId, String key) { + ApiEnvironmentRunningParamExample example = new ApiEnvironmentRunningParamExample(); + example.createCriteria().andApiEnviromentIdEqualTo(enviromentId).andKeyEqualTo(key); + apiEnvironmentRunningParamMapper.deleteByExample(example); + } + + public String getParam(String enviromentId, String key) { + ApiEnvironmentRunningParamExample example = new ApiEnvironmentRunningParamExample(); + example.createCriteria().andApiEnviromentIdEqualTo(enviromentId).andKeyEqualTo(key); + List list = apiEnvironmentRunningParamMapper.selectByExampleWithBLOBs(example); + if(list.isEmpty()){ + return ""; + }else { + return list.get(0).getValue(); + } + } + + public String showParams(String enviromentId) { + Map paramMap = new LinkedHashMap<>(); + + ApiEnvironmentRunningParamExample example = new ApiEnvironmentRunningParamExample(); + example.createCriteria().andApiEnviromentIdEqualTo(enviromentId); + List list = apiEnvironmentRunningParamMapper.selectByExampleWithBLOBs(example); + + for (ApiEnvironmentRunningParam model: + list) { + paramMap.put(model.getKey(),model.getValue()); + } + + return JSONArray.toJSONString(paramMap); + } +} diff --git a/backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParam.java b/backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParam.java new file mode 100644 index 0000000000..e9e8da3cab --- /dev/null +++ b/backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParam.java @@ -0,0 +1,25 @@ +package io.metersphere.base.domain; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class ApiEnvironmentRunningParam implements Serializable { + private String id; + + private String apiEnviromentId; + + private String key; + + private Long createTime; + + private Long updateTime; + + private String createUserId; + + private String updateUserId; + + private String value; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParamExample.java b/backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParamExample.java new file mode 100644 index 0000000000..43d2ca6154 --- /dev/null +++ b/backend/src/main/java/io/metersphere/base/domain/ApiEnvironmentRunningParamExample.java @@ -0,0 +1,670 @@ +package io.metersphere.base.domain; + +import java.util.ArrayList; +import java.util.List; + +public class ApiEnvironmentRunningParamExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public ApiEnvironmentRunningParamExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdIsNull() { + addCriterion("api_enviroment_id is null"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdIsNotNull() { + addCriterion("api_enviroment_id is not null"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdEqualTo(String value) { + addCriterion("api_enviroment_id =", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdNotEqualTo(String value) { + addCriterion("api_enviroment_id <>", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdGreaterThan(String value) { + addCriterion("api_enviroment_id >", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdGreaterThanOrEqualTo(String value) { + addCriterion("api_enviroment_id >=", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdLessThan(String value) { + addCriterion("api_enviroment_id <", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdLessThanOrEqualTo(String value) { + addCriterion("api_enviroment_id <=", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdLike(String value) { + addCriterion("api_enviroment_id like", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdNotLike(String value) { + addCriterion("api_enviroment_id not like", value, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdIn(List values) { + addCriterion("api_enviroment_id in", values, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdNotIn(List values) { + addCriterion("api_enviroment_id not in", values, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdBetween(String value1, String value2) { + addCriterion("api_enviroment_id between", value1, value2, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andApiEnviromentIdNotBetween(String value1, String value2) { + addCriterion("api_enviroment_id not between", value1, value2, "apiEnviromentId"); + return (Criteria) this; + } + + public Criteria andKeyIsNull() { + addCriterion("`key` is null"); + return (Criteria) this; + } + + public Criteria andKeyIsNotNull() { + addCriterion("`key` is not null"); + return (Criteria) this; + } + + public Criteria andKeyEqualTo(String value) { + addCriterion("`key` =", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyNotEqualTo(String value) { + addCriterion("`key` <>", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyGreaterThan(String value) { + addCriterion("`key` >", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyGreaterThanOrEqualTo(String value) { + addCriterion("`key` >=", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyLessThan(String value) { + addCriterion("`key` <", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyLessThanOrEqualTo(String value) { + addCriterion("`key` <=", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyLike(String value) { + addCriterion("`key` like", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyNotLike(String value) { + addCriterion("`key` not like", value, "key"); + return (Criteria) this; + } + + public Criteria andKeyIn(List values) { + addCriterion("`key` in", values, "key"); + return (Criteria) this; + } + + public Criteria andKeyNotIn(List values) { + addCriterion("`key` not in", values, "key"); + return (Criteria) this; + } + + public Criteria andKeyBetween(String value1, String value2) { + addCriterion("`key` between", value1, value2, "key"); + return (Criteria) this; + } + + public Criteria andKeyNotBetween(String value1, String value2) { + addCriterion("`key` not between", value1, value2, "key"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Long value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Long value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Long value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Long value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Long value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Long value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Long value1, Long value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Long value1, Long value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Long value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Long value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Long value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Long value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Long value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Long value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Long value1, Long value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Long value1, Long value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIsNull() { + addCriterion("create_user_id is null"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIsNotNull() { + addCriterion("create_user_id is not null"); + return (Criteria) this; + } + + public Criteria andCreateUserIdEqualTo(String value) { + addCriterion("create_user_id =", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotEqualTo(String value) { + addCriterion("create_user_id <>", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdGreaterThan(String value) { + addCriterion("create_user_id >", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdGreaterThanOrEqualTo(String value) { + addCriterion("create_user_id >=", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdLessThan(String value) { + addCriterion("create_user_id <", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdLessThanOrEqualTo(String value) { + addCriterion("create_user_id <=", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdLike(String value) { + addCriterion("create_user_id like", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotLike(String value) { + addCriterion("create_user_id not like", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIn(List values) { + addCriterion("create_user_id in", values, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotIn(List values) { + addCriterion("create_user_id not in", values, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdBetween(String value1, String value2) { + addCriterion("create_user_id between", value1, value2, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotBetween(String value1, String value2) { + addCriterion("create_user_id not between", value1, value2, "createUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNull() { + addCriterion("update_user_id is null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNotNull() { + addCriterion("update_user_id is not null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdEqualTo(String value) { + addCriterion("update_user_id =", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotEqualTo(String value) { + addCriterion("update_user_id <>", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThan(String value) { + addCriterion("update_user_id >", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThanOrEqualTo(String value) { + addCriterion("update_user_id >=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThan(String value) { + addCriterion("update_user_id <", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThanOrEqualTo(String value) { + addCriterion("update_user_id <=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLike(String value) { + addCriterion("update_user_id like", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotLike(String value) { + addCriterion("update_user_id not like", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIn(List values) { + addCriterion("update_user_id in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotIn(List values) { + addCriterion("update_user_id not in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdBetween(String value1, String value2) { + addCriterion("update_user_id between", value1, value2, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotBetween(String value1, String value2) { + addCriterion("update_user_id not between", value1, value2, "updateUserId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.java new file mode 100644 index 0000000000..6c7dfb81e6 --- /dev/null +++ b/backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.java @@ -0,0 +1,36 @@ +package io.metersphere.base.mapper; + +import io.metersphere.base.domain.ApiEnvironmentRunningParam; +import io.metersphere.base.domain.ApiEnvironmentRunningParamExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface ApiEnvironmentRunningParamMapper { + long countByExample(ApiEnvironmentRunningParamExample example); + + int deleteByExample(ApiEnvironmentRunningParamExample example); + + int deleteByPrimaryKey(String id); + + int insert(ApiEnvironmentRunningParam record); + + int insertSelective(ApiEnvironmentRunningParam record); + + List selectByExampleWithBLOBs(ApiEnvironmentRunningParamExample example); + + List selectByExample(ApiEnvironmentRunningParamExample example); + + ApiEnvironmentRunningParam selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") ApiEnvironmentRunningParam record, @Param("example") ApiEnvironmentRunningParamExample example); + + int updateByExampleWithBLOBs(@Param("record") ApiEnvironmentRunningParam record, @Param("example") ApiEnvironmentRunningParamExample example); + + int updateByExample(@Param("record") ApiEnvironmentRunningParam record, @Param("example") ApiEnvironmentRunningParamExample example); + + int updateByPrimaryKeySelective(ApiEnvironmentRunningParam record); + + int updateByPrimaryKeyWithBLOBs(ApiEnvironmentRunningParam record); + + int updateByPrimaryKey(ApiEnvironmentRunningParam record); +} \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.xml new file mode 100644 index 0000000000..a482234180 --- /dev/null +++ b/backend/src/main/java/io/metersphere/base/mapper/ApiEnvironmentRunningParamMapper.xml @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, api_enviroment_id, `key`, create_time, update_time, create_user_id, update_user_id + + + `value` + + + + + + delete from api_environment_running_param + where id = #{id,jdbcType=VARCHAR} + + + delete from api_environment_running_param + + + + + + insert into api_environment_running_param (id, api_enviroment_id, `key`, + create_time, update_time, create_user_id, + update_user_id, `value`) + values (#{id,jdbcType=VARCHAR}, #{apiEnviromentId,jdbcType=VARCHAR}, #{key,jdbcType=VARCHAR}, + #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{createUserId,jdbcType=VARCHAR}, + #{updateUserId,jdbcType=VARCHAR}, #{value,jdbcType=LONGVARCHAR}) + + + insert into api_environment_running_param + + + id, + + + api_enviroment_id, + + + `key`, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + `value`, + + + + + #{id,jdbcType=VARCHAR}, + + + #{apiEnviromentId,jdbcType=VARCHAR}, + + + #{key,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=BIGINT}, + + + #{updateTime,jdbcType=BIGINT}, + + + #{createUserId,jdbcType=VARCHAR}, + + + #{updateUserId,jdbcType=VARCHAR}, + + + #{value,jdbcType=LONGVARCHAR}, + + + + + + update api_environment_running_param + + + id = #{record.id,jdbcType=VARCHAR}, + + + api_enviroment_id = #{record.apiEnviromentId,jdbcType=VARCHAR}, + + + `key` = #{record.key,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=BIGINT}, + + + update_time = #{record.updateTime,jdbcType=BIGINT}, + + + create_user_id = #{record.createUserId,jdbcType=VARCHAR}, + + + update_user_id = #{record.updateUserId,jdbcType=VARCHAR}, + + + `value` = #{record.value,jdbcType=LONGVARCHAR}, + + + + + + + + update api_environment_running_param + set id = #{record.id,jdbcType=VARCHAR}, + api_enviroment_id = #{record.apiEnviromentId,jdbcType=VARCHAR}, + `key` = #{record.key,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=BIGINT}, + update_time = #{record.updateTime,jdbcType=BIGINT}, + create_user_id = #{record.createUserId,jdbcType=VARCHAR}, + update_user_id = #{record.updateUserId,jdbcType=VARCHAR}, + `value` = #{record.value,jdbcType=LONGVARCHAR} + + + + + + update api_environment_running_param + set id = #{record.id,jdbcType=VARCHAR}, + api_enviroment_id = #{record.apiEnviromentId,jdbcType=VARCHAR}, + `key` = #{record.key,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=BIGINT}, + update_time = #{record.updateTime,jdbcType=BIGINT}, + create_user_id = #{record.createUserId,jdbcType=VARCHAR}, + update_user_id = #{record.updateUserId,jdbcType=VARCHAR} + + + + + + update api_environment_running_param + + + api_enviroment_id = #{apiEnviromentId,jdbcType=VARCHAR}, + + + `key` = #{key,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=BIGINT}, + + + update_time = #{updateTime,jdbcType=BIGINT}, + + + create_user_id = #{createUserId,jdbcType=VARCHAR}, + + + update_user_id = #{updateUserId,jdbcType=VARCHAR}, + + + `value` = #{value,jdbcType=LONGVARCHAR}, + + + where id = #{id,jdbcType=VARCHAR} + + + update api_environment_running_param + set api_enviroment_id = #{apiEnviromentId,jdbcType=VARCHAR}, + `key` = #{key,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=BIGINT}, + update_time = #{updateTime,jdbcType=BIGINT}, + create_user_id = #{createUserId,jdbcType=VARCHAR}, + update_user_id = #{updateUserId,jdbcType=VARCHAR}, + `value` = #{value,jdbcType=LONGVARCHAR} + where id = #{id,jdbcType=VARCHAR} + + + update api_environment_running_param + set api_enviroment_id = #{apiEnviromentId,jdbcType=VARCHAR}, + `key` = #{key,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=BIGINT}, + update_time = #{updateTime,jdbcType=BIGINT}, + create_user_id = #{createUserId,jdbcType=VARCHAR}, + update_user_id = #{updateUserId,jdbcType=VARCHAR} + where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file diff --git a/backend/src/main/resources/db/migration/V83__v1.10_release.sql b/backend/src/main/resources/db/migration/V83__v1.10_release.sql index 074057ae27..6b716e230c 100644 --- a/backend/src/main/resources/db/migration/V83__v1.10_release.sql +++ b/backend/src/main/resources/db/migration/V83__v1.10_release.sql @@ -13,6 +13,18 @@ SET load_test_report.project_id = load_test.project_id; UPDATE load_test_report JOIN load_test ON load_test.id = load_test_report.test_id SET load_test_report.test_name = load_test.name; --- - +-- api_environment_running_param +CREATE TABLE IF NOT EXISTS api_environment_running_param ( + `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `api_enviroment_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, + `create_time` bigint(13) NULL DEFAULT NULL, + `update_time` bigint(13) NULL DEFAULT NULL, + `create_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `update_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + INDEX `api_enviroment_id`(`api_enviroment_id`) USING BTREE, + INDEX `key_api_enviroment_id`(`api_enviroment_id`,`key`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; diff --git a/backend/src/main/resources/generatorConfig.xml b/backend/src/main/resources/generatorConfig.xml index 1aa3768c1d..7ba2e2a09f 100644 --- a/backend/src/main/resources/generatorConfig.xml +++ b/backend/src/main/resources/generatorConfig.xml @@ -77,7 +77,7 @@
--> -
+
diff --git a/frontend/src/business/components/api/automation/scenario/common/Jsr233ProcessorContent.vue b/frontend/src/business/components/api/automation/scenario/common/Jsr233ProcessorContent.vue index 1730c3b938..0d5d9340a1 100644 --- a/frontend/src/business/components/api/automation/scenario/common/Jsr233ProcessorContent.vue +++ b/frontend/src/business/components/api/automation/scenario/common/Jsr233ProcessorContent.vue @@ -45,6 +45,26 @@ title: this.$t('api_test.request.processor.code_template_get_global_variable'), value: 'props.get("variable_name")', }, + { + title: this.$t('api_test.request.processor.code_template_set_global_variable'), + value: 'props.put("variable_name", "variable_value")', + }, + { + title: this.$t('api_test.request.processor.param_environment_get_global_variable'), + value: 'io.metersphere.api.jmeter.RunningParam.getParam(${__metersphere_evn_id},"key")', + }, + { + title: this.$t('api_test.request.processor.param_environment_set_global_variable'), + value: 'io.metersphere.api.jmeter.RunningParam.setParam(${__metersphere_evn_id},"key","value")', + }, + { + title: this.$t('api_test.request.processor.param_environment_delete_global_variable'), + value: 'io.metersphere.api.jmeter.RunningParam.deleteParam(${__metersphere_evn_id},"key")', + }, + { + title: this.$t('api_test.request.processor.param_environment_show_global_variable'), + value: 'io.metersphere.api.jmeter.RunningParam.showParams(${__metersphere_evn_id})', + }, { title: this.$t('api_test.request.processor.code_add_report_length'), value: 'String report = ctx.getCurrentSampler().getRequestData();\n' + @@ -55,10 +75,6 @@ ' ctx.getCurrentSampler().setRequestData(report);\n' + '}', }, - { - title: this.$t('api_test.request.processor.code_template_set_global_variable'), - value: 'props.put("variable_name", "variable_value")', - }, { title: this.$t('api_test.request.processor.code_template_get_response_header'), value: 'prev.getResponseHeaders()', diff --git a/frontend/src/i18n/en-US.js b/frontend/src/i18n/en-US.js index 8a843dc1bf..c7bdafaa2a 100644 --- a/frontend/src/i18n/en-US.js +++ b/frontend/src/i18n/en-US.js @@ -1003,7 +1003,11 @@ export default { code_template_get_response_code: "Get Response Code", code_template_get_response_result: "Get Response Result", code_add_report_length: "Add report length to head", - code_hide_report_length: "Hide report length" + code_hide_report_length: "Hide report length", + param_environment_get_global_variable: "Get run environment param", + param_environment_set_global_variable: "Set run environment param", + param_environment_delete_global_variable: "Delete run environment param", + param_environment_show_global_variable: "Show all environment params", }, dubbo: { protocol: "protocol", diff --git a/frontend/src/i18n/zh-CN.js b/frontend/src/i18n/zh-CN.js index b557f611d4..dc22a504dd 100644 --- a/frontend/src/i18n/zh-CN.js +++ b/frontend/src/i18n/zh-CN.js @@ -1005,7 +1005,11 @@ export default { code_template_get_response_code: "获取响应码", code_template_get_response_result: "获取响应结果", code_add_report_length: "报文头添加长度", - code_hide_report_length: "隐藏报文长度" + code_hide_report_length: "隐藏报文长度", + param_environment_get_global_variable: "获取环境参数", + param_environment_set_global_variable: "设置环境参数", + param_environment_delete_global_variable: "删除环境参数", + param_environment_show_global_variable: "获取所有环境参数", }, dubbo: { protocol: "协议", diff --git a/frontend/src/i18n/zh-TW.js b/frontend/src/i18n/zh-TW.js index 2fe3e73dab..ce0bdb2410 100644 --- a/frontend/src/i18n/zh-TW.js +++ b/frontend/src/i18n/zh-TW.js @@ -1005,7 +1005,11 @@ export default { code_template_get_response_code: "獲取響應碼", code_template_get_response_result: "獲取響應結果", code_add_report_length: "報文頭添加長度", - code_hide_report_length: "隱藏報文長度" + code_hide_report_length: "隱藏報文長度", + param_environment_get_global_variable: "獲取環境參數", + param_environment_set_global_variable: "設置環境參數", + param_environment_delete_global_variable: "刪除環境參數", + param_environment_show_global_variable: "獲取所有環境參數", }, dubbo: { protocol: "協議",