Merge branch 'v1.2' of https://github.com/metersphere/metersphere into v1.2
This commit is contained in:
commit
02d5aa8bc7
|
@ -157,7 +157,7 @@ public class JmeterDocumentParser {
|
||||||
u += k + "=" + ScriptEngineUtils.calculate(v);
|
u += k + "=" + ScriptEngineUtils.calculate(v);
|
||||||
return u;
|
return u;
|
||||||
});
|
});
|
||||||
ele.setTextContent(url + params);
|
ele.setTextContent(url + ((params != null && !params.equals("?")) ? params : ""));
|
||||||
break;
|
break;
|
||||||
case "Argument.value":
|
case "Argument.value":
|
||||||
String textContent = ele.getTextContent();
|
String textContent = ele.getTextContent();
|
||||||
|
|
|
@ -224,6 +224,10 @@ public class IssuesService {
|
||||||
String account = object.getString("account");
|
String account = object.getString("account");
|
||||||
String password = object.getString("password");
|
String password = object.getString("password");
|
||||||
String url = object.getString("url");
|
String url = object.getString("url");
|
||||||
|
String issuetype = object.getString("issuetype");
|
||||||
|
if (StringUtils.isBlank(issuetype)) {
|
||||||
|
MSException.throwException("Jira 问题类型为空");
|
||||||
|
}
|
||||||
String auth = EncryptUtils.base64Encoding(account + ":" + password);
|
String auth = EncryptUtils.base64Encoding(account + ":" + password);
|
||||||
|
|
||||||
String testCaseId = issuesRequest.getTestCaseId();
|
String testCaseId = issuesRequest.getTestCaseId();
|
||||||
|
@ -252,8 +256,7 @@ public class IssuesService {
|
||||||
" \"summary\":\"" + issuesRequest.getTitle() + "\",\n" +
|
" \"summary\":\"" + issuesRequest.getTitle() + "\",\n" +
|
||||||
" \"description\": " + JSON.toJSONString(desc) + ",\n" +
|
" \"description\": " + JSON.toJSONString(desc) + ",\n" +
|
||||||
" \"issuetype\":{\n" +
|
" \"issuetype\":{\n" +
|
||||||
" \"id\":\"10009\",\n" +
|
" \"name\":\"" + issuetype + "\"\n" +
|
||||||
" \"name\":\"Defect\"\n" +
|
|
||||||
" }\n" +
|
" }\n" +
|
||||||
" }\n" +
|
" }\n" +
|
||||||
"}";
|
"}";
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
<el-table border :data="tableData" class="adjust-table table-content" @sort-change="sort"
|
<el-table border :data="tableData" class="adjust-table table-content" @sort-change="sort"
|
||||||
@row-click="handleView"
|
@row-click="handleView"
|
||||||
@filter-change="filter" @select-all="handleSelectAll" @select="selectionChange">
|
@filter-change="filter" @select-all="select" @select="select">
|
||||||
<el-table-column
|
<el-table-column
|
||||||
type="selection"></el-table-column>
|
type="selection"></el-table-column>
|
||||||
<el-table-column prop="name" :label="$t('commons.name')" width="250" show-overflow-tooltip>
|
<el-table-column prop="name" :label="$t('commons.name')" width="250" show-overflow-tooltip>
|
||||||
|
@ -127,18 +127,7 @@
|
||||||
create() {
|
create() {
|
||||||
this.$router.push('/api/test/create');
|
this.$router.push('/api/test/create');
|
||||||
},
|
},
|
||||||
|
select(selection) {
|
||||||
handleSelectAll(selection) {
|
|
||||||
this.selectIds.clear()
|
|
||||||
this.selectProjectNames.clear()
|
|
||||||
this.selectProjectId.clear()
|
|
||||||
selection.forEach(s => {
|
|
||||||
this.selectIds.add(s.id)
|
|
||||||
this.selectProjectNames.add(s.projectName)
|
|
||||||
this.selectProjectId.add(s.projectId)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
selectionChange(selection) {
|
|
||||||
this.selectIds.clear()
|
this.selectIds.clear()
|
||||||
this.selectProjectNames.clear()
|
this.selectProjectNames.clear()
|
||||||
this.selectProjectId.clear()
|
this.selectProjectId.clear()
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
import MsApiScenarioConfig from "./components/ApiScenarioConfig";
|
import MsApiScenarioConfig from "./components/ApiScenarioConfig";
|
||||||
import MsApiReportStatus from "../report/ApiReportStatus";
|
import MsApiReportStatus from "../report/ApiReportStatus";
|
||||||
import MsApiReportDialog from "./ApiReportDialog";
|
import MsApiReportDialog from "./ApiReportDialog";
|
||||||
import {getUUID} from "../../../../common/js/utils";
|
import {getUUID} from "@/common/js/utils";
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -95,13 +95,12 @@
|
||||||
},
|
},
|
||||||
checkName(callback) {
|
checkName(callback) {
|
||||||
for (let i of this.selectProjectId) {
|
for (let i of this.selectProjectId) {
|
||||||
this.result = this.$post('/api/checkName', {name: this.ruleForm.testName, projectId: i}, response => {
|
this.result = this.$post('/api/checkName', {name: this.ruleForm.testName, projectId: i}, () => {
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_getEnvironmentAndRunTest: function (item) {
|
_getEnvironmentAndRunTest: function (item) {
|
||||||
let count = 0;
|
|
||||||
this.result = this.$get('/api/environment/list/' + item.projectId, response => {
|
this.result = this.$get('/api/environment/list/' + item.projectId, response => {
|
||||||
let environments = response.data;
|
let environments = response.data;
|
||||||
let environmentMap = new Map();
|
let environmentMap = new Map();
|
||||||
|
@ -131,7 +130,6 @@
|
||||||
scenarioDefinition: JSON.parse(item.scenarioDefinition),
|
scenarioDefinition: JSON.parse(item.scenarioDefinition),
|
||||||
schedule: {},
|
schedule: {},
|
||||||
});
|
});
|
||||||
console.log(test)
|
|
||||||
this.test = this.test || test;
|
this.test = this.test || test;
|
||||||
if (this.tests.length > 1) {
|
if (this.tests.length > 1) {
|
||||||
this.test.scenarioDefinition = this.test.scenarioDefinition.concat(test.scenarioDefinition);
|
this.test.scenarioDefinition = this.test.scenarioDefinition.concat(test.scenarioDefinition);
|
||||||
|
|
|
@ -142,6 +142,10 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
initReportTimeInfo() {
|
initReportTimeInfo() {
|
||||||
|
if (this.status === 'Starting') {
|
||||||
|
this.clearData();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.reportId) {
|
if (this.reportId) {
|
||||||
this.result = this.$get("/performance/report/content/report_time/" + this.reportId)
|
this.result = this.$get("/performance/report/content/report_time/" + this.reportId)
|
||||||
.then(res => {
|
.then(res => {
|
||||||
|
@ -155,7 +159,7 @@ export default {
|
||||||
}
|
}
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.clearData();
|
this.clearData();
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
initWebSocket() {
|
initWebSocket() {
|
||||||
|
@ -226,10 +230,15 @@ export default {
|
||||||
onMessage(e) {
|
onMessage(e) {
|
||||||
this.$set(this.report, "refresh", e.data); // 触发刷新
|
this.$set(this.report, "refresh", e.data); // 触发刷新
|
||||||
this.$set(this.report, "status", 'Running');
|
this.$set(this.report, "status", 'Running');
|
||||||
|
this.status = 'Running';
|
||||||
this.initReportTimeInfo();
|
this.initReportTimeInfo();
|
||||||
window.console.log('receive a message:', e.data);
|
window.console.log('receive a message:', e.data);
|
||||||
},
|
},
|
||||||
onClose(e) {
|
onClose(e) {
|
||||||
|
if (e.code === 1005) {
|
||||||
|
// 强制删除之后关闭socket,不用刷新report
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.$set(this.report, "refresh", Math.random()); // 触发刷新
|
this.$set(this.report, "refresh", Math.random()); // 触发刷新
|
||||||
this.$set(this.report, "status", 'Completed');
|
this.$set(this.report, "status", 'Completed');
|
||||||
this.initReportTimeInfo();
|
this.initReportTimeInfo();
|
||||||
|
@ -262,9 +271,6 @@ export default {
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
|
||||||
this.websocket.close() //离开路由之后断开websocket连接
|
|
||||||
},
|
|
||||||
watch: {
|
watch: {
|
||||||
'$route'(to) {
|
'$route'(to) {
|
||||||
if (to.name === "perReportView") {
|
if (to.name === "perReportView") {
|
||||||
|
@ -295,6 +301,9 @@ export default {
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.log("close socket.");
|
||||||
|
this.websocket.close() //离开路由之后断开websocket连接
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,9 @@
|
||||||
<el-form-item :label="$t('organization.integration.jira_url')" prop="url" v-if="platform === 'Jira'">
|
<el-form-item :label="$t('organization.integration.jira_url')" prop="url" v-if="platform === 'Jira'">
|
||||||
<el-input v-model="form.url" :placeholder="$t('organization.integration.input_jira_url')"/>
|
<el-input v-model="form.url" :placeholder="$t('organization.integration.input_jira_url')"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item :label="$t('organization.integration.jira_issuetype')" prop="issuetype" v-if="platform === 'Jira'">
|
||||||
|
<el-input v-model="form.issuetype" :placeholder="$t('organization.integration.input_jira_issuetype')"/>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -43,10 +46,13 @@
|
||||||
<div class="defect-tip">
|
<div class="defect-tip">
|
||||||
<div>{{$t('organization.integration.use_tip')}}</div>
|
<div>{{$t('organization.integration.use_tip')}}</div>
|
||||||
<div>
|
<div>
|
||||||
1. {{$t('organization.integration.use_tip_one')}}
|
1. {{$t('organization.integration.use_tip_tapd')}}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
2. {{$t('organization.integration.use_tip_two')}}
|
2. {{$t('organization.integration.use_tip_jira')}}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
3. {{$t('organization.integration.use_tip_two')}}
|
||||||
<router-link to="/track/project/all" style="margin-left: 5px">
|
<router-link to="/track/project/all" style="margin-left: 5px">
|
||||||
{{$t('organization.integration.link_the_project_now')}}
|
{{$t('organization.integration.link_the_project_now')}}
|
||||||
</router-link>
|
</router-link>
|
||||||
|
@ -85,6 +91,11 @@
|
||||||
required: true,
|
required: true,
|
||||||
message: this.$t('organization.integration.input_jira_url'),
|
message: this.$t('organization.integration.input_jira_url'),
|
||||||
trigger: ['change', 'blur']
|
trigger: ['change', 'blur']
|
||||||
|
},
|
||||||
|
issuetype: {
|
||||||
|
required: true,
|
||||||
|
message: this.$t('organization.integration.input_jira_issuetype'),
|
||||||
|
trigger: ['change', 'blur']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -105,6 +116,7 @@
|
||||||
this.$set(this.form, 'account', config.account);
|
this.$set(this.form, 'account', config.account);
|
||||||
this.$set(this.form, 'password', config.password);
|
this.$set(this.form, 'password', config.password);
|
||||||
this.$set(this.form, 'url', config.url);
|
this.$set(this.form, 'url', config.url);
|
||||||
|
this.$set(this.form, 'issuetype', config.issuetype);
|
||||||
} else {
|
} else {
|
||||||
this.clear();
|
this.clear();
|
||||||
}
|
}
|
||||||
|
@ -153,7 +165,8 @@
|
||||||
let auth = {
|
let auth = {
|
||||||
account: this.form.account,
|
account: this.form.account,
|
||||||
password: this.form.password,
|
password: this.form.password,
|
||||||
url: this.form.url
|
url: this.form.url,
|
||||||
|
issuetype: this.form.issuetype
|
||||||
};
|
};
|
||||||
param.organizationId = getCurrentUser().lastOrganizationId;
|
param.organizationId = getCurrentUser().lastOrganizationId;
|
||||||
param.platform = this.platform;
|
param.platform = this.platform;
|
||||||
|
@ -188,6 +201,7 @@
|
||||||
this.$set(this.form, 'account', config.account);
|
this.$set(this.form, 'account', config.account);
|
||||||
this.$set(this.form, 'password', config.password);
|
this.$set(this.form, 'password', config.password);
|
||||||
this.$set(this.form, 'url', config.url);
|
this.$set(this.form, 'url', config.url);
|
||||||
|
this.$set(this.form, 'issuetype', config.issuetype);
|
||||||
} else {
|
} else {
|
||||||
this.clear();
|
this.clear();
|
||||||
}
|
}
|
||||||
|
@ -197,6 +211,7 @@
|
||||||
this.$set(this.form, 'account', '');
|
this.$set(this.form, 'account', '');
|
||||||
this.$set(this.form, 'password', '');
|
this.$set(this.form, 'password', '');
|
||||||
this.$set(this.form, 'url', '');
|
this.$set(this.form, 'url', '');
|
||||||
|
this.$set(this.form, 'issuetype', '');
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.form.clearValidate();
|
this.$refs.form.clearValidate();
|
||||||
});
|
});
|
||||||
|
|
|
@ -186,11 +186,14 @@ export default {
|
||||||
api_account: 'API account',
|
api_account: 'API account',
|
||||||
api_password: 'API password',
|
api_password: 'API password',
|
||||||
jira_url: 'JIRA url',
|
jira_url: 'JIRA url',
|
||||||
|
jira_issuetype: 'JIRA issuetype',
|
||||||
input_api_account: 'please enter account',
|
input_api_account: 'please enter account',
|
||||||
input_api_password: 'Please enter password',
|
input_api_password: 'Please enter password',
|
||||||
input_jira_url: 'Please enter Jira address, for example: https://metersphere.atlassian.net/',
|
input_jira_url: 'Please enter Jira address, for example: https://metersphere.atlassian.net/',
|
||||||
|
input_jira_issuetype: 'Please enter the question type',
|
||||||
use_tip: 'Usage guidelines:',
|
use_tip: 'Usage guidelines:',
|
||||||
use_tip_one: 'Basic Auth account information is queried in "Company Management-Security and Integration-Open Platform"',
|
use_tip_tapd: 'Basic Auth account information is queried in "Company Management-Security and Integration-Open Platform"',
|
||||||
|
use_tip_jira: 'Jira software server authentication information is account password, Jira software cloud authentication information is account + token (account settings-security-create API token)',
|
||||||
use_tip_two: 'After saving the Basic Auth account information, you need to manually associate the ID/key in the Metersphere project',
|
use_tip_two: 'After saving the Basic Auth account information, you need to manually associate the ID/key in the Metersphere project',
|
||||||
link_the_project_now: 'Link the project now',
|
link_the_project_now: 'Link the project now',
|
||||||
cancel_edit: 'Cancel edit',
|
cancel_edit: 'Cancel edit',
|
||||||
|
|
|
@ -187,11 +187,14 @@ export default {
|
||||||
api_account: 'API 账号',
|
api_account: 'API 账号',
|
||||||
api_password: 'API 口令',
|
api_password: 'API 口令',
|
||||||
jira_url: 'JIRA 地址',
|
jira_url: 'JIRA 地址',
|
||||||
|
jira_issuetype: '问题类型',
|
||||||
input_api_account: '请输入账号',
|
input_api_account: '请输入账号',
|
||||||
input_api_password: '请输入口令',
|
input_api_password: '请输入口令',
|
||||||
input_jira_url: '请输入Jira地址,例:https://metersphere.atlassian.net/',
|
input_jira_url: '请输入Jira地址,例:https://metersphere.atlassian.net/',
|
||||||
|
input_jira_issuetype: '请输入问题类型',
|
||||||
use_tip: '使用指引:',
|
use_tip: '使用指引:',
|
||||||
use_tip_one: 'Basic Auth 账号信息在"公司管理-安全与集成-开放平台"中查询',
|
use_tip_tapd: 'Tapd Basic Auth 账号信息在"公司管理-安全与集成-开放平台"中查询',
|
||||||
|
use_tip_jira: 'Jira software server 认证信息为 账号密码,Jira software cloud 认证信息为 账号+令牌(账户设置-安全-创建API令牌)',
|
||||||
use_tip_two: '保存 Basic Auth 账号信息后,需要在 Metersphere 项目中手动关联 ID/key',
|
use_tip_two: '保存 Basic Auth 账号信息后,需要在 Metersphere 项目中手动关联 ID/key',
|
||||||
link_the_project_now: '马上关联项目',
|
link_the_project_now: '马上关联项目',
|
||||||
cancel_edit: '取消编辑',
|
cancel_edit: '取消编辑',
|
||||||
|
|
|
@ -185,11 +185,14 @@ export default {
|
||||||
api_account: 'API 賬號',
|
api_account: 'API 賬號',
|
||||||
api_password: 'API 口令',
|
api_password: 'API 口令',
|
||||||
jira_url: 'JIRA 地址',
|
jira_url: 'JIRA 地址',
|
||||||
|
jira_issuetype: '問題類型',
|
||||||
input_api_account: '請輸入賬號',
|
input_api_account: '請輸入賬號',
|
||||||
input_api_password: '請輸入口令',
|
input_api_password: '請輸入口令',
|
||||||
input_jira_url: '請輸入Jira地址,例:https://metersphere.atlassian.net/',
|
input_jira_url: '請輸入Jira地址,例:https://metersphere.atlassian.net/',
|
||||||
|
input_jira_issuetype: '請輸入問題類型',
|
||||||
use_tip: '使用指引:',
|
use_tip: '使用指引:',
|
||||||
use_tip_one: 'Basic Auth 賬號信息在"公司管理-安全與集成-開放平台"中查詢',
|
use_tip_tapd: 'Basic Auth 賬號信息在"公司管理-安全與集成-開放平台"中查詢',
|
||||||
|
use_tip_jira: 'Jira software server 認證信息為 賬號密碼,Jira software cloud 認證信息為 賬號+令牌(賬戶設置-安全-創建API令牌)',
|
||||||
use_tip_two: '保存 Basic Auth 賬號信息後,需要在 Metersphere 項目中手動關聯 ID/key',
|
use_tip_two: '保存 Basic Auth 賬號信息後,需要在 Metersphere 項目中手動關聯 ID/key',
|
||||||
link_the_project_now: '馬上關聯項目',
|
link_the_project_now: '馬上關聯項目',
|
||||||
cancel_edit: '取消編輯',
|
cancel_edit: '取消編輯',
|
||||||
|
|
Loading…
Reference in New Issue