fix(项目设置): 修改环境配置-全局断言中json文档断言添加失败的缺陷
--bug=1019018 --user=宋天阳 [项目设置]项目环境-编辑项目环境-全局断言添加文档结果校验json格式失败 https://www.tapd.cn/55049933/s/1280284
This commit is contained in:
parent
55401c04b3
commit
f8ad0fb0a8
|
@ -246,14 +246,14 @@ export default {
|
||||||
this.environment.config.authManager.hashTree = [];
|
this.environment.config.authManager.hashTree = [];
|
||||||
}
|
}
|
||||||
if (!this.environment.config.assertions) {
|
if (!this.environment.config.assertions) {
|
||||||
this.environment.config.assertions = {
|
this.$set(this.environment.config, 'assertions', {
|
||||||
duration: {duration: 0},
|
duration: {duration: 0},
|
||||||
regex: [],
|
regex: [],
|
||||||
jsonPath: [],
|
jsonPath: [],
|
||||||
xpath2: [],
|
xpath2: [],
|
||||||
jsr223: [],
|
jsr223: [],
|
||||||
document: {type: "json", data: {json: [], xml: []}},
|
document: {type: "JSON", data: {json: [], xml: []}},
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -295,14 +295,14 @@ export default {
|
||||||
this.environment.config.authManager.hashTree = [];
|
this.environment.config.authManager.hashTree = [];
|
||||||
}
|
}
|
||||||
if (!this.environment.config.assertions) {
|
if (!this.environment.config.assertions) {
|
||||||
this.environment.config.assertions = {
|
this.$set(this.environment.config, 'assertions', {
|
||||||
duration: {duration: 0},
|
duration: {duration: 0},
|
||||||
regex: [],
|
regex: [],
|
||||||
jsonPath: [],
|
jsonPath: [],
|
||||||
xpath2: [],
|
xpath2: [],
|
||||||
jsr223: [],
|
jsr223: [],
|
||||||
document: {type: "json", data: {json: [], xml: []}},
|
document: {type: "JSON", data: {json: [], xml: []}},
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isRefresh = false;
|
this.isRefresh = false;
|
||||||
|
|
|
@ -10,9 +10,11 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="assertion-btn">
|
<el-col class="assertion-btn">
|
||||||
<el-tooltip :content="$t('test_resource_pool.enable_disable')" placement="top" v-if="edit">
|
<el-tooltip :content="$t('test_resource_pool.enable_disable')" placement="top" v-if="edit">
|
||||||
<el-switch v-model="duration.enable" class="enable-switch" size="mini" :disabled="isReadOnly" style="width: 30px;margin-right: 10px"/>
|
<el-switch v-model="duration.enable" class="enable-switch" size="mini" :disabled="isReadOnly"
|
||||||
|
style="width: 30px;margin-right: 10px"/>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove" v-if="edit"/>
|
<el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove"
|
||||||
|
v-if="edit"/>
|
||||||
<el-button :disabled="isReadOnly" type="primary" size="mini" @click="add" v-else>
|
<el-button :disabled="isReadOnly" type="primary" size="mini" @click="add" v-else>
|
||||||
{{ $t('api_test.request.assertions.add') }}
|
{{ $t('api_test.request.assertions.add') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -71,7 +73,7 @@ export default {
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
.assertion-btn {
|
.assertion-btn {
|
||||||
text-align: center;
|
text-align: right;
|
||||||
width: 80px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -27,9 +27,11 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="assertion-btn">
|
<el-col class="assertion-btn">
|
||||||
<el-tooltip :content="$t('test_resource_pool.enable_disable')" placement="top" v-if="edit">
|
<el-tooltip :content="$t('test_resource_pool.enable_disable')" placement="top" v-if="edit">
|
||||||
<el-switch v-model="jsonPath.enable" class="enable-switch" size="mini" :disabled="isReadOnly" style="width: 30px;margin-right: 10px"/>
|
<el-switch v-model="jsonPath.enable" class="enable-switch" size="mini" :disabled="isReadOnly"
|
||||||
|
style="width: 30px;margin-right: 10px"/>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove" v-if="edit"/>
|
<el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove"
|
||||||
|
v-if="edit"/>
|
||||||
<el-button :disabled="isReadOnly" type="primary" size="mini" @click="add" v-else>
|
<el-button :disabled="isReadOnly" type="primary" size="mini" @click="add" v-else>
|
||||||
{{ $t('api_test.request.assertions.add') }}
|
{{ $t('api_test.request.assertions.add') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -124,7 +126,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.assertion-btn {
|
.assertion-btn {
|
||||||
text-align: center;
|
text-align: right;
|
||||||
width: 80px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -116,7 +116,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.assertion-btn {
|
.assertion-btn {
|
||||||
text-align: center;
|
text-align: right;
|
||||||
width: 180px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -7,9 +7,11 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="assertion-btn">
|
<el-col class="assertion-btn">
|
||||||
<el-tooltip :content="$t('test_resource_pool.enable_disable')" placement="top" v-if="edit">
|
<el-tooltip :content="$t('test_resource_pool.enable_disable')" placement="top" v-if="edit">
|
||||||
<el-switch v-model="xPath2.enable" class="enable-switch" size="mini" :disabled="isReadOnly" style="width: 30px;margin-right:10px"/>
|
<el-switch v-model="xPath2.enable" class="enable-switch" size="mini" :disabled="isReadOnly"
|
||||||
|
style="width: 30px;margin-right:10px"/>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove" v-if="edit"/>
|
<el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove"
|
||||||
|
v-if="edit"/>
|
||||||
<el-button :disabled="isReadOnly" type="primary" size="mini" @click="add" v-else>
|
<el-button :disabled="isReadOnly" type="primary" size="mini" @click="add" v-else>
|
||||||
{{ $t('api_test.request.assertions.add') }}
|
{{ $t('api_test.request.assertions.add') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -60,7 +62,7 @@ export default {
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.assertion-btn {
|
.assertion-btn {
|
||||||
text-align: center;
|
text-align: right;
|
||||||
width: 80px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -116,7 +116,7 @@ export default {
|
||||||
computed: {
|
computed: {
|
||||||
isShow() {
|
isShow() {
|
||||||
let rt = this.assertions.duration;
|
let rt = this.assertions.duration;
|
||||||
return rt.value && rt.value !== 0;
|
return rt.value && rt.value !== 0;
|
||||||
},
|
},
|
||||||
isDocument() {
|
isDocument() {
|
||||||
return this.assertions.document && this.assertions.document.data && (this.assertions.document.data.json.length > 0 || this.assertions.document.data.xml.length > 0);
|
return this.assertions.document && this.assertions.document.data && (this.assertions.document.data.json.length > 0 || this.assertions.document.data.xml.length > 0);
|
||||||
|
@ -176,7 +176,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.assertion-remove-btn {
|
.assertion-remove-btn {
|
||||||
text-align: center;
|
text-align: right;
|
||||||
width: 80px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {Regex, ASSERTION_REGEX_SUBJECT} from "../../../model/ApiTestModel";
|
import {ASSERTION_REGEX_SUBJECT, Regex} from "../../../model/ApiTestModel";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "MsApiAssertionText",
|
name: "MsApiAssertionText",
|
||||||
|
@ -123,6 +123,6 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.assertion-btn {
|
.assertion-btn {
|
||||||
width: 60px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -37,7 +37,7 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
add() {
|
add() {
|
||||||
let obj = new AssertionDocument({id: "root"});
|
let obj = new AssertionDocument({id: "root"});
|
||||||
if (this.document.type === "JSON" && this.document.data.json.length === 0) {
|
if (this.document.type === "JSON" || this.document.type === "json" && this.document.data.json.length === 0) {
|
||||||
this.document.data.json.push(obj);
|
this.document.data.json.push(obj);
|
||||||
}
|
}
|
||||||
if (this.document.type === "XML" && this.document.data.xml.length === 0) {
|
if (this.document.type === "XML" && this.document.data.xml.length === 0) {
|
||||||
|
@ -62,7 +62,7 @@ export default {
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.assertion-btn {
|
.assertion-btn {
|
||||||
text-align: center;
|
text-align: right;
|
||||||
width: 60px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -112,9 +112,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
import {
|
import {getCurrentProjectID, getCurrentUserId} from "metersphere-frontend/src/utils/token";
|
||||||
getCurrentProjectID, getCurrentUserId
|
|
||||||
} from "metersphere-frontend/src/utils/token";
|
|
||||||
import {listenGoBack, removeGoBackListener} from "metersphere-frontend/src/utils";
|
import {listenGoBack, removeGoBackListener} from "metersphere-frontend/src/utils";
|
||||||
import MsFormDivider from "metersphere-frontend/src/components/MsFormDivider";
|
import MsFormDivider from "metersphere-frontend/src/components/MsFormDivider";
|
||||||
import {ASSERTION_REGEX_SUBJECT, ASSERTION_TYPE, Regex} from "metersphere-frontend/src/model/ApiTestModel";
|
import {ASSERTION_REGEX_SUBJECT, ASSERTION_TYPE, Regex} from "metersphere-frontend/src/model/ApiTestModel";
|
||||||
|
@ -154,7 +152,7 @@ export default {
|
||||||
jsonPath: [],
|
jsonPath: [],
|
||||||
xpath2: [],
|
xpath2: [],
|
||||||
jsr223: [],
|
jsr223: [],
|
||||||
document: {type: "json", data: {json: [], xml: []}},
|
document: {type: "JSON", data: {json: [], xml: []}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
|
|
|
@ -54,6 +54,6 @@ public class HistoryReportController {
|
||||||
|
|
||||||
@PostMapping("/selectById")
|
@PostMapping("/selectById")
|
||||||
public ReportStatisticsWithBLOBs selectById(@RequestBody ReportStatisticsSaveRequest request) {
|
public ReportStatisticsWithBLOBs selectById(@RequestBody ReportStatisticsSaveRequest request) {
|
||||||
return reportStatisticsService.selectById(request.getId());
|
return reportStatisticsService.selectById(request.getId(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,6 @@ public class ReportStatShareController {
|
||||||
|
|
||||||
@PostMapping("/select/report/by/id")
|
@PostMapping("/select/report/by/id")
|
||||||
public ReportStatisticsWithBLOBs selectById(@RequestBody ReportStatisticsSaveRequest request) {
|
public ReportStatisticsWithBLOBs selectById(@RequestBody ReportStatisticsSaveRequest request) {
|
||||||
return reportStatisticsService.selectById(request.getId());
|
return reportStatisticsService.selectById(request.getId(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -476,7 +476,7 @@ public class EnterpriseTestReportService {
|
||||||
List<ReportStatisticsWithBLOBs> bloBsList = new ArrayList<>();
|
List<ReportStatisticsWithBLOBs> bloBsList = new ArrayList<>();
|
||||||
for (EnterpriseReportContentStep step : stepList) {
|
for (EnterpriseReportContentStep step : stepList) {
|
||||||
//定时任务触发的数据,需要检查图片是否需要重新生成
|
//定时任务触发的数据,需要检查图片是否需要重新生成
|
||||||
ReportStatisticsWithBLOBs reportStatisticsWithBLOBs = reportStatisticsService.selectById(step.getReportRecordId());
|
ReportStatisticsWithBLOBs reportStatisticsWithBLOBs = reportStatisticsService.selectById(step.getReportRecordId(), false);
|
||||||
if (reportStatisticsWithBLOBs != null) {
|
if (reportStatisticsWithBLOBs != null) {
|
||||||
boolean needSyncImage = reportStatisticsService.isReportNeedUpdate(reportStatisticsWithBLOBs);
|
boolean needSyncImage = reportStatisticsService.isReportNeedUpdate(reportStatisticsWithBLOBs);
|
||||||
if (needSyncImage) {
|
if (needSyncImage) {
|
||||||
|
|
|
@ -4,10 +4,7 @@ import io.metersphere.base.domain.ReportStatistics;
|
||||||
import io.metersphere.base.domain.ReportStatisticsExample;
|
import io.metersphere.base.domain.ReportStatisticsExample;
|
||||||
import io.metersphere.base.domain.ReportStatisticsWithBLOBs;
|
import io.metersphere.base.domain.ReportStatisticsWithBLOBs;
|
||||||
import io.metersphere.base.mapper.ReportStatisticsMapper;
|
import io.metersphere.base.mapper.ReportStatisticsMapper;
|
||||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
import io.metersphere.commons.utils.*;
|
||||||
import io.metersphere.commons.utils.JSON;
|
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
|
||||||
import io.metersphere.commons.utils.SessionUtils;
|
|
||||||
import io.metersphere.dto.BaseSystemConfigDTO;
|
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||||
import io.metersphere.reportstatistics.dto.*;
|
import io.metersphere.reportstatistics.dto.*;
|
||||||
import io.metersphere.reportstatistics.dto.charts.Series;
|
import io.metersphere.reportstatistics.dto.charts.Series;
|
||||||
|
@ -74,11 +71,16 @@ public class ReportStatisticsService {
|
||||||
return reportStatisticsMapper.deleteByPrimaryKey(id);
|
return reportStatisticsMapper.deleteByPrimaryKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReportStatisticsWithBLOBs selectById(String id) {
|
public ReportStatisticsWithBLOBs selectById(String id, boolean isRemoteRequest) {
|
||||||
ReportStatisticsWithBLOBs blob = reportStatisticsMapper.selectByPrimaryKey(id);
|
ReportStatisticsWithBLOBs blob = reportStatisticsMapper.selectByPrimaryKey(id);
|
||||||
if (blob == null) {
|
if (blob == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (isRemoteRequest) {
|
||||||
|
//通过接口进行的请求时没有session的
|
||||||
|
HttpHeaderUtils.runAsUser(blob.getCreateUser());
|
||||||
|
}
|
||||||
|
|
||||||
Map<String, Object> selectOption = JSON.parseObject(blob.getSelectOption(), Map.class);
|
Map<String, Object> selectOption = JSON.parseObject(blob.getSelectOption(), Map.class);
|
||||||
Map<String, Object> dataOption = JSON.parseObject(blob.getDataOption(), Map.class);
|
Map<String, Object> dataOption = JSON.parseObject(blob.getDataOption(), Map.class);
|
||||||
boolean isReportNeedUpdate = this.isReportNeedUpdate(blob);
|
boolean isReportNeedUpdate = this.isReportNeedUpdate(blob);
|
||||||
|
@ -90,6 +92,9 @@ public class ReportStatisticsService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isRemoteRequest) {
|
||||||
|
HttpHeaderUtils.clearUser();
|
||||||
|
}
|
||||||
if (!dataOption.containsKey("showTable")) {
|
if (!dataOption.containsKey("showTable")) {
|
||||||
if (dataOption.get("tableData") != null) {
|
if (dataOption.get("tableData") != null) {
|
||||||
String tableDataJsonStr = JSON.toJSONString(dataOption.get("tableData"));
|
String tableDataJsonStr = JSON.toJSONString(dataOption.get("tableData"));
|
||||||
|
|
Loading…
Reference in New Issue