diff --git a/test-test/src/main/java/com/test/test/domain/TestCase.java b/test-test/src/main/java/com/test/test/domain/TestCase.java index b685eb7..1ec4aef 100644 --- a/test-test/src/main/java/com/test/test/domain/TestCase.java +++ b/test-test/src/main/java/com/test/test/domain/TestCase.java @@ -6,6 +6,8 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; +import java.util.Map; + /** * 用例对象 test_case * @@ -47,4 +49,7 @@ public class TestCase extends BaseEntity /** 用例会话id */ private String caseSid; + + /** 存储用例上下文提取结果 */ + private Map contextResultMap; } diff --git a/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java b/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java index a467b1d..4740ace 100644 --- a/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java +++ b/test-test/src/main/java/com/test/test/service/impl/TestCaseServiceImpl.java @@ -141,6 +141,8 @@ public class TestCaseServiceImpl implements ITestCaseService log.error("用例计划已被删除,不能执行!"); return null; } + Map contextResultMap = new HashMap<>(); + testCase.setContextResultMap(contextResultMap); TestCaseLog testCaseLog = new TestCaseLog(); testCaseLog.setCaseId(id); testCaseLog.setCreateTime(DateUtils.getNowDate()); @@ -219,10 +221,12 @@ public class TestCaseServiceImpl implements ITestCaseService testCaseResult.setResponseBody(resultMap.get("responseBody")); // 处理参数提取 Map assignmentResultMap = new HashMap<>(); + assignmentResultMap.putAll(testCase.getContextResultMap()); String assignmentResult = this.dealTestCaseStepAssignment(resultMap, assignmentResultMap, assignment); testCaseResult.setAssignment(assignmentResult); // 根据提取结果处理校验规则 String assertionResult = this.dealTestCaseStepAssertion(assignmentResultMap, assertion); + testCase.getContextResultMap().putAll(assignmentResultMap); testCaseResult.setAssertion(assertionResult); Long useTime = null; if (resultMap.get("costMiliseconds") != null) { @@ -295,10 +299,12 @@ public class TestCaseServiceImpl implements ITestCaseService testCaseResult.setSqlResult(gson.toJson(sqlResult)); // 处理参数提取 Map assignmentResultMap = new HashMap<>(); + assignmentResultMap.putAll(testCase.getContextResultMap()); String assignmentResult = this.dealDataSourceTestCaseStepAssignment(resultMapList, assignmentResultMap, sqlSpecialResultMap, assignment); testCaseResult.setAssignment(assignmentResult); // 根据提取结果处理校验规则 String assertionResult = this.dealTestCaseStepAssertion(assignmentResultMap, assertion); + testCase.getContextResultMap().putAll(assignmentResultMap); testCaseResult.setAssertion(assertionResult); if ("fail".equals(assignmentResultMap.get("assertionResult"))) { testCaseResult.setStatus("失败"); @@ -510,6 +516,8 @@ public class TestCaseServiceImpl implements ITestCaseService ruleResult.setValue(value); } else if ("${RESPONSE_CODE}".equals(content)) { ruleResult.setValue(responseCode); + } else if (content.startsWith("${")) { + ruleResult.setValue(assignmentResultMap.get(StringUtils.substringBetween(content, "${", "}"))); } assignmentResultMap.put(rule.getName(), ruleResult.getValue()); ruleResultList.add(ruleResult); @@ -564,6 +572,8 @@ public class TestCaseServiceImpl implements ITestCaseService } else { ruleResult.setValue(affectRows); } + } else if (content.startsWith("${")) { + ruleResult.setValue(assignmentResultMap.get(StringUtils.substringBetween(content, "${", "}"))); } assignmentResultMap.put(rule.getName(), ruleResult.getValue()); ruleResultList.add(ruleResult); diff --git a/test-ui/src/views/test/case/detail/page1.vue b/test-ui/src/views/test/case/detail/page1.vue index c8faa0a..c8a0f6a 100644 --- a/test-ui/src/views/test/case/detail/page1.vue +++ b/test-ui/src/views/test/case/detail/page1.vue @@ -213,12 +213,19 @@ export default { }, hosts: { type: Array + }, + quoteList: { + type: Array } }, created() { // 在这里进行数据预处理 this.preProcessFormData(); }, + mounted() { + // 在组件挂载后调用方法 + this.appendNamesToExtractObject(); + }, data() { return { activeName: "Headers", @@ -260,6 +267,24 @@ export default { } }, methods: { + appendNamesToExtractObject() { + if (this.quoteList) { + this.quoteList.forEach(item => { + item.assignment.forEach(item2 => { + if (item2.name && !this.isDuplicate(item2.name)) { + this.extract_object.push({ + value: '${' + item2.name + '}', + label: '${' + item2.name + '}' + }); + } + }); + }); + } + }, + isDuplicate(name) { + let compareName = '${' + name + '}'; + return this.extract_object.some(obj => obj.value === compareName); + }, handleLogChange(val) { const selectedItem = this.form.testCaseResultList.find(item => item.title === val); if (selectedItem) { diff --git a/test-ui/src/views/test/case/detail/page2.vue b/test-ui/src/views/test/case/detail/page2.vue index 301590c..e794cb6 100644 --- a/test-ui/src/views/test/case/detail/page2.vue +++ b/test-ui/src/views/test/case/detail/page2.vue @@ -111,8 +111,15 @@ export default { }, datasourceList: { type: Array + }, + quoteList: { + type: Array } }, + mounted() { + // 在组件挂载后调用方法 + this.appendNamesToExtractObject(); + }, data() { return { activeName: "sql", @@ -153,6 +160,24 @@ export default { } }, methods: { + appendNamesToExtractObject() { + if (this.quoteList) { + this.quoteList.forEach(item => { + item.assignment.forEach(item2 => { + if (item2.name && !this.isDuplicate(item2.name)) { + this.extract_object.push({ + value: '${' + item2.name + '}', + label: '${' + item2.name + '}' + }); + } + }); + }); + } + }, + isDuplicate(name) { + let compareName = '${' + name + '}'; + return this.extract_object.some(obj => obj.value === compareName); + }, handleLogChange(val) { const selectedItem = this.form.testCaseResultList.find(item => item.title === val); if (selectedItem) { diff --git a/test-ui/src/views/test/case/detail/page3.vue b/test-ui/src/views/test/case/detail/page3.vue index 4e0bd56..aa4f21a 100644 --- a/test-ui/src/views/test/case/detail/page3.vue +++ b/test-ui/src/views/test/case/detail/page3.vue @@ -28,8 +28,8 @@ {{ item.requestUrl }} 删除 - - + + @@ -39,10 +39,11 @@