+
@@ -16,7 +16,11 @@
width: {
type: String,
default: '300px'
- }
+ },
+ enableAsideHidden: {
+ type: Boolean,
+ default: true
+ },
},
data() {
return {
diff --git a/frontend/src/business/components/common/components/MsAsideItem.vue b/frontend/src/business/components/common/components/MsAsideItem.vue
index 3be5bad1ee..f5a725b768 100644
--- a/frontend/src/business/components/common/components/MsAsideItem.vue
+++ b/frontend/src/business/components/common/components/MsAsideItem.vue
@@ -1,5 +1,5 @@
-
+
@@ -58,6 +58,10 @@
];
}
},
+ enableAsideHidden: {
+ type: Boolean,
+ default: true
+ },
},
methods: {
itemSelected(index, item) {
From 9d293f653ee5ed6e0f5bf48dae8ee0840ce45940 Mon Sep 17 00:00:00 2001
From: chenjianxing
Date: Tue, 4 Aug 2020 17:54:36 +0800
Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=E7=8E=AF=E5=A2=83=E8=AE=BE=E7=BD=AE?=
=?UTF-8?q?beaseUrl?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/business/components/api/test/model/ScenarioModel.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/frontend/src/business/components/api/test/model/ScenarioModel.js b/frontend/src/business/components/api/test/model/ScenarioModel.js
index 12d09da4f9..58c6b81e70 100644
--- a/frontend/src/business/components/api/test/model/ScenarioModel.js
+++ b/frontend/src/business/components/api/test/model/ScenarioModel.js
@@ -287,7 +287,7 @@ export class HttpRequest extends Request {
}
}
} else {
- if (!this.url) {
+ if (!this.url) {
return {
isValid: false,
info: 'api_test.request.input_url'
@@ -667,7 +667,7 @@ class JMXHttpRequest {
this.protocol = environment.protocol;
this.domain = environment.domain;
let url = new URL(environment.protocol + "://" + environment.socket);
- this.path = this.getPostQueryParameters(request, decodeURIComponent(url.pathname));
+ this.path = this.getPostQueryParameters(request, decodeURIComponent(url.pathname + (request.path ? request.path : '')));
}
}
}
@@ -684,7 +684,7 @@ class JMXHttpRequest {
for (let i = 0; i < parameters.length; i++) {
let parameter = parameters[i];
path += (parameter.name + '=' + parameter.value);
- if (i != parameters.length -1) {
+ if (i != parameters.length - 1) {
path += '&';
}
}
From bca1ef13cb81234fb2e1b464a64f866c3aab7762 Mon Sep 17 00:00:00 2001
From: chenjianxing
Date: Tue, 4 Aug 2020 18:01:41 +0800
Subject: [PATCH 4/9] =?UTF-8?q?fix:=20=E7=82=B9=E5=87=BB=E5=AE=9A=E6=97=B6?=
=?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=90=AF=E5=8A=A8=E6=8A=A5=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../components/common/components/MsScheduleConfig.vue | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/frontend/src/business/components/common/components/MsScheduleConfig.vue b/frontend/src/business/components/common/components/MsScheduleConfig.vue
index cb1ed5a58a..029174abb4 100644
--- a/frontend/src/business/components/common/components/MsScheduleConfig.vue
+++ b/frontend/src/business/components/common/components/MsScheduleConfig.vue
@@ -1,11 +1,11 @@
-
+
- SCHEDULER
+ SCHEDULER
-
+
From 74ea612f2e2aa0dbf4ec478fc2b6bdbe3b077911 Mon Sep 17 00:00:00 2001
From: wenyann <64353056+wenyann@users.noreply.github.com>
Date: Tue, 4 Aug 2020 19:04:03 +0800
Subject: [PATCH 5/9] =?UTF-8?q?fix(=E6=B5=8B=E8=AF=95=E8=AE=A1=E5=88=92):?=
=?UTF-8?q?=20=E4=BF=AE=E5=A4=8D=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?=
=?UTF-8?q?=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../base/mapper/ext/ExtTestPlanTestCaseMapper.xml | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml
index f64215b927..54c5b657f5 100644
--- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml
+++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml
@@ -170,11 +170,17 @@
#{value}
-
+
and test_case.method in
#{value}
+
+
+ and test_plan_test_case.status in
+
+ #{value}
+
From c8b59784fa3d48f458a68757dcb443a5eded2f3d Mon Sep 17 00:00:00 2001
From: wenyann <64353056+wenyann@users.noreply.github.com>
Date: Wed, 5 Aug 2020 10:11:26 +0800
Subject: [PATCH 6/9] =?UTF-8?q?fix(=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE):?=
=?UTF-8?q?=20=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7=E9=82=AE=E7=AE=B1?=
=?UTF-8?q?=E6=A0=BC=E5=BC=8F=E6=94=AF=E6=8C=81=E5=B8=A6=E7=AC=A6=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/business/components/settings/system/User.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/frontend/src/business/components/settings/system/User.vue b/frontend/src/business/components/settings/system/User.vue
index 7481d32f37..685a1c989f 100644
--- a/frontend/src/business/components/settings/system/User.vue
+++ b/frontend/src/business/components/settings/system/User.vue
@@ -369,7 +369,7 @@
{required: true, message: this.$t('user.input_email'), trigger: 'blur'},
{
required: true,
- pattern: /^([A-Za-z0-9_\-.])+@([A-Za-z0-9]+\.)+[A-Za-z]{2,6}$/,
+ pattern: /^[a-zA-Z0-9_._-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
message: this.$t('user.email_format_is_incorrect'),
trigger: 'blur'
}
From 7de5205b9982487addfc1eb89257c1fb6f123aad Mon Sep 17 00:00:00 2001
From: chenjianxing
Date: Wed, 5 Aug 2020 10:13:56 +0800
Subject: [PATCH 7/9] =?UTF-8?q?fix:=20=E6=A8=A1=E5=9D=97=E6=A0=91=E6=8B=96?=
=?UTF-8?q?=E6=8B=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../track/service/TestCaseNodeService.java | 2 +-
.../components/track/common/NodeTree.vue | 19 +++++++++++++------
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java
index 9834357188..d193d5b008 100644
--- a/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java
+++ b/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java
@@ -415,7 +415,7 @@ public class TestCaseNodeService {
List updateNodes = new ArrayList<>();
- buildUpdateTestCase(nodeTree, testCases, updateNodes, "/", null, 1);
+ buildUpdateTestCase(nodeTree, testCases, updateNodes, "/", "0", 1);
updateNodes = updateNodes.stream()
.filter(item -> nodeIds.contains(item.getId()))
diff --git a/frontend/src/business/components/track/common/NodeTree.vue b/frontend/src/business/components/track/common/NodeTree.vue
index 01bc74ce5c..c1762f8506 100644
--- a/frontend/src/business/components/track/common/NodeTree.vue
+++ b/frontend/src/business/components/track/common/NodeTree.vue
@@ -107,6 +107,16 @@ export default {
},
methods: {
handleDragEnd(draggingNode, dropNode, dropType, ev) {
+ let param = this.buildParam(draggingNode, dropNode, dropType);
+ console.log(this.treeNodes);
+ this.$post("/case/node/drag", param, () => {
+ draggingNode.data.level = param.level;
+ this.refreshTable();
+ }, (error) => {
+ this.refreshNode();
+ });
+ },
+ buildParam(draggingNode, dropNode, dropType) {
let param = {};
param.id = draggingNode.data.id;
param.name = draggingNode.data.name;
@@ -115,7 +125,7 @@ export default {
param.parentId = dropNode.data.id;
param.level = dropNode.data.level + 1;
} else {
- if (dropNode.parent.id === 0) {
+ if (!dropNode.parent.id || dropNode.parent.id === 0) {
param.parentId = 0;
param.level = 1;
} else {
@@ -135,12 +145,9 @@ export default {
}
}
}
+
param.nodeIds = nodeIds;
- this.$post("/case/node/drag", param, () => {
- this.refreshTable();
- }, (error) => {
- this.refreshNode();
- });
+ return param;
},
refreshTable() {
this.$emit('refreshTable');
From 1faa4b6e8ca0fd75b10dcd124fadf61d14fddb28 Mon Sep 17 00:00:00 2001
From: chenjianxing
Date: Wed, 5 Aug 2020 10:55:21 +0800
Subject: [PATCH 8/9] =?UTF-8?q?fix:=20=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?=
=?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E6=B5=8B=E8=AF=95=E4=B8=8D?=
=?UTF-8?q?=E8=83=BD=E9=80=89=E6=8B=A9=E8=87=AA=E5=8A=A8=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../commons/constants/TestCaseConstants.java | 43 +++++++++++++++++++
.../excel/listener/TestCaseDataListener.java | 8 +++-
.../track/service/TestCaseService.java | 14 ++++--
.../resources/i18n/messages_en_US.properties | 1 +
.../resources/i18n/messages_zh_CN.properties | 1 +
.../resources/i18n/messages_zh_TW.properties | 1 +
6 files changed, 62 insertions(+), 6 deletions(-)
diff --git a/backend/src/main/java/io/metersphere/commons/constants/TestCaseConstants.java b/backend/src/main/java/io/metersphere/commons/constants/TestCaseConstants.java
index 06410341dc..0844c34bb1 100644
--- a/backend/src/main/java/io/metersphere/commons/constants/TestCaseConstants.java
+++ b/backend/src/main/java/io/metersphere/commons/constants/TestCaseConstants.java
@@ -1,5 +1,48 @@
package io.metersphere.commons.constants;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
public class TestCaseConstants {
+
public static final int MAX_NODE_DEPTH = 5;
+
+ public enum Type {
+ Functional("functional"), Performance("performance"), Aapi("api");
+
+ private String value;
+
+ Type(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return this.value;
+ }
+
+ public static List getValues() {
+ List types = Arrays.asList(Type.values());
+ return types.stream().map(Type::getValue).collect(Collectors.toList());
+ }
+ }
+
+ public enum Method {
+ Manual("manual"), Auto("auto");
+
+ private String value;
+
+ Method(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return this.value;
+ }
+
+ public static List getValues() {
+ List types = Arrays.asList(Method.values());
+ return types.stream().map(Method::getValue).collect(Collectors.toList());
+ }
+ }
}
diff --git a/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java b/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
index c5efa2da88..d4d590586d 100644
--- a/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
+++ b/backend/src/main/java/io/metersphere/excel/listener/TestCaseDataListener.java
@@ -41,16 +41,20 @@ public class TestCaseDataListener extends EasyExcelListener {
String[] nodes = nodePath.split("/");
if (nodes.length > TestCaseConstants.MAX_NODE_DEPTH + 1) {
stringBuilder.append(Translator.get("test_case_node_level_tip") +
- TestCaseConstants.MAX_NODE_DEPTH + Translator.get("test_case_node_level"));
+ TestCaseConstants.MAX_NODE_DEPTH + Translator.get("test_case_node_level") + "; ");
}
for (int i = 0; i < nodes.length; i++) {
if (i != 0 && StringUtils.equals(nodes[i].trim(), "")) {
- stringBuilder.append(Translator.get("module_not_null"));
+ stringBuilder.append(Translator.get("module_not_null") + "; ");
break;
}
}
}
+ if (StringUtils.equals(data.getType(), TestCaseConstants.Type.Functional.getValue()) && StringUtils.equals(data.getMethod(), TestCaseConstants.Method.Auto.getValue())) {
+ stringBuilder.append(Translator.get("functional_method_tip") + "; ");
+ }
+
if (!userIds.contains(data.getMaintainer())) {
stringBuilder.append(Translator.get("user_not_exists") + ":" + data.getMaintainer() + "; ");
}
diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java
index d6c7a199c0..a09b58e4a0 100644
--- a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java
+++ b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java
@@ -9,6 +9,7 @@ import io.metersphere.base.domain.*;
import io.metersphere.base.mapper.*;
import io.metersphere.base.mapper.ext.ExtTestCaseMapper;
import io.metersphere.commons.constants.RoleConstants;
+import io.metersphere.commons.constants.TestCaseConstants;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.user.SessionUser;
import io.metersphere.commons.utils.BeanUtils;
@@ -309,8 +310,8 @@ public class TestCaseService {
private List generateExportTemplate() {
List list = new ArrayList<>();
StringBuilder path = new StringBuilder("");
- List types = Arrays.asList("functional", "performance", "api");
- List methods = Arrays.asList("manual", "auto");
+ List types = TestCaseConstants.Type.getValues();
+ List methods = TestCaseConstants.Method.getValues();
SessionUser user = SessionUtils.getUser();
for (int i = 1; i <= 5; i++) {
TestCaseExcelData data = new TestCaseExcelData();
@@ -318,8 +319,13 @@ public class TestCaseService {
path.append("/" + Translator.get("module") + i);
data.setNodePath(path.toString());
data.setPriority("P" + i % 4);
- data.setType(types.get(i % 3));
- data.setMethod(methods.get(i % 2));
+ String type = types.get(i % 3);
+ data.setType(type);
+ if (StringUtils.equals(TestCaseConstants.Type.Functional.getValue(), type)) {
+ data.setMethod(TestCaseConstants.Method.Manual.getValue());
+ } else {
+ data.setMethod(methods.get(i % 2));
+ }
data.setPrerequisite(Translator.get("preconditions_optional"));
data.setStepDesc("1. " + Translator.get("step_tip_separate") +
"\n2. " + Translator.get("step_tip_order") + "\n3. " + Translator.get("step_tip_optional"));
diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties
index 23b93a72a3..6f07a9bf57 100644
--- a/backend/src/main/resources/i18n/messages_en_US.properties
+++ b/backend/src/main/resources/i18n/messages_en_US.properties
@@ -117,6 +117,7 @@ plan_name_already_exists=Test plan name already exists
test_case_already_exists_excel=There are duplicate test cases in the import file
test_case_module_already_exists=The module name already exists at the same level
api_test_name_already_exists=Test name already exists
+functional_method_tip=Functional test not support auto method
#ldap
ldap_url_is_null=LDAP address is empty
diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties
index 67a2bfcf75..d91cbb33c2 100644
--- a/backend/src/main/resources/i18n/messages_zh_CN.properties
+++ b/backend/src/main/resources/i18n/messages_zh_CN.properties
@@ -117,6 +117,7 @@ plan_name_already_exists=测试计划名称已存在
test_case_already_exists_excel=导入文件中存在重复用例
test_case_module_already_exists=同层级下已存在该模块名称
api_test_name_already_exists=测试名称已经存在
+functional_method_tip=功能测试不支持自动方式
#ldap
ldap_url_is_null=LDAP地址为空
diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties
index edcbdfdeb2..e9c1398f58 100644
--- a/backend/src/main/resources/i18n/messages_zh_TW.properties
+++ b/backend/src/main/resources/i18n/messages_zh_TW.properties
@@ -117,6 +117,7 @@ plan_name_already_exists=測試計劃名稱已存在
test_case_already_exists_excel=導入文件中存在重復用例
test_case_module_already_exists=同層級下已存在該模塊名稱
api_test_name_already_exists=測試名稱已經存在
+functional_method_tip=功能測試不支持自動方式
#ldap
ldap_url_is_null=LDAP地址為空
From 3a8dc9ee04706e894f9c5d17dfcbc9d73d9b4e81 Mon Sep 17 00:00:00 2001
From: chenjianxing
Date: Wed, 5 Aug 2020 13:08:18 +0800
Subject: [PATCH 9/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8F=92=E4=BB=B6?=
=?UTF-8?q?=E5=AF=BC=E5=85=A5kv=E7=B1=BB=E5=9E=8Bbody=E6=8A=A5=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../io/metersphere/api/parse/MsParser.java | 49 ++++++++++++++-----
1 file changed, 36 insertions(+), 13 deletions(-)
diff --git a/backend/src/main/java/io/metersphere/api/parse/MsParser.java b/backend/src/main/java/io/metersphere/api/parse/MsParser.java
index 0b77a2c126..9df5c21e9e 100644
--- a/backend/src/main/java/io/metersphere/api/parse/MsParser.java
+++ b/backend/src/main/java/io/metersphere/api/parse/MsParser.java
@@ -11,7 +11,6 @@ import org.apache.commons.lang3.StringUtils;
import org.eclipse.jetty.http.HttpMethod;
import java.io.InputStream;
-import java.util.Map;
public class MsParser extends ApiImportAbstractParser {
@@ -49,18 +48,7 @@ public class MsParser extends ApiImportAbstractParser {
requestObject.put(key, requestTmpObject.get(key));
});;
requestObject.put("name", requestName);
- JSONArray bodies = requestObject.getJSONArray("body");
- if (StringUtils.equalsIgnoreCase(requestObject.getString("method"), HttpMethod.POST.name()) && bodies != null) {
- StringBuilder bodyStr = new StringBuilder();
- for (int i = 0; i < bodies.size(); i++) {
- String body = bodies.getString(i);
- bodyStr.append(body);
- }
- JSONObject bodyObject = new JSONObject();
- bodyObject.put("raw", bodyStr);
- bodyObject.put("type", MsRequestBodyType.RAW.value());
- requestObject.put("body", bodyObject);
- }
+ parseBody(requestObject);
requestsObjects.add(requestObject);
});
scenario.put("requests", requestsObjects);
@@ -71,4 +59,39 @@ public class MsParser extends ApiImportAbstractParser {
return result.toJSONString();
}
}
+
+ private void parseBody(JSONObject requestObject) {
+ if (requestObject.containsKey("body")) {
+ Object body = requestObject.get("body");
+ if (body instanceof JSONArray) {
+ JSONArray bodies = requestObject.getJSONArray("body");
+ if (StringUtils.equalsIgnoreCase(requestObject.getString("method"), HttpMethod.POST.name()) && bodies != null) {
+ StringBuilder bodyStr = new StringBuilder();
+ for (int i = 0; i < bodies.size(); i++) {
+ String tmp = bodies.getString(i);
+ bodyStr.append(tmp);
+ }
+ JSONObject bodyObject = new JSONObject();
+ bodyObject.put("raw", bodyStr);
+ bodyObject.put("type", MsRequestBodyType.RAW.value());
+ requestObject.put("body", bodyObject);
+ }
+ } else if (body instanceof JSONObject) {
+ JSONObject bodyObj = requestObject.getJSONObject("body");
+ if (StringUtils.equalsIgnoreCase(requestObject.getString("method"), HttpMethod.POST.name()) && bodyObj != null) {
+ JSONArray kvs = new JSONArray();
+ bodyObj.keySet().forEach(key -> {
+ JSONObject kv = new JSONObject();
+ kv.put("name", key);
+ kv.put("value", bodyObj.getString(key));
+ kvs.add(kv);
+ });
+ JSONObject bodyRes = new JSONObject();
+ bodyRes.put("kvs", kvs);
+ bodyRes.put("type", MsRequestBodyType.KV.value());
+ requestObject.put("body", bodyRes);
+ }
+ }
+ }
+ }
}