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'})