*** Settings *** Library Collections Library RequestsLibrary Resource ../../../03-Variable/BifangApiVariable.txt Resource ../../../02-Keyword/tsg_bfapi/policy_file_interface/FunctionalKeywords.robot Resource ProcessPolicyBody.robot Library Collections Resource ../Common.robot *** Variables *** ${policyUrl} /policy/compile *** Keywords *** #get查询策略,传入字典对象,该方法将字典对象自动拼接成get请求查询条件 QueryPolicies [Documentation] ... 查询策略,params为参数字典,version为接口版本号 [Arguments] ${params} ${version} Log To Console Call QueryPolicies Dictionary Should Contain Key ${params} policyType ${paramsStr} Dictionary-To-QueryParams ${params} ${response} BaseGetRequestForV2 ${policyUrl} ${paramsStr} ${version} ${rescode} Set Variable ${response['code']} [Return] ${rescode} ${response} AddPolicies [Documentation] ... 新增策略 ... returnData:是否返回数据,这里需要设置为1 ... policyList:策略列表,支持dict与list两种形式 ... version:接口版本号 ... 支持v1版本接口与v2版本接口 ... v1版本特殊参数说明: ... referenceObject=${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN ... 为字符串类型,每条引用的策略对象信息以','分隔 ... [objectId]|[protocolFileds],... ,多个protocolFileds用'&'连接 ... appObjectIdArray==${2},${3} ... 为字符串类型,以','分隔 ... v2版本特殊参数说明: ... v2版本中无referenceObject,取而代之的是source,destination,filterList ... source= ${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN ... destination= ${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN ... filterList= ${265}|${257}:TSG_FIELD_HTTP_HOST,${266}|${299}:TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN ... filterList由多个数字用‘|’分隔,加上:对上对应的protocolFiled, ... 一个filter中的protocolFiled是确定的,一个protocolFiled对应多个objectId ... appIdObjects==${2},${3} [Arguments] ${returnData} ${policyList} ${version} Log To Console Call AddPolicies ${returnData}= Run Keyword If '${returnData}' == '${EMPTY}' Set Variable 1 ... ELSE Set Variable ${returnData} #控制台打印参数 #Log To Console ${policyList} #必选参数判定 Should Not Be Empty ${policyList} ${dictType} = Evaluate type(${policyList}) ${body} Run Keyword If "${dictType}" == "" WxPolicyListOperation ${returnData} ${policyList} add ${version} ... ELSE IF "${dictType}" == "" WxPolicyOperation ${returnData} ${policyList} add ${version} ... ELSE Set Variable ${EMPTY} #${body} Set Variable {"opAction":"add","policyList":{"policyName":"wx-test","policyType":"tsg_security","action":"deny","userTags":"","doBlacklist":0,"doLog":1,"policyDesc":"","effectiveRange":{"tag_sets":[[]]},"userRegion":{"protocol":"SSL","method":"drop"},"source":[{"objectId":3101,"protocolField":"TSG_SECURITY_SOURCE_ADDR"}],"destination":[],"filterList":[{"filter":[{"objectId":3404,"protocolField":"TSG_FIELD_SSL_CN"}]}],"appIdObjects":[3],"isValid":0,"scheduleId":[]}} ${response} BasePostRequestForV2 ${policyUrl} ${body} ${version} ${policyIds} Run Keyword If "${returnData}" == "1" WxGet-PolicyIds ${response} ... ELSE Create List ${rescode} Set Variable ${response['code']} Should Be Equal As Strings ${rescode} 200 [Return] ${rescode} ${policyIds} UpdatePolicies [Documentation] ... 与新增类似,update多一个参数opAction ... opAction可为update,enable,disable [Arguments] ${returnData} ${policyList} ${version} ${opAction} Log To Console Call UpdatePolicies ${returnData}= Run Keyword If '${returnData}' == '${EMPTY}' Set Variable 1 ... ELSE Set Variable ${returnData} #必选参数判定 Should Not Be Empty ${policyList} ${dictType} = Evaluate type(${policyList}) ${body} Run Keyword If "${dictType}" == "" WxPolicyListOperation ${returnData} ${policyList} ${opAction} ${version} ... ELSE IF "${dictType}" == "" WxPolicyOperation ${returnData} ${policyList} ${opAction} ${version} ... ELSE Set Variable ${EMPTY} ${response} BaseEditRequestForV2 ${policyUrl} ${body} ${version} ${rescode} Set Variable ${response['code']} Should Be Equal As Strings ${rescode} 200 [Return] ${rescode} DeletePolicies [Arguments] ${params} ${paramsType} Evaluate type(${params}) Run Keyword And Return If "${paramsType}" == "" DeletePoliciy ${params} FOR ${param} IN @{params} ${rescode} WxDeletePolicy ${param} END [Return] ${rescode} WxDeletePolicy [Documentation] ... 删除策略 ... params,传入的删除字典 ... 结构为policyIds=${policyIds} (List) policyType=${policyType} (variable) [Arguments] ${params} ${response} BaseDeleteRequest /${version}${policyUrl} ${params} ${rescode} Set Variable ${response['code']} Should Be Equal As Strings ${rescode} 200 [Return] ${rescode} WxDeletePolicy1 [Documentation] ... 与DeletePoliciy类似,但是参数分开 ... policyIds 策略id list ... policyType 策略类型 [Arguments] ${policyIds} ${policyType} ${params} Create Dictionary policyIds=${policyIds} policyType=${policyType} ${response} BaseDeleteRequest /${version}${policyUrl} ${params} ${rescode} Set Variable ${response['code']} Should Be Equal As Strings ${rescode} 200 [Return] ${rescode} ImportPolicy [Documentation] ... 策略导入 [Arguments] ${filePath} ${fileName} ${policyType} Directory Should Exist ${path} File Should Exist ${path}/${filePath}/${fileName} File Should Not Be Empty ${path}/${filePath}/${fileName} ${size} Get File Size ${path}/${filePath}/${fileName} ${binFile} Evaluate (r'import_policy.json',open(r"${path}/${filePath}/${fileName}",'rb'),'application/json') Log ${binFile} ${data} Create Dictionary policyType=${policyType} ${file} Create Dictionary file=${binFile} ${response} BaseMultipartPostRequest ${policyUrl}/batch ${data} ${file} ${version} ${rescode} Set Variable ${response['code']} Should Be Equal As Strings ${rescode} 200 [Return] ${rescode} ExportPolicy [Documentation] ... 策略导出 [Arguments] ${policyType} ${policyIds} ${policyName} Should Not Be Empty ${policyType} ${params} Create Dictionary policyType=${policyType} Run Keyword If "${policyIds}"!="${EMPTY}" Set To Dictionary ${params} policyIds=${policyIds} Run Keyword If "${policyName}"!="${EMPTY}" Set To Dictionary ${params} policyName=${policyName} ${paramsStr} Dictionary-To-QueryParams ${params} ${response} BaseFormRequest1 ${policyUrl}/batch ${paramsStr} ${version} [Return] ${response} WriteFile [Arguments] ${filePath} ${fileName} ${content} Create File ${path}/${filePath}/${fileName} ${type} Evaluate type(${content}) ${content} Run Keyword If "${type}" == "" json.Dumps ${content} ... ELSE Set Variable ${content} Append To File ${path}/${filePath}/${fileName} ${content}