diff --git a/package.json b/package.json index d711e0b3..28be1f85 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "vue-gantt-schedule-timeline-calendar": "^1.0.33", "vue-grid-layout": "^2.3.12", "vue-i18n": "7.3.2", + "vue-json-viewer": "^2.2.22", "vue-okr-tree": "^1.0.10", "vue-print-nb": "^1.7.5", "vue-qr": "^4.0.6", diff --git a/src/views/xm/core/xmTestCase/XmTestCaseEdit.vue b/src/views/xm/core/xmTestCase/XmTestCaseEdit.vue index 30e5c61d..32888d39 100644 --- a/src/views/xm/core/xmTestCase/XmTestCaseEdit.vue +++ b/src/views/xm/core/xmTestCase/XmTestCaseEdit.vue @@ -89,7 +89,7 @@ {{autoStep.url}}
- +
@@ -119,7 +119,7 @@ label="参数值" min-width="250"> @@ -133,7 +133,10 @@ - 保存 + + 发送 + 保存 + @@ -156,7 +159,7 @@ label="参数值" min-width="250"> @@ -170,7 +173,10 @@ - 保存 + + 发送 + 保存 + @@ -190,7 +196,7 @@ label="参数值" min-width="250"> @@ -204,7 +210,10 @@ - 保存 + + 发送 + 保存 + @@ -237,7 +246,10 @@ - 保存 + + 发送 + 保存 + @@ -250,7 +262,7 @@ {{basicAuth.username}}
- +
@@ -258,28 +270,31 @@ {{basicAuth.password||'暂无'}}
- +
- +
{{bearerToken.bearerToken}}
- +
- 保存 + + 发送 + 保存 + 可使用的变量 res={config:{协议配置},data:{接口返回的业务数据对象} ,headers:{协议头,key-value型},status:状态码如200/201 } - + if(res.status==200){
  return true;
@@ -287,6 +302,15 @@   return false;
}
+ + 显示响应数据 + + + + + 发送 + 保存 +
@@ -345,6 +369,10 @@ import XmTestPlanCaseMng from '@/views/xm/core/xmTestPlanCase/XmTestPlanCaseMng import MyInput from '@/components/MDinput/index'; import MdpSelectUserXm from '@/views/xm/core/components/MdpSelectUserXm';//修改界面 + +import axios from 'axios'//免登录访问 +import JsonViewer from 'vue-json-viewer' + export default { name:'xmTestCaseEdit', components: { @@ -352,6 +380,7 @@ import MdpSelectUserXm from '@/views/xm/core/components/MdpSelectUserXm';//修 XmMenuEdit:()=>import("../xmMenu/XmMenuDetail"), XmTestCasedbMng:()=>import('../xmTestCasedb/XmTestCasedbMng'), 'xm-workload-record':()=>import("../xmWorkload/XmWorkloadRecord"), + JsonViewer, }, computed: { ...mapGetters([ 'userInfo' ]), @@ -448,13 +477,15 @@ import MdpSelectUserXm from '@/views/xm/core/components/MdpSelectUserXm';//修 url:'', method:'GET', authType:'none', + authData:{}, bodyType:'json', - params:{}, - body:{}, - cookie:{}, + params:[], + body:[], + cookies:[], expectResult:'' }, - + testRes:{}, + resDataVisible:false, }//end return },//end data methods: { @@ -523,7 +554,176 @@ import MdpSelectUserXm from '@/views/xm/core/components/MdpSelectUserXm';//修 deleteHeaderRow(row,index){ this.headerList.splice(index,1) }, + calcAutoStep(){ + var autoStep={...this.autoStep} + autoStep.authData={} + //auth 授权数据组合 + if(this.autoStep.authType=='bearer-token'){ + autoStep.authData.bearerToken=this.bearerToken.bearerToken + }else if(this.autoStep.authType=='basic-auth'){ + autoStep.authData=this.basicAuth + } + + //查询参数组合 + autoStep.params=this.paramsList.filter(k=>k.id) + + //body 参数组合 + if(this.autoStep.bodyType=='json'){ + autoStep.body=this.bodyJson + }else if(this.autoStep.bodyType=='xml'){ + autoStep.body=this.bodyXml + }else if(this.autoStep.bodyType=='raw'){ + autoStep.body=this.bodyRaw + }else if(this.autoStep.bodyType=='form-data'){ + autoStep.body=this.bodyList.filter(k=>k.id) + }else if(this.autoStep.bodyType=='x-www-form-urlencoded'){ + autoStep.body=this.bodyList.filter(k=>k.id) + }else if(this.autoStep.bodyType=='x-www-form-urlencoded'){ + autoStep.body=this.bodyList.filter(k=>k.id) + }else{ + autoStep.body=null + } + + //header 参数组合 + autoStep.headers=this.headerList.filter(k=>k.id) + + autoStep.cookies=this.cookieList.filter(k=>k.id) + + return autoStep; + }, + initAutoStep(){ + if(this.xmTestCase.autoStep){ + this.autoStep=JSON.parse(this.xmTestCase.autoStep) + //参数 + if(this.autoStep.params){ + this.paramsList=this.autoStep.params + } + if(this.autoStep.headers){ + this.headerList=this.autoStep.headers + } + if(this.autoStep.cookies){ + this.cookieList=this.autoStep.cookies + } + if(this.autoStep.authType=='bearer-token'){ + this.bearerToken=this.autoStep.authData + } + if(this.autoStep.authType=='basic-auth'){ + this.basicAuth=this.autoStep.authData + } + if(this.autoStep.bodyType=='json'){ + this.bodyJson=this.autoStep.body + }else if(this.autoStep.bodyType=='xml'){ + this.bodyXml=this.autoStep.body + }else if(this.autoStep.bodyType=='raw'){ + this.bodyRaw=this.autoStep.body + }else if(this.autoStep.bodyType=='form-data'){ + this.bodyList=this.autoStep.body + }else if(this.autoStep.bodyType=='x-www-form-urlencoded'){ + this.bodyList=this.autoStep.body + } + }else{ + + } + + }, + saveAutoStep(){ + var autoStepObj=this.calcAutoStep(); + var autoStepStr=JSON.stringify(autoStepObj) + this.editSomeFields(this.editForm,'autoStep',autoStepStr) + }, + autoStepToAxios(autoStepObj){ + var axiosObj={url:autoStepObj.url,method:autoStepObj.method} + + //参数处理 + if(autoStepObj.method=='GET'){ + var params={} + autoStepObj.params.forEach(k=>{ + params[k.id]=k.value + }) + axiosObj.params=params + }else if(autoStepObj.method=='POST'){ + var params={} + autoStepObj.params.forEach(k=>{ + params[k.id]=k.value + }) + axiosObj.params=params + if(autoStepObj.bodyType=='json'){ + axiosObj.data=autoStepObj.body + }else if(autoStepObj.bodyType=='xml'){ + axiosObj.data=autoStepObj.body + }else if(autoStepObj.bodyType=='raw'){ + axiosObj.data=autoStepObj.body + }else if(autoStepObj.bodyType=='form-data'){ + var data={} + autoStepObj.body.forEach(k=>{ + data[k.id]=k.value + }) + axiosObj.data=data; + }else if(autoStepObj.bodyType=='x-www-form-urlencoded'){ + var data={} + autoStepObj.body.forEach(k=>{ + data[k.id]=k.value + }) + axiosObj.data=data; + } + } + + //header处理 + if(autoStepObj.headers){ + axiosObj.headers={} + autoStepObj.headers.forEach(k=>{ + axiosObj.headers[k.id]=k.value + }) + }else { + axiosObj.headers={} + } + debugger; + if(autoStepObj.authType=='bearer-token'){ + axiosObj.headers['Authorization'] = 'Bearer '+autoStepObj.authData.bearerToken + }else if(autoStepObj.authType=='basic-auth'){ + var username=autoStepObj.authData.username + var password=autoStepObj.authData.password + var authorizationBasic = window.btoa(username + ':' + password); + axiosObj.headers['Authorization'] = 'Basic '+authorizationBasic + } + + //cookie 处理 + if(autoStepObj.cookies){ + axiosObj.cookies={} + autoStepObj.cookies.forEach(k=>{ + axiosObj.cookies[k.id]=k.value + }) + } + return axiosObj + }, + sendMsgForTestSetting(){ + debugger; + var autoStepObj=this.calcAutoStep(); + if(!autoStepObj.url){ + this.$notify({position:'bottom-left',showClose:true,message:'url不能为空',type: 'error'}) + return; + } + var axiosObj=this.autoStepToAxios(autoStepObj) + //axiosObj.headers['Access-Control-Allow-Origin']='*' + //axios.defaults.withCredentials = true // 若跨域请求需要带 cookie 身份识别 + //axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' + axios(axiosObj).then(res=>{ + this.testRes=res + if(autoStepObj.expectResult){ + var func=new Function('res','env',autoStepObj.expectResult) + var result=func(res,{}) + if(result==true){ + this.$notify({position:'bottom-left',showClose:true,message:'成功',type: 'success'}) + + }else{ + this.$notify({position:'bottom-left',showClose:true,message:'失败',type: 'error'}) + + } + }else{ + this.$notify({position:'bottom-left',showClose:true,message:'执行完毕',type: res.status==200?'success':'error'}) + } + }) }, initData: function(){ @@ -557,9 +757,9 @@ import MdpSelectUserXm from '@/views/xm/core/components/MdpSelectUserXm';//修 this.editForm.id=null } + this.initAutoStep(); this.editFormBak={...this.editForm} }, - editSomeFields(row,fieldName,$event){ if(this.opType=='add'){ return; @@ -588,6 +788,9 @@ import MdpSelectUserXm from '@/views/xm/core/components/MdpSelectUserXm';//修 if(tips.isOk){ this.editFormBak={...this.editForm} this.$emit('edit-fields',params) + if(fieldName=='autoStep'){ + this.$notify({position:'bottom-left',showClose:true,message:tips.msg,type:tips.isOk?'success':'error'}) + } }else{ Object.assign(this.editForm,this.editFormBak) this.$notify({position:'bottom-left',showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})