feat(场景自动化,测试用例,): 测试用例、 接口定义、场景自动化 增加“默认模块” 创建测试用例、接口定义、场景时 所属模块默认值为“默认模块”
This commit is contained in:
parent
e2ead6e002
commit
d3fccb25d6
|
@ -234,6 +234,10 @@ public class ApiAutomationService {
|
|||
} else {
|
||||
scenario.setUserId(request.getUserId());
|
||||
}
|
||||
if (StringUtils.isEmpty(request.getApiScenarioModuleId()) || StringUtils.isEmpty(request.getModulePath())) {
|
||||
scenario.setApiScenarioModuleId("root");
|
||||
scenario.setModulePath("/默认模块");
|
||||
}
|
||||
return scenario;
|
||||
}
|
||||
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
let label = this.$t('api_test.automation.add_scenario');
|
||||
let name = getUUID().substring(0, 8);
|
||||
this.activeName = name;
|
||||
this.tabs.push({label: label, name: name, currentScenario: {apiScenarioModuleId: "", id: getUUID()}});
|
||||
this.tabs.push({label: label, name: name, currentScenario: {apiScenarioModuleId: "root", id: getUUID()}});
|
||||
}
|
||||
if (tab.name === 'edit') {
|
||||
let label = this.$t('api_test.automation.add_scenario');
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
@refresh="refresh"
|
||||
ref="basisScenario"/>
|
||||
|
||||
<api-import ref="apiImport" :moduleOptions="moduleOptions" @refreshAll="$emit('refreshAll')"/>
|
||||
<api-import ref="apiImport" :moduleOptions="extendTreeNodes" @refreshAll="$emit('refreshAll')"/>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
@ -38,7 +38,7 @@
|
|||
import SelectMenu from "../../../track/common/SelectMenu";
|
||||
import MsAddBasisScenario from "@/business/components/api/automation/scenario/AddBasisScenario";
|
||||
import MsNodeTree from "../../../track/common/NodeTree";
|
||||
import {buildNodePath} from "../../definition/model/NodeTree";
|
||||
import {buildNodePath, buildTree} from "../../definition/model/NodeTree";
|
||||
import ModuleTrashButton from "../../definition/components/module/ModuleTrashButton";
|
||||
import ApiImport from "./common/ScenarioImport";
|
||||
import MsSearchBar from "@/business/components/common/components/search/MsSearchBar";
|
||||
|
@ -82,9 +82,10 @@
|
|||
trashEnable: false
|
||||
},
|
||||
data: [],
|
||||
extendTreeNodes: [],
|
||||
currentModule: undefined,
|
||||
moduleOptions: [],
|
||||
operators: [
|
||||
operators: [
|
||||
{
|
||||
label: this.$t('api_test.automation.add_scenario'),
|
||||
callback: this.addScenario
|
||||
|
@ -97,7 +98,7 @@
|
|||
label: this.$t('report.export'),
|
||||
children: [
|
||||
{
|
||||
label: this.$t('report.export_to_ms_format') ,
|
||||
label: this.$t('report.export_to_ms_format'),
|
||||
callback: () => {
|
||||
this.$emit('exportAPI');
|
||||
}
|
||||
|
@ -187,11 +188,17 @@
|
|||
this.result = this.$get(url, response => {
|
||||
if (response.data != undefined && response.data != null) {
|
||||
this.data = response.data;
|
||||
let moduleOptions = [];
|
||||
this.data.forEach(node => {
|
||||
buildNodePath(node, {path: ''}, moduleOptions);
|
||||
this.extendTreeNodes = [];
|
||||
this.extendTreeNodes.unshift({
|
||||
"id": "root",
|
||||
"name": this.$t('commons.module_title'),
|
||||
"level": 0,
|
||||
"children": this.data,
|
||||
});
|
||||
this.$emit('setModuleOptions', moduleOptions);
|
||||
this.extendTreeNodes.forEach(node => {
|
||||
buildTree(node, {path: ''});
|
||||
});
|
||||
this.$emit('setModuleOptions', this.extendTreeNodes);
|
||||
this.$emit('setNodeTree', this.data);
|
||||
if (this.$refs.nodeTree) {
|
||||
this.$refs.nodeTree.filter(this.condition.filterText);
|
||||
|
|
|
@ -22,9 +22,7 @@
|
|||
</el-col>
|
||||
<el-col :span="7">
|
||||
<el-form-item :label="$t('test_track.module.module')" prop="apiScenarioModuleId">
|
||||
<el-select class="ms-scenario-input" size="small" v-model="currentScenario.apiScenarioModuleId">
|
||||
<el-option v-for="item in moduleOptions" :key="item.id" :label="item.path" :value="item.id"/>
|
||||
</el-select>
|
||||
<ms-select-tree size="small" :data="moduleOptions" :defaultKey="currentScenario.apiScenarioModuleId" @getValue="setModule" :obj="moduleObj" clearable checkStrictly/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="7">
|
||||
|
@ -244,6 +242,7 @@
|
|||
import MaximizeScenario from "./maximize/MaximizeScenario";
|
||||
import ScenarioHeader from "./maximize/ScenarioHeader";
|
||||
import MsDrawer from "../../../common/components/MsDrawer";
|
||||
import MsSelectTree from "../../../common/select-tree/SelectTree";
|
||||
|
||||
let jsonPath = require('jsonpath');
|
||||
export default {
|
||||
|
@ -266,7 +265,8 @@
|
|||
EnvPopover,
|
||||
MaximizeScenario,
|
||||
ScenarioHeader,
|
||||
MsDrawer
|
||||
MsDrawer,
|
||||
MsSelectTree
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -274,6 +274,10 @@
|
|||
label: "label",
|
||||
children: "hashTree"
|
||||
},
|
||||
moduleObj: {
|
||||
id: 'id',
|
||||
label: 'name',
|
||||
},
|
||||
rules: {
|
||||
name: [
|
||||
{required: true, message: this.$t('test_track.case.input_name'), trigger: 'blur'},
|
||||
|
@ -450,6 +454,10 @@
|
|||
},
|
||||
},
|
||||
methods: {
|
||||
setModule(id,data) {
|
||||
this.currentScenario.apiScenarioModuleId = id;
|
||||
this.currentScenario.modulePath = data.path;
|
||||
},
|
||||
setHideBtn() {
|
||||
this.isBtnHide = false;
|
||||
},
|
||||
|
@ -905,15 +913,6 @@
|
|||
this.expandedNode.splice(this.expandedNode.indexOf(data.resourceId), 1);
|
||||
}
|
||||
},
|
||||
getPath(id) {
|
||||
if (id === null) {
|
||||
return null;
|
||||
}
|
||||
let path = this.moduleOptions.filter(function (item) {
|
||||
return item.id === id ? item.path : "";
|
||||
});
|
||||
return path[0].path;
|
||||
},
|
||||
setFiles(item, bodyUploadFiles, obj) {
|
||||
if (item.body) {
|
||||
if (item.body.kvs) {
|
||||
|
@ -1071,7 +1070,6 @@
|
|||
setParameter() {
|
||||
this.currentScenario.stepTotal = this.scenarioDefinition.length;
|
||||
this.currentScenario.projectId = this.projectId;
|
||||
this.currentScenario.modulePath = this.getPath(this.currentScenario.apiScenarioModuleId);
|
||||
// 构建一个场景对象 方便引用处理
|
||||
let scenario = {
|
||||
id: this.currentScenario.id,
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('test_track.module.module')" prop="moduleId">
|
||||
<ms-select-tree size="small" :data="moduleOptions" @getValue="setModule" :obj="moduleObj" clearable checkStrictly/>
|
||||
<ms-select-tree size="small" :data="moduleOptions" :defaultKey="httpForm.moduleId" @getValue="setModule" :obj="moduleObj" clearable checkStrictly/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="$t('commons.description')" prop="description" style="margin-bottom: 29px">
|
||||
|
@ -64,6 +64,7 @@
|
|||
import {createComponent, Request} from "../../../definition/components/jmeter/components";
|
||||
import {getUUID} from "@/common/js/utils";
|
||||
import MsSelectTree from "@/business/components/common/select-tree/SelectTree";
|
||||
import {buildTree} from "../../../definition/model/NodeTree";
|
||||
|
||||
|
||||
export default {
|
||||
|
@ -83,7 +84,7 @@
|
|||
callback();
|
||||
};
|
||||
return {
|
||||
httpForm: {environmentId: ""},
|
||||
httpForm: {environmentId: "", moduleId: "root"},
|
||||
moduleOptions: [],
|
||||
httpVisible: false,
|
||||
currentModule: {},
|
||||
|
@ -250,13 +251,23 @@
|
|||
let url = "/api/module/list/" + getCurrentProjectID() + "/" + data.protocol;
|
||||
this.result = this.$get(url, response => {
|
||||
if (response.data != undefined && response.data != null) {
|
||||
this.moduleOptions = response.data;
|
||||
let data = response.data;
|
||||
this.moduleOptions = [];
|
||||
this.moduleOptions.unshift({
|
||||
"id": "root",
|
||||
"name": this.$t('commons.module_title'),
|
||||
"level": 0,
|
||||
"children": data,
|
||||
});
|
||||
this.moduleOptions.forEach(node => {
|
||||
buildTree(node, {path: ''});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
setModule(id) {
|
||||
setModule(id, data) {
|
||||
this.httpForm.moduleId = id;
|
||||
//this.reload();
|
||||
this.httpForm.modulePath = data.path;
|
||||
},
|
||||
reload() {
|
||||
this.loading = true
|
||||
|
@ -271,7 +282,7 @@
|
|||
data.protocol = "DUBBO";
|
||||
}
|
||||
data.id = getUUID();
|
||||
this.httpForm = {id: data.id, name: data.name, protocol: data.protocol, path: data.path, method: api.method, userId: getCurrentUser().id, request: data};
|
||||
this.httpForm = {id: data.id, name: data.name, protocol: data.protocol, path: data.path, method: api.method, userId: getCurrentUser().id, request: data, moduleId: "root"};
|
||||
this.getMaintainerOptions();
|
||||
this.list(data);
|
||||
this.httpVisible = true;
|
||||
|
|
|
@ -22,11 +22,9 @@
|
|||
<el-row>
|
||||
<el-col :span="11">
|
||||
<el-form-item :label="$t('commons.import_module')">
|
||||
<el-select size="small" v-model="formData.moduleId" class="project-select" clearable>
|
||||
<el-option v-for="item in moduleOptions" :key="item.id" :label="item.path" :value="item.id"/>
|
||||
</el-select>
|
||||
<ms-select-tree size="small" :data="moduleOptions" :defaultKey="formData.moduleId" @getValue="setModule" :obj="moduleObj" clearable checkStrictly/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="!isHar" :label="$t('commons.import_mode')">
|
||||
<el-form-item v-if="!isHar" :label="$t('commons.import_mode')">
|
||||
<el-select size="small" v-model="formData.modeId" class="project-select" clearable>
|
||||
<el-option v-for="item in modeOptions" :key="item.id" :label="item.name" :value="item.id"/>
|
||||
</el-select>
|
||||
|
@ -70,16 +68,17 @@
|
|||
<script>
|
||||
import MsDialogFooter from "../../../../common/components/MsDialogFooter";
|
||||
import {listenGoBack, removeGoBackListener} from "@/common/js/utils";
|
||||
import MsSelectTree from "../../../../common/select-tree/SelectTree";
|
||||
|
||||
export default {
|
||||
name: "ScenarioImport",
|
||||
components: {MsDialogFooter},
|
||||
components: {MsDialogFooter, MsSelectTree},
|
||||
props: {
|
||||
saved: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
moduleOptions: {}
|
||||
moduleOptions: Array,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -140,7 +139,11 @@
|
|||
},
|
||||
rules: {},
|
||||
currentModule: {},
|
||||
fileList: []
|
||||
fileList: [],
|
||||
moduleObj: {
|
||||
id: 'id',
|
||||
label: 'name',
|
||||
},
|
||||
}
|
||||
},
|
||||
activated() {
|
||||
|
@ -257,7 +260,11 @@
|
|||
this.fileList = [];
|
||||
removeGoBackListener(this.close);
|
||||
this.visible = false;
|
||||
}
|
||||
},
|
||||
setModule(id, data) {
|
||||
this.formData.moduleId = id;
|
||||
this.formData.modulePath = data.path;
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -281,7 +281,7 @@
|
|||
let data = this.api;
|
||||
data.name = this.apiCase.name;
|
||||
data.moduleId = module;
|
||||
data.modulePath = '/默认模块';
|
||||
data.modulePath ="/"+ this.$t('commons.module_title');
|
||||
this.setParameters(data);
|
||||
let bodyFiles = this.getBodyUploadFiles(data);
|
||||
this.$fileUpload("/api/definition/create", null, bodyFiles, data, () => {
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
v-loading="result.loading"
|
||||
:tree-nodes="data"
|
||||
:type="isReadOnly ? 'view' : 'edit'"
|
||||
:allLabel="'默认模块'"
|
||||
@add="add"
|
||||
@edit="edit"
|
||||
@drag="drag"
|
||||
|
@ -135,7 +134,7 @@
|
|||
this.extendTreeNodes = [];
|
||||
this.extendTreeNodes.unshift({
|
||||
"id": "root",
|
||||
"name": "默认模块",
|
||||
"name": this.$t('commons.module_title'),
|
||||
"level": 0,
|
||||
"children": this.data,
|
||||
});
|
||||
|
|
|
@ -236,7 +236,9 @@
|
|||
setKey(thisKey) {
|
||||
this.$refs.tree.setCurrentKey(thisKey);
|
||||
let node = this.$refs.tree.getNode(thisKey);
|
||||
this.setData(node.data);
|
||||
if (node && node.data) {
|
||||
this.setData(node.data);
|
||||
}
|
||||
},
|
||||
//单选:设置、初始化对象
|
||||
setData(data) {
|
||||
|
@ -287,7 +289,7 @@
|
|||
},
|
||||
//下拉框关闭执行
|
||||
popoverHide() {
|
||||
this.$emit('getValue', this.returnDataKeys, this.returnDatas);
|
||||
this.$emit('getValue', this.returnDataKeys, this.returnDatas ? this.returnDatas : {});
|
||||
},
|
||||
// 多选,清空所有勾选
|
||||
clearSelectedNodes() {
|
||||
|
|
|
@ -35,20 +35,8 @@
|
|||
|
||||
<el-col :span="7">
|
||||
<el-form-item :label="$t('test_track.case.module')" :label-width="formLabelWidth" prop="module">
|
||||
<el-select
|
||||
v-model="form.module"
|
||||
:disabled="readOnly"
|
||||
:placeholder="$t('test_track.case.input_module')"
|
||||
filterable
|
||||
class="ms-case-input">
|
||||
<el-option
|
||||
v-for="item in moduleOptions"
|
||||
:key="item.id"
|
||||
:label="item.path"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<ms-select-tree :disabled="readOnly" :data="moduleOptions" :defaultKey="form.module" :obj="moduleObj"
|
||||
@getValue="setModule" clearable checkStrictly size="small" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="7">
|
||||
|
@ -292,7 +280,7 @@ import MsDialogFooter from '../../../common/components/MsDialogFooter'
|
|||
import {getCurrentUser, handleCtrlSEvent, listenGoBack, removeGoBackListener} from "@/common/js/utils";
|
||||
import {Message} from "element-ui";
|
||||
import TestCaseAttachment from "@/business/components/track/case/components/TestCaseAttachment";
|
||||
import {buildNodePath} from "../../../api/definition/model/NodeTree";
|
||||
import {buildNodePath,buildTree} from "../../../api/definition/model/NodeTree";
|
||||
import CaseComment from "@/business/components/track/case/components/CaseComment";
|
||||
import MsInputTag from "@/business/components/api/automation/scenario/MsInputTag";
|
||||
import MsPreviousNextButton from "../../../common/components/MsPreviousNextButton";
|
||||
|
@ -301,12 +289,13 @@ import TestCaseComment from "@/business/components/track/case/components/TestCas
|
|||
import ReviewCommentItem from "@/business/components/track/review/commom/ReviewCommentItem";
|
||||
import {API_STATUS, REVIEW_STATUS, TEST} from "@/business/components/api/definition/model/JsonData";
|
||||
import MsTableButton from "@/business/components/common/components/MsTableButton";
|
||||
import MsSelectTree from "../../../common/select-tree/SelectTree";
|
||||
|
||||
export default {
|
||||
name: "TestCaseEdit",
|
||||
components: {
|
||||
MsTableButton,
|
||||
|
||||
MsSelectTree,
|
||||
ReviewCommentItem,
|
||||
TestCaseComment, MsPreviousNextButton, MsInputTag, CaseComment, MsDialogFooter, TestCaseAttachment
|
||||
},
|
||||
|
@ -325,7 +314,8 @@ export default {
|
|||
dialogFormVisible: false,
|
||||
form: {
|
||||
name: '',
|
||||
module: '',
|
||||
module: 'root',
|
||||
nodePath:'',
|
||||
maintainer: getCurrentUser().id,
|
||||
priority: 'P0',
|
||||
type: '',
|
||||
|
@ -381,6 +371,10 @@ export default {
|
|||
index: 0,
|
||||
showInputTag: true,
|
||||
tableType:"",
|
||||
moduleObj: {
|
||||
id: 'id',
|
||||
label: 'name',
|
||||
},
|
||||
};
|
||||
},
|
||||
props: {
|
||||
|
@ -435,6 +429,10 @@ export default {
|
|||
this.addListener(); // 添加 ctrl s 监听
|
||||
},
|
||||
methods: {
|
||||
setModule(id,data) {
|
||||
this.form.module = id;
|
||||
this.form.nodePath = data.path;
|
||||
},
|
||||
clearInput() {
|
||||
//this.$refs['cascade'].panel.clearCheckedNodes()
|
||||
},
|
||||
|
@ -761,11 +759,6 @@ export default {
|
|||
Object.assign(param, this.form);
|
||||
param.steps = JSON.stringify(this.form.steps);
|
||||
param.nodeId = this.form.module;
|
||||
this.moduleOptions.forEach(item => {
|
||||
if (this.form.module === item.id) {
|
||||
param.nodePath = item.path;
|
||||
}
|
||||
});
|
||||
if (this.projectId) {
|
||||
param.projectId = this.projectId;
|
||||
}
|
||||
|
@ -838,11 +831,16 @@ export default {
|
|||
this.getTestOptions()
|
||||
},
|
||||
getModuleOptions() {
|
||||
let moduleOptions = [];
|
||||
this.treeNodes.forEach(node => {
|
||||
buildNodePath(node, {path: ''}, moduleOptions);
|
||||
this.moduleOptions = [];
|
||||
this.moduleOptions.unshift({
|
||||
"id": "root",
|
||||
"name": this.$t('commons.module_title'),
|
||||
"level": 0,
|
||||
"children": this.treeNodes,
|
||||
});
|
||||
this.moduleOptions.forEach(node => {
|
||||
buildTree(node, {path: ''});
|
||||
});
|
||||
this.moduleOptions = moduleOptions;
|
||||
},
|
||||
getMaintainerOptions() {
|
||||
let workspaceId = localStorage.getItem(WORKSPACE_ID);
|
||||
|
|
|
@ -92,7 +92,7 @@ export default {
|
|||
allLabel: {
|
||||
type: String,
|
||||
default() {
|
||||
return this.$t("commons.all_label.case");
|
||||
return this.$t('commons.module_title');
|
||||
}
|
||||
},
|
||||
nameLimit: {
|
||||
|
|
|
@ -5,6 +5,7 @@ export default {
|
|||
pass_rate: 'Pass rate',
|
||||
execution_times: 'Execution times',
|
||||
cover: 'Cover',
|
||||
module_title: 'Default module',
|
||||
not_cover: 'Not Cover',
|
||||
import: 'Import',
|
||||
import_success: 'Import success',
|
||||
|
|
|
@ -5,6 +5,7 @@ export default {
|
|||
pass_rate: '通过率',
|
||||
execution_times: '执行次数',
|
||||
cover: '覆盖',
|
||||
module_title: '默认模块',
|
||||
not_cover: '不覆盖',
|
||||
import: '导入',
|
||||
import_success: '导入成功',
|
||||
|
|
|
@ -5,6 +5,7 @@ export default {
|
|||
pass_rate: '通過率',
|
||||
execution_times: '執行次數',
|
||||
cover: '覆蓋',
|
||||
module_title: '默認模塊',
|
||||
not_cover: '不覆蓋',
|
||||
import: '導入',
|
||||
import_success: '導入成功',
|
||||
|
|
Loading…
Reference in New Issue