Merge remote-tracking branch 'origin/v1.1' into v1.1
This commit is contained in:
commit
9ca7fdf576
|
@ -34,7 +34,7 @@ public class ApiTestEnvironmentService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(ApiTestEnvironmentWithBLOBs apiTestEnvironment) {
|
public void update(ApiTestEnvironmentWithBLOBs apiTestEnvironment) {
|
||||||
apiTestEnvironmentMapper.updateByPrimaryKey(apiTestEnvironment);
|
apiTestEnvironmentMapper.updateByPrimaryKeyWithBLOBs(apiTestEnvironment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String add(ApiTestEnvironmentWithBLOBs apiTestEnvironmentWithBLOBs) {
|
public String add(ApiTestEnvironmentWithBLOBs apiTestEnvironmentWithBLOBs) {
|
||||||
|
|
|
@ -58,14 +58,32 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
copyEnvironment(environment) {
|
copyEnvironment(environment) {
|
||||||
|
if (!environment.id) {
|
||||||
|
this.$warning(this.$t('commons.please_save'))
|
||||||
|
return;
|
||||||
|
}
|
||||||
let newEnvironment = {};
|
let newEnvironment = {};
|
||||||
Object.assign(newEnvironment, environment);
|
Object.assign(newEnvironment, environment);
|
||||||
newEnvironment.id = null;
|
newEnvironment.id = null;
|
||||||
newEnvironment.name = this.getNoRepeatName(newEnvironment.name);
|
newEnvironment.name = this.getNoRepeatName(newEnvironment.name);
|
||||||
|
if (!this.validateEnvironment(newEnvironment)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.$refs.environmentEdit._save(newEnvironment);
|
this.$refs.environmentEdit._save(newEnvironment);
|
||||||
this.environments.push(newEnvironment);
|
this.environments.push(newEnvironment);
|
||||||
this.$refs.environmentItems.itemSelected(this.environments.length -1 , newEnvironment);
|
this.$refs.environmentItems.itemSelected(this.environments.length -1 , newEnvironment);
|
||||||
},
|
},
|
||||||
|
validateEnvironment(environment) {
|
||||||
|
if (!environment.name || !!environment.name && environment.name.length > 64) {
|
||||||
|
this.$error(this.$t('commons.input_limit', [1, 64]));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!this.$refs.environmentEdit.validateSocket(environment.socket)) {
|
||||||
|
this.$error(this.$t('commons.formatErr'));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
getNoRepeatName(name) {
|
getNoRepeatName(name) {
|
||||||
for (let i in this.environments) {
|
for (let i in this.environments) {
|
||||||
if (this.environments[i].name === name) {
|
if (this.environments[i].name === name) {
|
||||||
|
@ -97,14 +115,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getEnvironment(environment) {
|
getEnvironment(environment) {
|
||||||
let item = environment;
|
|
||||||
if (!(environment.variables instanceof Array)) {
|
if (!(environment.variables instanceof Array)) {
|
||||||
item.variables = JSON.parse(environment.variables);
|
environment.variables = JSON.parse(environment.variables);
|
||||||
}
|
}
|
||||||
if (!(environment.headers instanceof Array)) {
|
if (!(environment.headers instanceof Array)) {
|
||||||
item.headers = JSON.parse(environment.headers);
|
environment.headers = JSON.parse(environment.headers);
|
||||||
}
|
}
|
||||||
this.currentEnvironment = item;
|
this.currentEnvironment = environment;
|
||||||
},
|
},
|
||||||
getDefaultEnvironment() {
|
getDefaultEnvironment() {
|
||||||
return {variables: [{}], headers: [{}], protocol: 'https', projectId: this.projectId};
|
return {variables: [{}], headers: [{}], protocol: 'https', projectId: this.projectId};
|
||||||
|
|
|
@ -100,8 +100,12 @@
|
||||||
buildParam(environment) {
|
buildParam(environment) {
|
||||||
let param = {};
|
let param = {};
|
||||||
Object.assign(param, environment);
|
Object.assign(param, environment);
|
||||||
param.variables = JSON.stringify(environment.variables);
|
if (!(environment.variables instanceof String)) {
|
||||||
param.headers = JSON.stringify(environment.headers);
|
param.variables = JSON.stringify(environment.variables);
|
||||||
|
}
|
||||||
|
if (!(environment.headers instanceof String)) {
|
||||||
|
param.headers = JSON.stringify(environment.headers);
|
||||||
|
}
|
||||||
return param;
|
return param;
|
||||||
},
|
},
|
||||||
validateSocket(socket) {
|
validateSocket(socket) {
|
||||||
|
|
|
@ -47,20 +47,21 @@
|
||||||
<el-divider direction="vertical"/>
|
<el-divider direction="vertical"/>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item prop="file" class="api-upload">
|
|
||||||
<el-upload
|
<el-upload
|
||||||
|
class="api-upload"
|
||||||
drag
|
drag
|
||||||
action=""
|
action=""
|
||||||
:http-request="upload"
|
:http-request="upload"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:beforeUpload="uploadValidate"
|
:beforeUpload="uploadValidate"
|
||||||
|
:on-remove="handleRemove"
|
||||||
:file-list="fileList"
|
:file-list="fileList"
|
||||||
|
:on-exceed="handleExceed"
|
||||||
multiple>
|
multiple>
|
||||||
<i class="el-icon-upload"></i>
|
<i class="el-icon-upload"></i>
|
||||||
<div class="el-upload__text" v-html="$t('load_test.upload_tips')"></div>
|
<div class="el-upload__text" v-html="$t('load_test.upload_tips')"></div>
|
||||||
<div class="el-upload__tip" slot="tip">{{$t('api_test.api_import.file_size_limit')}}</div>
|
<div class="el-upload__tip" slot="tip">{{$t('api_test.api_import.file_size_limit')}}</div>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
@ -133,15 +134,12 @@
|
||||||
],
|
],
|
||||||
projectId: [
|
projectId: [
|
||||||
{required: true, message: this.$t('api_test.select_project'), trigger: 'blur'},
|
{required: true, message: this.$t('api_test.select_project'), trigger: 'blur'},
|
||||||
],
|
]
|
||||||
file: [
|
|
||||||
{required: true, message: this.$t('commons.please_upload'), trigger: 'blur'},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
fileList: []
|
fileList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
activated() {
|
||||||
this.selectedPlatform = this.platforms[0];
|
this.selectedPlatform = this.platforms[0];
|
||||||
this.getProjects();
|
this.getProjects();
|
||||||
},
|
},
|
||||||
|
@ -164,7 +162,12 @@
|
||||||
},
|
},
|
||||||
upload(file) {
|
upload(file) {
|
||||||
this.formData.file = file.file;
|
this.formData.file = file.file;
|
||||||
this.fileList.push(file.file);
|
},
|
||||||
|
handleExceed(files, fileList) {
|
||||||
|
this.$warning(this.$t('test_track.case.import.upload_limit_count'));
|
||||||
|
},
|
||||||
|
handleRemove(file, fileList) {
|
||||||
|
this.formData.file = undefined;
|
||||||
},
|
},
|
||||||
uploadValidate(file, fileList) {
|
uploadValidate(file, fileList) {
|
||||||
let suffix = file.name.substring(file.name.lastIndexOf('.') + 1);
|
let suffix = file.name.substring(file.name.lastIndexOf('.') + 1);
|
||||||
|
@ -208,6 +211,10 @@
|
||||||
Object.assign(param, this.formData);
|
Object.assign(param, this.formData);
|
||||||
param.platform = this.selectedPlatformValue;
|
param.platform = this.selectedPlatformValue;
|
||||||
param.useEnvironment = this.useEnvironment;
|
param.useEnvironment = this.useEnvironment;
|
||||||
|
if (!this.formData.file) {
|
||||||
|
this.$warning(this.$t('commons.please_upload'));
|
||||||
|
return ;
|
||||||
|
}
|
||||||
this.result = this.$fileUpload('/api/import', param.file, param,response => {
|
this.result = this.$fileUpload('/api/import', param.file, param,response => {
|
||||||
let res = response.data;
|
let res = response.data;
|
||||||
this.$success(this.$t('test_track.case.import.success'));
|
this.$success(this.$t('test_track.case.import.success'));
|
||||||
|
@ -240,7 +247,15 @@
|
||||||
|
|
||||||
.api-upload {
|
.api-upload {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
display: inline-block;
|
margin: auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.api-upload >>> .el-upload {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.api-upload >>> .el-upload-dragger {
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-radio-group {
|
.el-radio-group {
|
||||||
|
@ -288,7 +303,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.name-input {
|
.name-input {
|
||||||
width: 195px;
|
max-width: 195px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-footer {
|
.dialog-footer {
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<crontab-result v-show="false" :ex="schedule.value" ref="crontabResult" @resultListChange="resultListChange"/>
|
<crontab-result v-show="false" :ex="schedule.value" ref="crontabResult" @resultListChange="resultListChange"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span :class="{'disable-character': !schedule.enable}"> {{$t('schedule.next_execution_time')}}:{{this.recentList.length > 0 ? this.recentList[0] : $t('schedule.not_set')}} </span>
|
<span :class="{'disable-character': !schedule.enable}"> {{$t('schedule.next_execution_time')}}:{{this.recentList.length > 0 && schedule.enable ? this.recentList[0] : $t('schedule.not_set')}} </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog width="30%" class="schedule-edit" :title="$t('schedule.edit_timer_task')" :visible.sync="dialogVisible" @close="close">
|
<el-dialog width="35%" class="schedule-edit" :title="$t('schedule.edit_timer_task')" :visible.sync="dialogVisible" @close="close">
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<el-form :model="form" :rules="rules" ref="from">
|
<el-form :model="form" :rules="rules" ref="from">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
|
@ -47,7 +47,9 @@
|
||||||
data() {
|
data() {
|
||||||
const validateCron = (rule, cronValue, callback) => {
|
const validateCron = (rule, cronValue, callback) => {
|
||||||
let customValidate = this.customValidate(this.getIntervalTime());
|
let customValidate = this.customValidate(this.getIntervalTime());
|
||||||
if (!cronValidate(cronValue)) {
|
if (!cronValue) {
|
||||||
|
callback(new Error(this.$t('commons.input_content')));
|
||||||
|
} else if (!cronValidate(cronValue)) {
|
||||||
callback(new Error(this.$t('schedule.cron_expression_format_error')));
|
callback(new Error(this.$t('schedule.cron_expression_format_error')));
|
||||||
} else if(!this.intervalShortValidate()) {
|
} else if(!this.intervalShortValidate()) {
|
||||||
callback(new Error(this.$t('schedule.cron_expression_interval_short_error')));
|
callback(new Error(this.$t('schedule.cron_expression_interval_short_error')));
|
||||||
|
|
|
@ -126,8 +126,8 @@
|
||||||
importAPITest() {
|
importAPITest() {
|
||||||
let apiTest = this.$store.state.api.test;
|
let apiTest = this.$store.state.api.test;
|
||||||
if (apiTest && apiTest.name) {
|
if (apiTest && apiTest.name) {
|
||||||
this.testPlan.projectId = apiTest.projectId;
|
this.$set(this.testPlan, "projectId", apiTest.projectId);
|
||||||
this.testPlan.name = apiTest.name;
|
this.$set(this.testPlan, "name", apiTest.name);
|
||||||
let blob = new Blob([apiTest.jmx.xml], {type: "application/octet-stream"});
|
let blob = new Blob([apiTest.jmx.xml], {type: "application/octet-stream"});
|
||||||
let file = new File([blob], apiTest.jmx.name);
|
let file = new File([blob], apiTest.jmx.name);
|
||||||
this.$refs.basicConfig.beforeUpload(file);
|
this.$refs.basicConfig.beforeUpload(file);
|
||||||
|
@ -274,7 +274,7 @@
|
||||||
},
|
},
|
||||||
checkScheduleEdit() {
|
checkScheduleEdit() {
|
||||||
if (!this.testPlan.id) {
|
if (!this.testPlan.id) {
|
||||||
this.$message('请先保存测试');
|
this.$message(this.$t('api_test.environment.please_save_test'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -284,7 +284,7 @@
|
||||||
if (intervalTime < duration) {
|
if (intervalTime < duration) {
|
||||||
return {
|
return {
|
||||||
pass: false,
|
pass: false,
|
||||||
info: '间隔时间不能小于压测时长'
|
info: this.$t('load_test.schedule_tip')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -112,7 +112,7 @@
|
||||||
components: {MsTableOperatorButton},
|
components: {MsTableOperatorButton},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
timeout: 100,
|
timeout: 2000,
|
||||||
statusCode: [],
|
statusCode: [],
|
||||||
domains: [],
|
domains: [],
|
||||||
params: [],
|
params: [],
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
runTest() {
|
runTest() {
|
||||||
this.result = this.$post(this.runPath, {id: this.test.id}, (response) => {
|
this.result = this.$post(this.runPath, {id: this.test.id, triggerMode: 'MANUAL'}, (response) => {
|
||||||
this.$success(this.$t('load_test.is_running'));
|
this.$success(this.$t('load_test.is_running'));
|
||||||
this.$emit('runTest', response.data);
|
this.$emit('runTest', response.data);
|
||||||
});
|
});
|
||||||
|
|
|
@ -102,6 +102,7 @@ export default {
|
||||||
login_username: 'ID or email',
|
login_username: 'ID or email',
|
||||||
input_login_username: 'Please input the user ID or email',
|
input_login_username: 'Please input the user ID or email',
|
||||||
input_name: 'Please enter name',
|
input_name: 'Please enter name',
|
||||||
|
please_save: 'Please save first',
|
||||||
formatErr: 'Format Error',
|
formatErr: 'Format Error',
|
||||||
id: 'ID',
|
id: 'ID',
|
||||||
please_upload: 'Please upload file',
|
please_upload: 'Please upload file',
|
||||||
|
@ -319,7 +320,8 @@ export default {
|
||||||
download_log_file: 'Download',
|
download_log_file: 'Download',
|
||||||
user_name: 'Creator',
|
user_name: 'Creator',
|
||||||
special_characters_are_not_supported: 'Test name does not support special characters',
|
special_characters_are_not_supported: 'Test name does not support special characters',
|
||||||
pressure_config_params_is_empty: 'Pressure configuration parameters cannot be empty!'
|
pressure_config_params_is_empty: 'Pressure configuration parameters cannot be empty!',
|
||||||
|
schedule_tip: 'The interval must not be less than the pressure measuring time'
|
||||||
},
|
},
|
||||||
api_test: {
|
api_test: {
|
||||||
creator: "Creator",
|
creator: "Creator",
|
||||||
|
|
|
@ -104,6 +104,7 @@ export default {
|
||||||
input_name: '请输入名称',
|
input_name: '请输入名称',
|
||||||
please_upload: '请上传文件',
|
please_upload: '请上传文件',
|
||||||
formatErr: '格式错误',
|
formatErr: '格式错误',
|
||||||
|
please_save: '请先保存',
|
||||||
id: 'ID',
|
id: 'ID',
|
||||||
date: {
|
date: {
|
||||||
select_date: '选择日期',
|
select_date: '选择日期',
|
||||||
|
@ -318,7 +319,8 @@ export default {
|
||||||
pressure_prediction_chart: '压力预估图',
|
pressure_prediction_chart: '压力预估图',
|
||||||
user_name: '创建人',
|
user_name: '创建人',
|
||||||
special_characters_are_not_supported: '测试名称不支持特殊字符',
|
special_characters_are_not_supported: '测试名称不支持特殊字符',
|
||||||
pressure_config_params_is_empty: '压力配置参数不能为空!'
|
pressure_config_params_is_empty: '压力配置参数不能为空!',
|
||||||
|
schedule_tip: '间隔时间不能小于压测时长'
|
||||||
},
|
},
|
||||||
api_test: {
|
api_test: {
|
||||||
creator: "创建人",
|
creator: "创建人",
|
||||||
|
|
|
@ -101,6 +101,7 @@ export default {
|
||||||
delete_confirm: '請輸入以下內容,確認刪除:',
|
delete_confirm: '請輸入以下內容,確認刪除:',
|
||||||
input_name: '請輸入名稱',
|
input_name: '請輸入名稱',
|
||||||
formatErr: '格式錯誤',
|
formatErr: '格式錯誤',
|
||||||
|
please_save: '請先保存',
|
||||||
id: 'ID',
|
id: 'ID',
|
||||||
please_upload: '請上傳文件',
|
please_upload: '請上傳文件',
|
||||||
date: {
|
date: {
|
||||||
|
@ -317,7 +318,8 @@ export default {
|
||||||
pressure_prediction_chart: '壓力預估圖',
|
pressure_prediction_chart: '壓力預估圖',
|
||||||
user_name: '創建人',
|
user_name: '創建人',
|
||||||
special_characters_are_not_supported: '測試名稱不支持特殊字符',
|
special_characters_are_not_supported: '測試名稱不支持特殊字符',
|
||||||
pressure_config_params_is_empty: '壓力配置參數不能為空!'
|
pressure_config_params_is_empty: '壓力配置參數不能為空!',
|
||||||
|
schedule_tip: '間隔時間不能小於壓測時長'
|
||||||
},
|
},
|
||||||
api_test: {
|
api_test: {
|
||||||
creator: "創建人",
|
creator: "創建人",
|
||||||
|
|
Loading…
Reference in New Issue