feat(API):新增关键字功能,用于添加策略对象时参数组装

This commit is contained in:
zhangwenqing
2020-04-07 14:11:59 +08:00
parent 52aabf8e9d
commit d12a51d62f
2 changed files with 260 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
*** Settings ***
Resource ../../03-Variable/BifangApiVariable.txt
Resource ../tsg_common/ManagePolicyBody.robot
Library REST http://${host}:${port}
Library Collections
Library RequestsLibrary
@@ -56,6 +57,14 @@ AddPolicy
${rescode} Set Variable ${response['code']}
[Return] ${rescode} ${policyId}
AddPolicy2
[Arguments] ${returnData} ${policyList}
${body} ParamsOpertion ${returnData} ${policyList}
${response} BasePostRequest /v1/policy/compile body=${body}
${policyId} Set Variable ${response['data']['policyList'][0]['policyId']}
${rescode} Set Variable ${response['code']}
[Return] ${rescode} ${policyId}
EditPolicy
[Arguments] @{body}
[Return] ${rescode} ${objectId}

View File

@@ -0,0 +1,251 @@
*** Settings ***
Library json
Library Collections
Resource ../../03-Variable/BifangApiVariable.txt
Resource ../../02-Keyword/tsg_bfapi/policyobject.robot
*** Keywords ***
# ... 特殊参数说明:
# ... effectiveRange=Nursurtan|Transtelecom&Astel,Almaty&Nursurtan,|Astel&Transtelecom
# ... 为字符串类型,每条生效区域信息以','分隔
# ... ①以'|'字符开头表示仅为isp信息effectiveRange=|Astel&Transtelecom
# ... ②非'|'字符开头表示仅为location信息或location和isp信息
# ... effectiveRange=Nursurtan仅为location信息
# ... effectiveRange=Nursurtan|Transtelecom&Astellocation和isp信息
# ... userRegion=protocol:HTTP,keyring:${1}
# ... 为字符串类型,每条动作参数以','分隔
# ... [key]:[value],...
# ... referenceObject=${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN
# ... 为字符串类型,每条引用的策略对象信息以','分隔
# ... [objectId]|[protocolFileds],... 多个protocolFileds用'&'连接
# ... scheduleId=${3},${1}
# ... 为字符串类型,以','分隔
# ... appObjectIdArray==${2},${3}
# ... 为字符串类型,以','分隔
# ...
# ... 注:数字类型变量为${0}、${1}、${...}
# # 例子
# ${dict} Create Dictionary
# ... policyName=test_policy_add
# ... policyType=tsg_security
# ... policyDesc=desc
# ... action=intercept
# ... userTags=
# ... doLog=${2}
# ... effectiveRange=Nursurtan|Transtelecom&Astel,Almaty&Nursurtan,|Astel&Transtelecom
# ... userRegion=protocol:HTTP,keyring:${1}
# ... referenceObject=${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN
# ... isValid=${0}
# ... scheduleId=${3},${1}
# ... appObjectIdArray=${2},${3}
# ${rescode} ${policyId} AddPolicy2 ${1} ${dict}
ParamsOpertion
[Documentation]
... 描述入口opAction参数固定为'add'
... 参数returnData: 必传,是否返回请求数据。可选${0}(不返回)/${1}(返回)。
... policyList: 必传,字典类型。字典内可选参数信息:
... action: 必传,无默认值
... policyType: 必传,无默认值
... policyName: 可选,默认为'test_policy_add'
... policyDesc: 可选,无默认值
... userTags: 可选,无默认值
... doLog: 可选,是否生成日志,${0}(不需要),${1}(需要),${2}(只记录结构化日志)。默认为${2}
... isValid: 可选,${0}(无效),${1}(生效)
... effectiveRange: 可选
... userRegion: 可选
... referenceObject: 可选
... scheduleId: 可选
... appObjectIdArray: 可选
[Arguments] ${returnData} ${policyList}
${emptyList} Create List
# 断言必传参数
Should Not Be Empty ${policyList}[policyType]
Should Not Be Empty ${policyList}[action]
# 取可选参数,为传入设置默认值
${return} ${policyName} Run Keyword And Ignore Error Set Variable ${policyList}[policyName]
Run Keyword If "${return}"=="FAIL" or "${policyName}"=="${EMPTY}" Set To Dictionary ${policyList} policyName=test_policy_add
${return} ${policyDesc} Run Keyword And Ignore Error Set Variable ${policyList}[policyDesc]
Run Keyword If "${return}"=="FAIL" or "${policyDesc}"=="${EMPTY}" Set To Dictionary ${policyList} policyDesc=
${return} ${userTags} Run Keyword And Ignore Error Set Variable ${policyList}[userTags]
Run Keyword If "${return}"=="FAIL" or "${userTags}"=="${EMPTY}" Set To Dictionary ${policyList} userTags=
${return} ${doLog} Run Keyword And Ignore Error Set Variable ${policyList}[doLog]
Run Keyword If "${return}"=="FAIL" or "${doLog}"=="${EMPTY}" Set To Dictionary ${policyList} doLog=${2}
${return} ${isValid} Run Keyword And Ignore Error Set Variable ${policyList}[isValid]
Run Keyword If "${return}"=="FAIL" or "${isValid}"=="${EMPTY}" Set To Dictionary ${policyList} isValid=${0}
${return} ${scheduleId} Run Keyword And Ignore Error Set Variable ${policyList}[scheduleId]
${scheduleIdV} Run Keyword If "${return}"=="FAIL" or "${scheduleId}"=="${EMPTY}" Set Variable ${emptyList}
... ELSE Evaluate re.split('[,]', '${scheduleId}') re
${return} ${appObjectIdArray} Run Keyword And Ignore Error Set Variable ${policyList}[appObjectIdArray]
${appObjectIdArrayV} Run Keyword If "${return}"=="FAIL" or "${appObjectIdArray}"=="${EMPTY}" Set Variable ${emptyList}
... ELSE Evaluate re.split('[,]', '${appObjectIdArray}') re
Set To Dictionary ${policyList} scheduleId=${scheduleIdV}
Set To Dictionary ${policyList} appObjectIdArray=${appObjectIdArrayV}
# 固定值
Set To Dictionary ${policyList} policyId= doBlacklist=${0}
# 分别处理EffectiveRange、UserRegion和ReferenceObject参数
ManageEffectiveRange ${policyList}
ManageUserRegion ${policyList}
ManageReferenceObject ${policyList}
# 转为json结构并返回
${dict} Create Dictionary opAction=add returnData=${returnData} policyList=${policyList}
${json} json.Dumps ${dict} ensure_ascii=False
Log ${json}
[Return] ${json}
ManageEffectiveRange
# 处理EffectiveRange
[Arguments] ${policyList}
${emptyList} Create List
${emptyListDouble} Create List ${emptyList}
${return} ${effectiveRange} Run Keyword And Ignore Error Set Variable ${policyList}[effectiveRange]
${value} Run Keyword If "${return}"=="FAIL" or "${effectiveRange}"=="${EMPTY}" Create Dictionary tag_sets=${emptyListDouble}
... ELSE AnalysisEffectiveRange ${effectiveRange}
Set To Dictionary ${policyList} effectiveRange=${value}
AnalysisEffectiveRange
# 解析EffectiveRange区分值类型
[Arguments] ${effectiveRange}
${value} Create List
${list} Evaluate re.split('[,]', '${effectiveRange}') re
FOR ${var} IN @{list}
${param} Run Keyword If '${var}'.startswith('|') EffectiveRangeValueType1 ${var}
... ELSE IF '|' in '${var}' EffectiveRangeValueType2 ${var}
... ELSE EffectiveRangeValueType3 ${var}
Append To List ${value} ${param}
END
${obj} Create Dictionary tag_sets=${value}
[Return] ${obj}
EffectiveRangeValueType1
# EffectiveRange值类型1仅为isp信息
[Arguments] ${str}
# #Astel
${value} Evaluate '${str}'[1:]
${valueList} Create List
${list} Evaluate re.split('[&]', '${value}') re
FOR ${var} IN @{list}
Append To List ${valueList} ${var}
END
${obj} Create Dictionary tag=isp value=${valueList}
${return} Create List ${obj}
[Return] ${return}
EffectiveRangeValueType2
# EffectiveRange值类型2location|isp都包含
[Arguments] ${str}
# Nursurtan#Transtelecom
${list} Evaluate re.split('[|]', '${str}') re
# Location
${valueList1} Create List
${list1} Evaluate re.split('[&]', '${list}[0]') re
FOR ${var} IN @{list1}
Append To List ${valueList1} ${var}
END
${obj1} Create Dictionary tag=location value=${valueList1}
# ISP
${valueList2} Create List
${list2} Evaluate re.split('[&]', '${list}[1]') re
FOR ${var} IN @{list2}
Append To List ${valueList2} ${var}
END
${obj2} Create Dictionary tag=isp value=${valueList2}
${return} Create List ${obj1} ${obj2}
[Return] ${return}
EffectiveRangeValueType3
# EffectiveRange值类型3仅为location信息
[Arguments] ${str}
# Almaty
${valueList} Create List
${list} Evaluate re.split('[&]', '${str}') re
FOR ${var} IN @{list}
Append To List ${valueList} ${var}
END
${obj} Create Dictionary tag=location value=${valueList}
${return} Create List ${obj}
[Return] ${return}
ManageUserRegion
[Arguments] ${policyList}
${emptyObj} Create Dictionary
${return} ${userRegion} Run Keyword And Ignore Error Set Variable ${policyList}[userRegion]
${value} Run Keyword If "${return}"=="FAIL" or "${userRegion}"=="${EMPTY}" Create Dictionary
... ELSE AnalysisUserRegion ${userRegion}
Set To Dictionary ${policyList} userRegion=${value}
Log ${policyList}[userRegion]
AnalysisUserRegion
[Arguments] ${userRegion}
# protocol:HTTP,keyring:1
${obj} Create Dictionary
${list} Evaluate re.split('[,]', '${userRegion}') re
FOR ${var} IN @{list}
${k} Evaluate '${var}'[0:'${var}'.find(':')]
${v} Evaluate '${var}'['${var}'.find(':')+1:]
${v} Run Keyword If '${v}'.isdigit() Evaluate int('${v}')
... ELSE Set Variable ${v}
Set To Dictionary ${obj} ${k}=${v}
END
[Return] ${obj}
ManageReferenceObject
# 处理引用对象字符串
[Arguments] ${policyList}
${emptyList} Create List
${clientHostObj} Run Keyword If '${addTestClentIPFlag}'=='1' ManageClientObject
Run Keyword If "${clientHostObj}"!="${None}" Append To List ${emptyList} ${clientHostObj}
${defaultObj} Create Dictionary
${return} ${referenceObject} Run Keyword And Ignore Error Set Variable ${policyList}[referenceObject]
${value} Run Keyword If "${return}"=="FAIL" or "${referenceObject}"=="${EMPTY}" Create List ${defaultObj}
... ELSE AnalysisReferenceObject ${referenceObject}
# 若参数为空,设置默认结构
FOR ${var} IN @{value}
Run Keyword If ${var}!={} Append To List ${emptyList} ${var}
END
Set To Dictionary ${policyList} referenceObject=${emptyList}
ManageClientObject
# 增加引用测试终端IP策略对象
${emptyList} Create List
${obj} Create Dictionary objectId=${testClentID} protocolFields=${emptyList}
[Return] ${obj}
AnalysisReferenceObject
# 解析引用对象
[Arguments] ${referenceObject}
${objList} Create List
${list} Evaluate re.split('[,]', '${referenceObject}') re
FOR ${var} IN @{list}
${emptyList} Create List
${emptyObj} Create Dictionary
${key} Evaluate '${var}'[0:'${var}'.find('|')]
${values} Evaluate '${var}'['${var}'.find('|')+1:]
${valueList} InnerForEach ${values}
${key} Run Keyword If '${key}'.isdigit() Evaluate int('${key}')
... ELSE Set Variable ${key}
Set To Dictionary ${emptyObj} objectId=${key}
Set To Dictionary ${emptyObj} protocolFields=${valueList}
Append To List ${objList} ${emptyObj}
END
[Return] ${objList}
InnerForEach
# 循环嵌套
[Arguments] ${values}
${emptyList} Create List
${list} Evaluate re.split('[&]', '${values}') re
FOR ${var} IN @{list}
Append To List ${emptyList} ${var}
END
[Return] ${list}