diff --git a/src/views/xm/core/xmTestCase/XmTestCaseEdit.vue b/src/views/xm/core/xmTestCase/XmTestCaseEdit.vue index 32888d39..7d9fd78b 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"> @@ -159,7 +159,7 @@ label="参数值" min-width="250"> @@ -196,7 +196,7 @@ label="参数值" min-width="250"> @@ -232,7 +232,7 @@ label="参数值" min-width="250"> @@ -262,7 +262,7 @@ {{basicAuth.username}}
- +
@@ -270,7 +270,7 @@ {{basicAuth.password||'暂无'}}
- +
@@ -281,7 +281,7 @@ {{bearerToken.bearerToken}}
- +
@@ -292,6 +292,8 @@ 可使用的变量 res={config:{协议配置},data:{接口返回的业务数据对象} ,headers:{协议头,key-value型},status:状态码如200/201 } + 可使用的变量 env={key1:value1,key2:value2,等等},env为测试库环境变量及测试计划的环境变量合并,重复则以测试计划的为准。可通过env['key1']获取值 + @@ -632,20 +634,37 @@ import JsonViewer from 'vue-json-viewer' var autoStepStr=JSON.stringify(autoStepObj) this.editSomeFields(this.editForm,'autoStep',autoStepStr) }, - autoStepToAxios(autoStepObj){ + parseEnvVarValue(valueTpl,env){ + if(!env){ + return valueTpl + } + if(!valueTpl){ + return valueTpl; + }else{ + var reg = /\#\{(\w+)\}/g; + var value=valueTpl.replace(reg,function(){ + var arg=arguments; + var key=arguments[1] + return env[key] + }) + return value + } + + }, + autoStepToAxios(autoStepObj,env){ var axiosObj={url:autoStepObj.url,method:autoStepObj.method} //参数处理 if(autoStepObj.method=='GET'){ var params={} autoStepObj.params.forEach(k=>{ - params[k.id]=k.value + params[k.id]=this.parseEnvVarValue(k.value,env) }) axiosObj.params=params }else if(autoStepObj.method=='POST'){ var params={} autoStepObj.params.forEach(k=>{ - params[k.id]=k.value + params[k.id]=this.parseEnvVarValue(k.value,env) }) axiosObj.params=params if(autoStepObj.bodyType=='json'){ @@ -657,13 +676,13 @@ import JsonViewer from 'vue-json-viewer' }else if(autoStepObj.bodyType=='form-data'){ var data={} autoStepObj.body.forEach(k=>{ - data[k.id]=k.value + data[k.id]=this.parseEnvVarValue(k.value,env) }) axiosObj.data=data; }else if(autoStepObj.bodyType=='x-www-form-urlencoded'){ var data={} autoStepObj.body.forEach(k=>{ - data[k.id]=k.value + data[k.id]=this.parseEnvVarValue(k.value,env) }) axiosObj.data=data; } @@ -673,17 +692,16 @@ import JsonViewer from 'vue-json-viewer' if(autoStepObj.headers){ axiosObj.headers={} autoStepObj.headers.forEach(k=>{ - axiosObj.headers[k.id]=k.value + axiosObj.headers[k.id]=this.parseEnvVarValue(k.value,env) }) }else { axiosObj.headers={} } - debugger; - if(autoStepObj.authType=='bearer-token'){ - axiosObj.headers['Authorization'] = 'Bearer '+autoStepObj.authData.bearerToken + if(autoStepObj.authType=='bearer-token'){ + axiosObj.headers['Authorization'] = 'Bearer '+this.parseEnvVarValue(autoStepObj.authData.bearerToken,env) }else if(autoStepObj.authType=='basic-auth'){ - var username=autoStepObj.authData.username - var password=autoStepObj.authData.password + var username=this.parseEnvVarValue(autoStepObj.authData.username,env) + var password=this.parseEnvVarValue(autoStepObj.authData.password,env) var authorizationBasic = window.btoa(username + ':' + password); axiosObj.headers['Authorization'] = 'Basic '+authorizationBasic } @@ -697,14 +715,31 @@ import JsonViewer from 'vue-json-viewer' } return axiosObj }, - sendMsgForTestSetting(){ - debugger; + sendMsgForTestSetting(){ var autoStepObj=this.calcAutoStep(); if(!autoStepObj.url){ this.$notify({position:'bottom-left',showClose:true,message:'url不能为空',type: 'error'}) return; } - var axiosObj=this.autoStepToAxios(autoStepObj) + var casedbEnv={}; + if(this.xmTestCasedb && this.xmTestCasedb.envJson){ + casedbEnv={} + var casedbEnvList=JSON.parse(this.xmTestCasedb.envJson) + casedbEnvList.forEach(k=>{ + casedbEnv[k.id]=k.value + }) + } + + var testPlanEnv={}; + if(this.xmTestPlan && this.xmTestPlan.envJson){ + testPlanEnv={} + var testPlanEnvList=JSON.parse(this.xmTestPlan.envJson) + testPlanEnvList.forEach(k=>{ + testPlanEnv[k.id]=k.value + }) + } + Object.assign(casedbEnv,testPlanEnv) + var axiosObj=this.autoStepToAxios(autoStepObj,casedbEnv) //axiosObj.headers['Access-Control-Allow-Origin']='*' //axios.defaults.withCredentials = true // 若跨域请求需要带 cookie 身份识别 //axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' @@ -712,7 +747,7 @@ import JsonViewer from 'vue-json-viewer' this.testRes=res if(autoStepObj.expectResult){ var func=new Function('res','env',autoStepObj.expectResult) - var result=func(res,{}) + var result=func(res,casedbEnv) if(result==true){ this.$notify({position:'bottom-left',showClose:true,message:'成功',type: 'success'}) diff --git a/src/views/xm/core/xmTestCase/XmTestCaseMng.vue b/src/views/xm/core/xmTestCase/XmTestCaseMng.vue index 5826807e..5fe7c52f 100644 --- a/src/views/xm/core/xmTestCase/XmTestCaseMng.vue +++ b/src/views/xm/core/xmTestCase/XmTestCaseMng.vue @@ -74,7 +74,7 @@ - + diff --git a/src/views/xm/core/xmTestCasedb/XmTestCasedbEnv.vue b/src/views/xm/core/xmTestCasedb/XmTestCasedbEnv.vue index d1f3bdf0..2be97750 100644 --- a/src/views/xm/core/xmTestCasedb/XmTestCasedbEnv.vue +++ b/src/views/xm/core/xmTestCasedb/XmTestCasedbEnv.vue @@ -5,7 +5,7 @@

注意:

测试库的环境变量在整个测试库范围内共享。
测试计划的环境变量在整个测试计划范围内共享。
- 环境变量可以在自动化测试用例中通过${env.变量名}进行引用,比如变量baseApi,可以通过 ${env.baseApi}进行引用
+ 环境变量可以在自动化测试用例中通过#{变量名}进行引用,比如变量baseApi,可以通过 #{baseApi}进行引用
赋值顺序:优先查找测试计划中变量,如果不存在,则从测试库中查找变量
diff --git a/src/views/xm/core/xmTestPlan/XmTestPlanEnv.vue b/src/views/xm/core/xmTestPlan/XmTestPlanEnv.vue index 20562595..83e2c36a 100644 --- a/src/views/xm/core/xmTestPlan/XmTestPlanEnv.vue +++ b/src/views/xm/core/xmTestPlan/XmTestPlanEnv.vue @@ -4,7 +4,7 @@

注意:

测试计划的环境变量在整个测试计划范围内共享。
- 环境变量可以在自动化测试用例中通过${env.变量名}进行引用,比如变量baseApi,可以通过 ${env.baseApi}进行引用
+ 环境变量可以在自动化测试用例中通过#{变量名}进行引用,比如变量baseApi,可以通过 #{baseApi}进行引用
赋值顺序:优先查找测试计划中变量,如果不存在,则从测试库中查找变量