feat(接口自动化): 添加执行操作

This commit is contained in:
fit2-zhao 2020-12-15 11:43:14 +08:00
parent f57b3dcc15
commit 236a9241d8
7 changed files with 67 additions and 15 deletions

View File

@ -51,6 +51,9 @@ public class MsDubboSampler extends MsTestElement {
@JSONField(ordinal = 59) @JSONField(ordinal = 59)
private List<KeyValue> attachmentArgs; private List<KeyValue> attachmentArgs;
@JSONField(ordinal = 60)
private Object requestResult;
public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) { public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) {
if (!this.isEnable()) { if (!this.isEnable()) {
return; return;

View File

@ -85,6 +85,9 @@ public class MsHTTPSamplerProxy extends MsTestElement {
@JSONField(ordinal = 24) @JSONField(ordinal = 24)
private List<KeyValue> arguments; private List<KeyValue> arguments;
@JSONField(ordinal = 25)
private Object requestResult;
public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) { public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) {
if (!this.isEnable()) { if (!this.isEnable()) {
return; return;

View File

@ -38,6 +38,8 @@ public class MsJDBCSampler extends MsTestElement {
private List<KeyValue> variables; private List<KeyValue> variables;
@JSONField(ordinal = 16) @JSONField(ordinal = 16)
private String environmentId; private String environmentId;
@JSONField(ordinal = 17)
private Object requestResult;
public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) { public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) {
if (!this.isEnable()) { if (!this.isEnable()) {

View File

@ -48,6 +48,8 @@ public class MsTCPSampler extends MsTestElement {
private String password = ""; private String password = "";
@JSONField(ordinal = 23) @JSONField(ordinal = 23)
private String request; private String request;
@JSONField(ordinal = 24)
private Object requestResult;
public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) { public void toHashTree(HashTree tree, List<MsTestElement> hashTree, ParameterConfig config) {
if (!this.isEnable()) { if (!this.isEnable()) {

@ -1 +1 @@
Subproject commit bb494fc68a2367359c9048fa7250c7618de4afb6 Subproject commit 1fe20ba15a7ca3fe9f77ddf866021e7c7dfe5969

View File

@ -24,8 +24,10 @@
<el-tag size="mini" style="margin-left: 20px" v-if="request.referenced ==='REF'">{{ $t('api_test.scenario.reference') }}</el-tag> <el-tag size="mini" style="margin-left: 20px" v-if="request.referenced ==='REF'">{{ $t('api_test.scenario.reference') }}</el-tag>
<div style="margin-right: 20px; float: right"> <div style="margin-right: 20px; float: right">
<i class="icon el-icon-arrow-right" :class="{'is-active': request.active}" <i class="icon el-icon-arrow-right" :class="{'is-active': request.active}"
@click="active(request)" v-if="request.referenced!=undefined && request.referenced!='Deleted' && request.referenced!='REF'"/> @click="active(request)"/>
<el-switch v-model="request.enable" style="margin-left: 10px"/> <el-switch v-model="request.enable" style="margin-left: 10px"/>
<el-button @click="run" :tip="$t('api_test.run')" icon="el-icon-video-play"
style="background-color: #409EFF;color: white;margin-left: 10px" size="mini" circle/>
<el-button size="mini" icon="el-icon-copy-document" circle @click="copyRow" style="margin-left: 10px"/> <el-button size="mini" icon="el-icon-copy-document" circle @click="copyRow" style="margin-left: 10px"/>
<el-button size="mini" icon="el-icon-delete" type="danger" circle @click="remove" style="margin-left: 10px"/> <el-button size="mini" icon="el-icon-delete" type="danger" circle @click="remove" style="margin-left: 10px"/>
</div> </div>
@ -45,6 +47,10 @@
<ms-tcp-basis-parameters :request="request" v-if="request.protocol==='TCP'"/> <ms-tcp-basis-parameters :request="request" v-if="request.protocol==='TCP'"/>
<ms-sql-basis-parameters :request="request" v-if="request.protocol==='SQL'"/> <ms-sql-basis-parameters :request="request" v-if="request.protocol==='SQL'"/>
<ms-dubbo-basis-parameters :request="request" v-if="request.protocol==='DUBBO' || request.protocol==='dubbo://'"/> <ms-dubbo-basis-parameters :request="request" v-if="request.protocol==='DUBBO' || request.protocol==='dubbo://'"/>
<p class="tip">{{$t('api_test.definition.request.res_param')}} </p>
<ms-request-result-tail :response="request.requestResult" ref="runResult"/>
<!-- 保存操作 --> <!-- 保存操作 -->
<el-button type="primary" size="small" style="margin: 20px; float: right" @click="saveTestCase(item)" v-if="!request.referenced"> <el-button type="primary" size="small" style="margin: 20px; float: right" @click="saveTestCase(item)" v-if="!request.referenced">
{{$t('commons.save')}} {{$t('commons.save')}}
@ -52,6 +58,9 @@
</div> </div>
</el-collapse-transition> </el-collapse-transition>
</el-card> </el-card>
<!-- 执行组件 -->
<ms-run :debug="false" :reportId="reportId" :run-data="runData"
@runRefresh="runRefresh" ref="runTest"/>
</div> </div>
</template> </template>
@ -61,29 +70,27 @@
import MsDubboBasisParameters from "../../definition/components/request/dubbo/BasisParameters"; import MsDubboBasisParameters from "../../definition/components/request/dubbo/BasisParameters";
import MsApiRequestForm from "../../definition/components/request/http/ApiRequestForm"; import MsApiRequestForm from "../../definition/components/request/http/ApiRequestForm";
import {REQ_METHOD} from "../../definition/model/JsonData"; import {REQ_METHOD} from "../../definition/model/JsonData";
import MsRequestResultTail from "../../definition/components/response/RequestResultTail";
import MsRun from "../../definition/components/Run";
import {getUUID} from "@/common/js/utils";
export default { export default {
name: "MsApiComponent", name: "MsApiComponent",
props: { props: {
request: {}, request: {},
node: {}, node: {},
currentEnvironmentId: String,
}, },
components: {MsSqlBasisParameters, MsTcpBasisParameters, MsDubboBasisParameters, MsApiRequestForm}, components: {MsSqlBasisParameters, MsTcpBasisParameters, MsDubboBasisParameters, MsApiRequestForm, MsRequestResultTail, MsRun},
data() { data() {
return {loading: false, reqOptions: REQ_METHOD,} return {loading: false, reqOptions: REQ_METHOD, reportId: "", runData: []}
}, },
created() { created() {
if (this.request.id && this.request.referenced === 'REF') { if (!this.request.requestResult) {
this.$get("/api/definition/get/" + this.request.id, response => { this.request.requestResult = {responseResult: {}};
if (response.data) {
this.request.name = response.data.name;
this.reload();
} else {
this.request.referenced = "Deleted";
} }
}) //
} this.getApiInfo();
if (this.request.protocol === 'HTTP') { if (this.request.protocol === 'HTTP') {
try { try {
let urlObject = new URL(this.request.url); let urlObject = new URL(this.request.url);
@ -105,10 +112,45 @@
copyRow() { copyRow() {
this.$emit('copyRow', this.request, this.node); this.$emit('copyRow', this.request, this.node);
}, },
getApiInfo() {
if (this.request.id && this.request.referenced === 'REF') {
let requestResult = this.request.requestResult;
this.$get("/api/definition/get/" + this.request.id, response => {
if (response.data) {
Object.assign(this.request, JSON.parse(response.data.request));
this.request.name = response.data.name;
this.request.path = response.data.path;
this.request.method = response.data.method;
this.request.url = response.data.path;
this.request.requestResult = requestResult;
this.reload();
} else {
this.request.referenced = "Deleted";
}
})
}
},
active(item) { active(item) {
item.active = !item.active; item.active = !item.active;
this.reload(); this.reload();
}, },
run() {
if (!this.currentEnvironmentId) {
this.$error(this.$t('api_test.environment.select_environment'));
return;
}
this.loading = true;
this.runData = [];
this.request.useEnvironment = this.currentEnvironmentId;
this.runData.push(this.request);
/*触发执行操作*/
this.reportId = getUUID().substring(0, 8);
},
runRefresh(data) {
this.request.requestResult = data;
this.loading = false;
},
reload() { reload() {
this.loading = true this.loading = true
this.$nextTick(() => { this.$nextTick(() => {

View File

@ -186,7 +186,7 @@
<!--提取规则--> <!--提取规则-->
<ms-api-extract @remove="remove" @copyRow="copyRow" v-if="data.type==='Extract'" customizeStyle="margin-top: 0px" :extract="data" :node="node"/> <ms-api-extract @remove="remove" @copyRow="copyRow" v-if="data.type==='Extract'" customizeStyle="margin-top: 0px" :extract="data" :node="node"/>
<!--API 导入 --> <!--API 导入 -->
<ms-api-component :request="data" @remove="remove" @copyRow="copyRow" v-if="data.type==='HTTPSamplerProxy'||data.type==='DubboSampler'||data.type==='JDBCSampler'||data.type==='TCPSampler'" :node="node"/> <ms-api-component :request="data" :currentEnvironmentId="currentEnvironmentId" @remove="remove" @copyRow="copyRow" v-if="data.type==='HTTPSamplerProxy'||data.type==='DubboSampler'||data.type==='JDBCSampler'||data.type==='TCPSampler'" :node="node"/>
</template> </template>
</span> </span>
</el-tree> </el-tree>