diff --git a/02-Keyword/tsg_bfapi/policy/ApiPolicyRequest.robot b/02-Keyword/tsg_bfapi/policy/ApiPolicyRequest.robot index 64df7ce..1743ffa 100644 --- a/02-Keyword/tsg_bfapi/policy/ApiPolicyRequest.robot +++ b/02-Keyword/tsg_bfapi/policy/ApiPolicyRequest.robot @@ -4,6 +4,8 @@ Library RequestsLibrary Resource ../../../03-Variable/BifangApiVariable.txt Resource ../../common/ApiHttpRequest.robot Variables ../../../05-Other/variable/policy/apipolicyrequesttest.py +Library REST http://${host}:${port} +Library json *** Variables *** ${policyapiv2} /v2/policy/compile @@ -29,20 +31,24 @@ GetPolicyData [Return] ${returnValue} AddPolicyData - [Arguments] ${data} ${returnKey} + [Arguments] ${returnData} ${data} [Documentation] [Get方法封装:第二层,] - ${response} PostRequestBase ${hosturl} ${policyapiv2} ${header} ${data} + ${response} PostHttpRequestBase ${hosturl} ${policyapiv2} ${header} ${data} ${response} to json ${response} - ${returnValue} get from dictionary ${response} ${returnKey} - [Return] ${returnValue} + ${policyIds} Run Keyword If "${returnData}" == "1" GetPolicyIds ${response} + ... ELSE Create List + ${rescode} Set Variable ${response['code']} + [Return] ${rescode} ${policyIds} AddObjectData - [Arguments] ${data} ${returnKey} + [Arguments] ${returnData} ${data} [Documentation] [Get方法封装:第二层,] ${response} PostHttpRequestBase ${hosturl} ${objectapiv1} ${header} ${data} ${response} to json ${response} - ${returnValue} get from dictionary ${response} ${returnKey} - [Return] ${returnValue} + ${objectIds} Run Keyword If "${returnData}" == "1" GetObjectIds ${response} + ... ELSE Create List + ${rescode} Set Variable ${response['code']} + [Return] ${rescode} ${objectIds} AddPolicyBase [Arguments] ${host} ${api} ${header} ${body} @@ -59,3 +65,111 @@ AddPolicyCode ${code} get from dictionary ${response} code [Return] ${code} + +GetObjectIds + [Documentation] + ... 获取结果中的对象ID + [Arguments] ${value} + Log Call Get-ObjectIds + ${objectIds} Create List + ${objectIdsTemp} Set Variable ${EMPTY} + ${return} ${data} Run Keyword And Ignore Error Get From Dictionary ${value} data + Return From Keyword If "${return}"=="FAIL" ${objectIdsTemp} + + FOR ${object} IN @{value['data']['objectList']} + Append To List ${objectIds} ${object['objectId']} + END + ${json} json.Dumps ${objectIds} ensure_ascii=False + ${json} Remove String ${json} [ + ${json} Remove String ${json} ] + [Return] ${json} + +GetPolicyIds + [Arguments] ${value} + [Documentation] 获取结果中的策略ID + ${policyIds} Create List + FOR ${policy} IN @{value['data']['policyList']} + #${policyIdList} Create List ${policy['policyId']} + #${policyObj} Create Dictionary policyType=${policy['policyType']} policyIds=${policyIdList} + #Append To List ${policyIds} ${policyObj} + Append To List ${policyIds} ${policy['policyId']} + END + ${len} Get Length ${policyIds} + ${policyIds} Run Keyword If ${len}==1 Set Variable ${policyIds[0]} + ... ELSE Set Variable ${policyIds} + [Return] ${policyIds} + + +DelPolicysAndGroupObjects + [Arguments] ${policyids} ${objectids} + #引用此关键字,${objectids}参数必须是双层列表,eg:['[1]','[2,3]','[4,5,6,7]'] + #删除和对象 + #删除策略 + log toDeletePolicy_DelPolicys + ${listlenth}= Get Length ${policyids} + Run Keyword If "${listlenth}"=="0" log no Policys to del + ... ELSE DelPolicys ${policyids} + #删除对象 + log todeleteobj_DelGroupObjects + Run Keyword If "${objectids}"=="${EMPTY}" log no Objects to del + ... ELSE DelGroupObjects ${objectids} + +DelPolicys + [Arguments] ${policyids} + ${listlenth}= Get Length ${policyids} + FOR ${var} IN RANGE ${listlenth} + log ${var} + DelPolicy ${policyids}[${var}] + END + +DelPolicy + [Arguments] ${body} + #删除策略 + log toDeletePolicy_DeletePolicyDeletePolicy + ${response} DeleteRequestBase /${version}/policy/compile ${body} + #{"policyType":"tsg_security","policyIds":[${policyids}]} + ${response_code} Get From Dictionary ${response} code + Should Be Equal As Strings ${response_code} 200 + ${response} Convert to String ${response} + log ${response} + #Should Be Equal As Strings ${response} {'code': 200, 'msg': 'Success', 'success': True} + +DelGroupObjects + [Arguments] ${objectids} + FOR ${var} IN @{objectids} + log ${var} + DelGroupObject ${var} + END + +DelGroupObject + [Arguments] ${objectids} + #删除对象 + log todeleteobj + ${response} DeleteRequestBase /${version}/policy/object {"objectIds":${objectids}} + ${response_code} Get From Dictionary ${response} code + Should Be Equal As Strings ${response_code} 200 + ${response} Convert to String ${response} + log ${response} + + +DelPolicyAndObjectAndProfile + [Arguments] ${policyids} ${objectids} ${profiles} + DelPolicysAndGroupObjects ${policyids} ${objectids} + DelProfiles ${profiles} + +DelProfiles + [Arguments] ${profiles} + FOR ${profile} IN @{profiles} + Run Keyword If "${profile}"!="" and ${profile}!="${EMPTY}" DelProfile ${profile}[typeUrl] ${profile}[profileIds] + END + +DelProfile + [Arguments] ${typeUrl} ${profileIds} + #删除对象 + log DeleteProfile + ${response} DeleteRequestBase /${version}/policy/profile/${typeUrl} {"profileIds":[${profileIds}]} + ${response_code} Get From Dictionary ${response} code + Should Be Equal As Strings ${response_code} 200 + #Integer ${response_code} 200 + ${response} Convert to String ${response} + log ${response} \ No newline at end of file diff --git a/02-Keyword/tsg_bfapi/policy/Test_ApiPolicyRequest.robot b/02-Keyword/tsg_bfapi/policy/Test_ApiPolicyRequest.robot index 269e690..53d82c8 100644 --- a/02-Keyword/tsg_bfapi/policy/Test_ApiPolicyRequest.robot +++ b/02-Keyword/tsg_bfapi/policy/Test_ApiPolicyRequest.robot @@ -1,10 +1,10 @@ *** Settings *** -Test Teardown DeletePolicyAndGroupObject ${policyIds} ${objectIds} +Test Teardown DelPolicysAndGroupObjects ${policyIds} ${objectIds} Resource ../../common/ApiHttpRequest.robot Resource ../../common/Util.robot Resource ApiPolicyRequest.robot Variables ../../../05-Other/variable/policy/apipolicyrequesttest.py -Resource ../../tsg_bfapi/PolicyObject.robot +#Resource ../../tsg_bfapi/PolicyObject.robot *** Variables *** @@ -18,16 +18,38 @@ Test-GetRequestResposeCodePrivate Test-AddPolicyData [Tags] test + #获取当前Case名称 + log ${TEST NAME} + #从变量文件中加载的新增对象JSON串 log ${IP_OBJ} - ${returnKey} Set Variable data - ${header} Create Dictionary Content-Type=application/json Authorization=${token} - ${ipid} AddObjectData ${Test-AddPolicyData_IP_OBJ} ${returnKey} + #add Object,return statuscode,objectid 多个返回以英文逗号分隔 + ${returncode} ${ipid} AddObjectData 1 ${IP_OBJ} + #新增对象添加到删除对象列表,及时添加避免下面异常导致遗留垃圾数据 + ${objectid} Set Variable ${ipid} + ${objectIds} Create List [${objectid}] + #从变量文件中加载的新增对象JSON串 log ${FQDN_OBJ} - ${fqdnid} AddObjectData ${FQDN_OBJ} + #add Object,return statcode,objectid + ${returncode} ${fqdnid} AddObjectData 1 ${FQDN_OBJ} + #新增对象添加到删除对象列表,及时添加避免下面异常导致遗留垃圾数据 + ${objectid} Catenate SEPARATOR=, ${objectid} ${fqdnid} + ${objectIds} Create List [${objectid}] + #从变量文件中加载的新增策略的JSON串 log ${SECURITY_POLICY} - ${POLICY} Replace String ${SECURITY_POLICY} IP_OBJ ${ipid} - ${POLICY} Replace String ${SECURITY_POLICY} FQDN_OBJ ${fqdnid} - ${policyid} AddPolicyData ${POLICY} + #替换策略中的引用内容,需要在变量文件中提前固定内容 + #替换策略中的引用内容,源、目的对象对象引用 + ${SECURITY_POLICY} Replace String ${SECURITY_POLICY} IP_OBJ ${ipid} + #替换策略中的引用内容,filter,sni对象对象引用 + ${SECURITY_POLICY} Replace String ${SECURITY_POLICY} FQDN_OBJ ${fqdnid} + #替换策略中的策略名称 + ${SECURITY_POLICY} Replace String ${SECURITY_POLICY} policyNameautotest ${TEST NAME} + log ${SECURITY_POLICY} + #add Policy,return statuscode,policyid 多个返回以逗号分隔 + ${returncode} ${policyid} AddPolicyData 1 ${SECURITY_POLICY} + #新增对象添加到删除策略列表,及时添加避免后面异常导致遗留垃圾数据 + ${policyId1} set Variable {"policyType":"tsg_security","policyIds":[${policyid}]} + ${policyIds} Create List ${policyId1} + Test-GetRandomIP [Tags] test diff --git a/05-Other/variable/policy/apipolicyrequesttest.py b/05-Other/variable/policy/apipolicyrequesttest.py index 6e8f44d..8f4c78d 100644 --- a/05-Other/variable/policy/apipolicyrequesttest.py +++ b/05-Other/variable/policy/apipolicyrequesttest.py @@ -1,7 +1,7 @@ def get_variables(): variables = {"IP_OBJ":'{"opAction":"add","refuseCode":true,"returnData":1,"objectList":{"objectType":"ip","objectSubType":"endpoint","isValid":1,"isInitialize":0,"isExclusion":0,"objectName":"autotest","objectDesc":"autotest","subObjectIds":[],"addItemList":[{"ip":"192.168.32.69","ipIf":false,"portIf":false,"port":"1-65535","itemId":"","clientIp1":"192.168.32.69","clientIp2":"192.168.32.69","clientPort1":"1","clientPort2":"65535","clientIpFormat":"range","clientPortFormat":"range","addrType":4,"direction":0,"temporaryItemId":1606647164},{"ip":"1.1.1.1","ipIf":false,"portIf":false,"port":"0-65535","itemId":"","clientIp1":"1.1.1.1","clientIp2":"1.1.1.1","clientPort1":"","clientPort2":"","clientIpFormat":"range","clientPortFormat":"range","addrType":4,"direction":0,"temporaryItemId":1606647177}],"updateItemList":[],"deleteItemIds":[],"iconColor":"#31739C"}}', - "FQDN_OBJ":'"{"opAction":"add","returnData":1,"objectList":{"objectType":"fqdn","objectSubType":"fqdn","isValid":1,"isInitialize":0,"isExclusion":0,"objectName":"autotest","objectDesc":"","subObjectIds":[],"addItemList":[{"keywordArray":["$www.test.com"],"t":1606647302921,"itemId":"","isHexbin":0,"state":2},{"keywordArray":["*autotest.com"],"t":1606647302921,"isHexbin":0,"state":2}],"updateItemList":[],"deleteItemIds":[],"objectId":""}}"', - "SECURITY_POLICY":'{"opAction":"add","refuseCode":true,"policyList":{"policyId":"","policyName":"autotest","policyType":"tsg_security","action":"intercept","userTags":"","doBlacklist":0,"doLog":1,"policyDesc":"dxytest","effectiveRange":{"tag_sets":[[]]},"userRegion":{"protocol":"SSL","keyring":1,"decryption":1,"decrypt_mirror":{"enable":1,"mirror_profile":25}},"source":[{"objectId":IP_OBJ,"protocolField":"TSG_SECURITY_SOURCE_ADDR"}],"destination":[{"objectId":IP_OBJ,"protocolField":"TSG_SECURITY_DESTINATION_ADDR"}],"filterList":[{"filter":[{"objectId":FQDN_OBJ,"protocolField":"TSG_FIELD_SSL_SNI"}]}],"appIdObjects":[44],"appSelectorObjects":[],"isValid":1,"scheduleId":[]}}', + "FQDN_OBJ":'{"opAction":"add","refuseCode":true,"returnData":1,"objectList":{"objectType":"fqdn","objectSubType":"fqdn","isValid":1,"isInitialize":0,"isExclusion":0,"objectName":"autotest","objectDesc":"","subObjectIds":[],"addItemList":[{"keywordArray":["*autotest.com"],"t":"16088629755980","itemId":"","isHexbin":0,"state":2},{"keywordArray":["$www.test.com"],"t":"16088629755981","isHexbin":0,"state":2}],"updateItemList":[],"deleteItemIds":[],"iconColor":"#31739C"}}', + "SECURITY_POLICY":'{"opAction":"add","refuseCode":true,"returnData":1,"policyList":{"policyId":"","policyName":"policyNameautotest","policyType":"tsg_security","action":"intercept","userTags":"","doBlacklist":0,"doLog":1,"policyDesc":"autotest","effectiveRange":{"tag_sets":[[]]},"userRegion":{"protocol":"SSL","keyring":1,"decryption":1,"decrypt_mirror":{"enable":0,"mirror_profile":null}},"source":[{"objectId":IP_OBJ,"protocolField":"TSG_SECURITY_SOURCE_ADDR"}],"destination":[{"objectId":IP_OBJ,"protocolField":"TSG_SECURITY_DESTINATION_ADDR"}],"filterList":[{"filter":[{"objectId":FQDN_OBJ,"protocolField":"TSG_FIELD_SSL_SNI"}]}],"appIdObjects":[44],"appSelectorObjects":[],"isValid":1,"scheduleId":[55]}}', "STRINGS":["one","two","kolme","four"], "NUMBERS":[1,66,3.1415926], "MAPPING":'{"one":1,"two":2,"three":3}',