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}进行引用
赋值顺序:优先查找测试计划中变量,如果不存在,则从测试库中查找变量