feat(接口定义): 断言处理

This commit is contained in:
fit2-zhao 2020-11-23 12:32:49 +08:00
parent e008baaf2e
commit ac0d65ee1e
7 changed files with 105 additions and 51 deletions

View File

@ -2,12 +2,14 @@
<div> <div>
<el-row :gutter="10" type="flex" justify="space-between" align="middle"> <el-row :gutter="10" type="flex" justify="space-between" align="middle">
<el-col> <el-col>
<el-input :disabled="isReadOnly" :value="value" v-bind="$attrs" step="100" size="small" type="number" @change="change" @input="input" <el-input :disabled="isReadOnly" :value="value" v-bind="$attrs" step="100" size="small" type="number" @change="change" @input="input" :min="0"
:placeholder="$t('api_test.request.assertions.response_in_time')"/> :placeholder="$t('api_test.request.assertions.response_in_time')"/>
</el-col> </el-col>
<el-col class="assertion-btn"> <el-col class="assertion-btn">
<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="small" @click="add" v-else>Add</el-button> <el-button :disabled="isReadOnly" type="primary" size="small" @click="add" v-else>
{{ $t('api_test.request.assertions.add') }}
</el-button>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
@ -33,17 +35,28 @@
methods: { methods: {
add() { add() {
this.duration.value = this.value; if (this.validate()) {
this.callback(); this.duration.value = this.value;
this.callback();
}
}, },
remove() { remove() {
this.duration.value = undefined; this.duration.value = undefined;
}, },
change(value) { change(value) {
this.$emit('change', value); if (this.validate()) {
this.$emit('change', value);
}
}, },
input(value) { input(value) {
this.$emit('input', value); this.$emit('input', value);
},
validate() {
if (Number(this.value) < 0 || this.value=='') {
this.$error(this.$t('commons.formatErr'));
return false;
}
return true;
} }
} }
} }

View File

@ -11,7 +11,9 @@
</el-col> </el-col>
<el-col class="assertion-btn"> <el-col class="assertion-btn">
<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="small" @click="add" v-else>Add</el-button> <el-button :disabled="isReadOnly" type="primary" size="small" @click="add" v-else>
{{ $t('api_test.request.assertions.add') }}
</el-button>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>

View File

@ -56,7 +56,7 @@
<script> <script>
import {AssertionJSR223} from "../../model/ApiTestModel"; import {AssertionJSR223} from "../../model/ApiTestModel";
import MsJsr233Processor from "../processor/Jsr233Processor"; import MsJsr233Processor from "@/business/components/api/test/components/processor/Jsr233Processor";
import MsDialogFooter from "@/business/components/common/components/MsDialogFooter"; import MsDialogFooter from "@/business/components/common/components/MsDialogFooter";
export default { export default {

View File

@ -21,7 +21,9 @@
<el-col class="assertion-btn"> <el-col class="assertion-btn">
<el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove" <el-button :disabled="isReadOnly" type="danger" size="mini" icon="el-icon-delete" circle @click="remove"
v-if="edit"/> v-if="edit"/>
<el-button :disabled="isReadOnly" type="primary" size="small" @click="add" v-else>Add</el-button> <el-button :disabled="isReadOnly" type="primary" size="small" @click="add" v-else>
{{ $t('api_test.request.assertions.add') }}
</el-button>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>

View File

@ -29,7 +29,9 @@
</el-checkbox> </el-checkbox>
</el-col> </el-col>
<el-col class="assertion-btn"> <el-col class="assertion-btn">
<el-button :disabled="isReadOnly" type="primary" size="small" @click="add">Add</el-button> <el-button :disabled="isReadOnly" type="primary" size="small" @click="add">
{{ $t('api_test.request.assertions.add') }}
</el-button>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>

View File

@ -2,81 +2,116 @@
<div> <div>
<div class="assertion-item-editing regex" v-if="assertions.regex.length > 0"> <div class="assertion-item-editing regex" v-if="assertions.regex.length > 0">
<div> <div>
{{$t("api_test.request.assertions.regex")}} {{ $t("api_test.request.assertions.regex") }}
</div> </div>
<div class="regex-item" v-for="(regex, index) in assertions.regex" :key="index"> <div class="regex-item" v-for="(regex, index) in assertions.regex" :key="index">
<ms-api-assertion-regex :is-read-only="isReadOnly" :list="assertions.regex" :regex="regex" :edit="true" :index="index"/> <ms-api-assertion-regex :is-read-only="isReadOnly" :list="assertions.regex"
:regex="regex" :edit="true" :index="index"/>
</div> </div>
</div> </div>
<div class="assertion-item-editing json_path" v-if="assertions.jsonPath.length > 0"> <div class="assertion-item-editing json_path" v-if="assertions.jsonPath.length > 0">
<div> <div>
{{'JSONPath'}} {{ 'JSONPath' }}
</div> </div>
<div class="regex-item" v-for="(jsonPath, index) in assertions.jsonPath" :key="index"> <div class="regex-item" v-for="(jsonPath, index) in assertions.jsonPath" :key="index">
<ms-api-assertion-json-path :is-read-only="isReadOnly" :list="assertions.jsonPath" :json-path="jsonPath" :edit="true" :index="index"/> <ms-api-assertion-json-path :is-read-only="isReadOnly" :list="assertions.jsonPath"
:json-path="jsonPath" :edit="true" :index="index"/>
</div>
</div>
<div class="assertion-item-editing x_path" v-if="assertions.xpath2.length > 0">
<div>
{{ 'XPath' }}
</div>
<div class="regex-item" v-for="(xPath, index) in assertions.xpath2" :key="index">
<ms-api-assertion-x-path2 :is-read-only="isReadOnly" :list="assertions.xpath2"
:x-path2="xPath" :edit="true" :index="index"/>
</div>
</div>
<div class="assertion-item-editing jsr223" v-if="assertions.jsr223.length > 0">
<div>
{{ $t("api_test.request.assertions.script") }}
</div>
<div class="regex-item" v-for="(assertion, index) in assertions.jsr223" :key="index">
<ms-api-assertion-jsr223 :is-read-only="isReadOnly" :list="assertions.jsr223"
:assertion="assertion" :edit="true" :index="index"/>
</div> </div>
</div> </div>
<div class="assertion-item-editing response-time" v-if="isShow"> <div class="assertion-item-editing response-time" v-if="isShow">
<div> <div>
{{$t("api_test.request.assertions.response_time")}} {{ $t("api_test.request.assertions.response_time") }}
</div> </div>
<ms-api-assertion-duration :is-read-only="isReadOnly" v-model="assertions.duration.value" :duration="assertions.duration" :edit="true"/> <ms-api-assertion-duration :is-read-only="isReadOnly" v-model="assertions.duration.value"
:duration="assertions.duration" :edit="true"/>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import MsApiAssertionRegex from "./ApiAssertionRegex"; import MsApiAssertionRegex from "./ApiAssertionRegex";
import MsApiAssertionDuration from "./ApiAssertionDuration"; import MsApiAssertionDuration from "./ApiAssertionDuration";
import {Assertions} from "../../model/ApiTestModel"; import {Assertions} from "../../model/ApiTestModel";
import MsApiAssertionJsonPath from "./ApiAssertionJsonPath"; import MsApiAssertionJsonPath from "./ApiAssertionJsonPath";
import MsApiAssertionJsr223 from "@/business/components/api/test/components/assertion/ApiAssertionJsr223";
import MsApiAssertionXPath2 from "./ApiAssertionXPath2";
export default { export default {
name: "MsApiAssertionsEdit", name: "MsApiAssertionsEdit",
components: {MsApiAssertionJsonPath, MsApiAssertionDuration, MsApiAssertionRegex}, components: {
MsApiAssertionXPath2,
MsApiAssertionJsr223, MsApiAssertionJsonPath, MsApiAssertionDuration, MsApiAssertionRegex},
props: { props: {
assertions: {}, assertions: Assertions,
isReadOnly: { isReadOnly: {
type: Boolean, type: Boolean,
default: false default: false
} }
}, },
computed: { computed: {
isShow() { isShow() {
let rt = this.assertions.duration; let rt = this.assertions.duration;
return rt.value !== undefined; return rt.value !== undefined;
}
} }
} }
}
</script> </script>
<style scoped> <style scoped>
.assertion-item-editing { .assertion-item-editing {
padding-left: 10px; padding-left: 10px;
margin-top: 10px; margin-top: 10px;
} }
.assertion-item-editing.regex { .assertion-item-editing.regex {
border-left: 2px solid #7B0274; border-left: 2px solid #7B0274;
} }
.assertion-item-editing.json_path { .assertion-item-editing.json_path {
border-left: 2px solid #44B3D2; border-left: 2px solid #44B3D2;
} }
.assertion-item-editing.response-time { .assertion-item-editing.response-time {
border-left: 2px solid #DD0240; border-left: 2px solid #DD0240;
} }
.regex-item { .assertion-item-editing.jsr223 {
margin-top: 10px; border-left: 2px solid #1FDD02;
} }
.assertion-item-editing.x_path {
border-left: 2px solid #fca130;
}
.regex-item {
margin-top: 10px;
}
</style> </style>

View File

@ -65,7 +65,7 @@
}; };
}, },
props: { props: {
request: {}, request: HttpRequest,
}, },
methods: { methods: {
close() { close() {