This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
dongxiaoyan-tsg-autotest/02-Keyword/tsg_bfapi/policy_object/Object.robot
2021-05-17 09:57:31 +08:00

332 lines
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

*** Settings ***
Library Collections
Library RequestsLibrary
Resource ../../../03-Variable/BifangApiVariable.txt
Resource ../../../02-Keyword/tsg_bfapi/policy_file_interface/FunctionalKeywords.robot
Resource ProcessObjectBody.robot
Library Collections
Resource ../Common.robot
Library ../../../04-CustomLibrary/Library/fileOperations.py
Library DatabaseLibrary
*** Variables ***
${objectUrl} /policy/object
${categoryUrl} /category/dict
${applicationDictUrl} /application/update/dict
${fileUploaduRL} /system/feature/update/
*** Keywords ***
AddObjects
[Arguments] ${returnData} ${objectList}
[Documentation] 新增策略对象
... objectList,策略对象,可为list类型与dict类型
... addItemList自动过滤itemId
... updateItemList自动过滤isInitialize(update时该字段引发异常)
... ipItem格式为dict,自动过滤空的字段
... stringItem格式为dict,需要注意keywordArray字段应传入逗号分隔的字符串eg: keyword1,keyword2
... http_signature为代表的拓展关键字keywordArray字段也是以逗号分隔的
... returnData是否返回数据固定为1
${returnData}= Run Keyword If '${returnData}' == '${EMPTY}' Set Variable 1
... ELSE Set Variable ${returnData}
#必选参数判定
Should Not Be Empty ${objectList}
${dictType} = Evaluate type(${objectList})
${body} Run Keyword If "${dictType}" == "<class 'list'>" ObjectListOperation ${returnData} ${objectList} add
... ELSE IF "${dictType}" == "<class 'dict'>" ObjectOperation ${returnData} ${objectList} add
... ELSE Set Variable ${EMPTY}
${response} BasePostRequestForV2 ${objectUrl} ${body} ${version}
${objectIds} Run Keyword If "${returnData}" == "1" Get-ObjectIds ${response}
... ELSE Create List
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${rescode} ${objectIds}
UpdateObjects
[Arguments] ${returnData} ${objectList} ${opAction}
[Documentation] 更新策略对象
... objectList,策略对象,可为list类型与dict类型
... addItemList自动过滤itemId
... updateItemList自动过滤isInitialize(update时该字段引发异常)
... ipItem格式为dict,自动过滤空的字段
... stringItem格式为dict,需要注意keywordArray字段应传入逗号分隔的字符串eg: keyword1,keyword2
... http_signature为代表的拓展关键字keywordArray字段也是以逗号分隔的
... returnData是否返回数据固定为1
... opAction可为updateenable,disable
${returnData}= Run Keyword If '${returnData}' == '${EMPTY}' Set Variable 1
... ELSE Set Variable ${returnData}
#必选参数判定
Should Not Be Empty ${objectList}
${dictType} = Evaluate type(${objectList})
${body} Run Keyword If "${dictType}" == "<class 'list'>" ObjectListOperation ${returnData} ${objectList} ${opAction}
... ELSE IF "${dictType}" == "<class 'dict'>" ObjectOperation ${returnData} ${objectList} ${opAction}
... ELSE Set Variable ${EMPTY}
${response} BaseEditRequestForV2 ${objectUrl} ${body} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${rescode}
UpdateInstall
[Arguments] ${updateDict}
[Documentation] 更新策略对象
... objectList,策略对象,可为list类型与dict类型
... addItemList自动过滤itemId
... updateItemList自动过滤isInitialize(update时该字段引发异常)
... ipItem格式为dict,自动过滤空的字段
... stringItem格式为dict,需要注意keywordArray字段应传入逗号分隔的字符串eg: keyword1,keyword2
... http_signature为代表的拓展关键字keywordArray字段也是以逗号分隔的
... returnData是否返回数据固定为1
... opAction可为updateenable,disable
#必选参数判定
Should Not Be Empty ${updateDict}
${bodyJson} json.Dumps ${updateDict} ensure_ascii=False
${response} BaseEditRequestForV2 ${fileUploaduRL} ${body} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${rescode}
GetObjectItems
[Arguments] ${params}
[Documentation] 获取策略对象中的item,策略对象单元
... 当updateItemList中有需要传入数据时
... 调用此关键字
#必选参数判定
Should Not Be Empty ${params}
${paramsStr} Dictionary-To-QueryParams ${params}
${response} BaseFormRequest /policy/items ${paramsStr} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
${data} Set Variable ${response['data']}
${itemIds} Create List
FOR ${item} IN @{data['list']}
Append To List ${itemIds} ${item['itemId']}
END
[Return] ${rescode} ${itemIds} ${data['list']}
GetObjectItems1
[Arguments] ${params}
[Documentation] 获取策略对象中的item,策略对象单元
... 当updateItemList中有需要传入数据时
... 调用此关键字
#必选参数判定
Should Not Be Empty ${params}
${paramsStr} Dictionary-To-QueryParams ${params}
${response} BaseFormRequest /policy/items ${paramsStr} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
${data} Set Variable ${response['data']}
[Return] ${rescode} ${data}
DeleteObjects
[Arguments] ${objectIds}
[Documentation] 删除策略对象
... params传入的删除字典
... 结构为[1,2,3]
${type} Evaluate isinstance(${objectIds},list)
Should Be True ${type}
${dict} Create Dictionary objectIds=${objectIds}
${json} json.Dumps ${dict} ensure_ascii=False
${response} BaseDeleteRequest /${version}${objectUrl} ${json}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${rescode}
ImportObject
[Arguments] ${filePath} ${fileName} ${objectType} ${objectSubType} ${objectName}
[Documentation] 策略对象导入
... filePath文件路径
... fileName文件名称
... objectType对象类型
... objectSubType对象子类型
... objectName对象名称
... jira CHON-12导入限制需求支持
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}
Should Not Be Empty ${objectType}
#获取Item 的总数
${total} GetItemNum ${objectType} ${objectSubType}
#获取导入文件中的总行数
#${lines} CountLines ${path}/${filePath}/${fileName}
${lines} CountLines ${path}/${filePath}/${fileName}
#总数超过一定数据量测试不通过
${total1} Evaluate ${total}+${lines}
#链接数据库查询上限
Connect To Database Using Custom Params pymysql ${mysqlHost}
${objectLimit} query SELECT cfg_value FROM t_sys_cfg WHERE cfg_name='${objectType}_upper_limit'
${objectLimit} Set Variable ${objectLimit[0][0]}
${remaining} Evaluate ${objectLimit}-${total}
log ${objectType}剩余可导入量为:${remaining}
${testType} Evaluate type($objectLimit)
Disconnect From Database
#jira CHON-12导入限制需求支持
Run Keyword If "${objectType}"=="url" and ${total1}>${objectLimit} log 当前已经存在item个数${total},待导入个数${lines},总数超过${objectLimit}条!
... ELSE IF ${total1}>${objectLimit} log 当前已经存在item个数${total},待导入个数${lines},总数超过${objectLimit}条!
${objectSubType} Run Keyword If "${objectType}"=="ip" and "${objectSubType}"=="${EMPTY}" Set Variable endpoint
... ELSE Set Variable ${objectSubType}
${subfix} Fetch From Right ${fileName} .
${binFile} Run Keyword If "${subfix}"=="txt" Evaluate (r'${fileName}',open(r"${path}/${filePath}/${fileName}",'rb'),'text/plain')
... ELSE IF "${subfix}"=="csv" Evaluate (r'${fileName}',open(r"${path}/${filePath}/${fileName}",'rb'),'application/vnd.ms-excel')
... ELSE ${EMPTY}
${data} Create Dictionary objectType=${objectType}
Run Keyword If "${objectSubType}"!="${EMPTY}" Set To Dictionary ${data} objectSubType=${objectSubType}
Run Keyword If "${objectName}"!="${EMPTY}" Set To Dictionary ${data} objectName=${objectName}
${file} Create Dictionary file=${binFile}
${response} BaseMultipartPostRequest ${objectUrl}/batch ${data} ${file} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${rescode} ${objectType} ${response}
ImportApplication
[Arguments] ${filePath} ${fileName} ${feature} ${code}
[Documentation] 策略对象导入
... filePath文件路径
... fileName文件名称
... feature是特征
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} Run Keyword If "${feature}"=="${EMPTY}" Evaluate (r'${fileName}',open(r"${path}/${filePath}/${fileName}",'rb'),'application/xml')
... ELSE IF "${feature}"=="app_library" or "${feature}"=="app_signature" Evaluate (r'${fileName}',open(r"${path}/${filePath}/${fileName}",'rb'),'application/octet-stream')
... ELSE ${EMPTY}
${file} Create Dictionary file=${binFile}
# ${response} BaseMultipartPostRequest ${objectUrl}/batch ${EMPTY} ${file} ${version}
${response} Run Keyword If "${feature}"=="${EMPTY}" BaseMultipartPostRequest ${applicationDictUrl} ${EMPTY} ${file} ${version}
... ELSE IF "${feature}"=="app_library" or "${feature}"=="app_signature" BaseMultipartPostRequest ${fileUploaduRL} ${EMPTY} ${file} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} ${code}
ExportObject
[Arguments] ${objectType} ${objectSubType} ${objectIds} ${objectName}
[Documentation] 策略对象导出
... objectType ip,url等
... objectSubType 子类型
... objectIds 1,2,3
... objectName 字符串
Should Not Be Empty ${objectType}
${params} Create Dictionary objectType=${objectType}
Run Keyword If "${objectSubType}"!="${EMPTY}" Set To Dictionary ${params} objectSubType=${objectSubType}
Run Keyword If "${objectIds}"!="${EMPTY}" Set To Dictionary ${params} objectIds=${objectIds}
Run Keyword If "${objectName}"!="${EMPTY}" Set To Dictionary ${params} objectName=${objectName}
${response} BaseGetRequestReturnBinary ${objectUrl}/batch ${params} ${version}
[Return] ${response}
GetItemNum
[Arguments] ${objectType} ${objectSubType}
[Documentation] 获取策略对象单元总数
${getTotal} Create Dictionary pageNo=${1} pageSize=${1}
Run Keyword If "${objectType}"=="ip" and "${objectSubType}"=="endpoint" Set To Dictionary ${getTotal} itemType=IP
... ELSE IF "${objectType}"=="ip" and "${objectSubType}"=="geo_location" Set To Dictionary ${getTotal} itemType=geo_location
... ELSE IF "${objectType}"=="ip" and "${objectSubType}"=="as_number" Set To Dictionary ${getTotal} itemType=as_number
... ELSE IF "${objectType}"=="url" Set To Dictionary ${getTotal} itemType=URL
... ELSE Set To Dictionary ${getTotal} itemType=${objectType}
${rescode} ${data} GetObjectItems1 ${getTotal}
${total} Set Variable ${data['total']}
Run Keyword If "${objectType}"=="fqdn_category" Set To Dictionary ${getTotal} isInitialize=1
${rescode} ${data} Run Keyword If "${objectType}"=="fqdn_category" GetObjectItems1 ${getTotal}
... ELSE Set Variable ${rescode} ${data}
${total} Run Keyword If "${objectType}"=="fqdn_category" Evaluate ${total} - ${data['total']}
... ELSE Set Variable ${total}
[Return] ${total}
CountLines1
[Arguments] ${file}
[Documentation] 获取文件总行数
${count} Set Variable ${0}
${openFile} Evaluate enumerate(open(r"${file}",'r'))
FOR ${line} IN @{openFile}
${val} Run Keyword If "${line[0]}"=="0" Set Variable ${line[1]}
... ELSE Set Variable ${EMPTY}
${val2} Run Keyword If "${line[1]}"=="\n" Set Variable ${line[0]}
... ELSE Set Variable ${EMPTY}
log ${line}
log "${line[1]}"
${match} Get Regexp Matches ${val} ^-->
#${match2} Get Regexp Matches ${val} ^(\t)*$\n
${len} Get Length ${match}
#${len2} Get Length ${match2}
${count} Run Keyword If "${line[0]}"=="0" and ${len}>0 Set Variable ${count}
... ELSE Evaluate ${count}+1
END
[Return] ${count}
PolicProtocolFields
[Arguments] ${policyType} ${protocol} ${objectType}
[Documentation] 策略对象生效协议字段查询
... policyType策略类型
... protocol协议
... objectType对象类型
${dict} Create Dictionary
Run Keyword If "${policyType}"!="${EMPTY}" Set To Dictionary ${dict} policyType=${policyType}
Run Keyword If "${protocol}"!="${EMPTY}" Set To Dictionary ${dict} protocol=${protocol}
Run Keyword If "${objectType}"!="${EMPTY}" Set To Dictionary ${dict} objectType=${objectType}
${parmStr} Dictionary-To-QueryParams ${dict}
${response} BaseFormRequest ${objectUrl}/protocolFields ${parmStr} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${response['data']}
ObjectReference
[Arguments] ${objectId}
[Documentation] 策略对象相关性查询
${response} BaseFormRequest ${objectUrl}/reference objectId=${objectId} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${response['data']}
AppIdTreeSearch
[Arguments] ${referenceObjectId}
[Documentation] App ID对象树查询
${response} BaseFormRequest ${objectUrl}/appId/tree referenceObjectId=${referenceObjectId} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${response['data']}
AddCategories
[Arguments] ${returnData} ${categoryList} ${opAction} ${testCode}=null
[Documentation] 新增Category
... returnData是否返回数据固定为1
Comment 此处思路给category单独的另一套关键字原因地址与json串名称与Object部分不同了
${returnData}= Run Keyword If '${returnData}' == '${EMPTY}' Set Variable 1
... ELSE Set Variable ${returnData}
#必选参数判定
Should Not Be Empty ${categoryList}
${dictType} = Evaluate type(${categoryList})
${body} Run Keyword If "${dictType}" == "<class 'list'>" CategoryListOperation ${returnData} ${categoryList} ${opAction}
... ELSE IF "${dictType}" == "<class 'dict'>" CategoryOperation ${returnData} ${categoryList} ${opAction}
... ELSE Set Variable ${EMPTY}
log ${body}
# ${response} BasePostRequestForV2 ${categoryUrl} ${body} ${version}
${response} Run Keyword If "${opAction}"=="add" BasePostRequestForV2 ${categoryUrl} ${body} ${version}
... ELSE IF "${opAction}"=="update" BaseEditRequestForV2 ${categoryUrl} ${body} ${version}
${CategoryObjIds} Run Keyword If "${returnData}" == "1" and ${testCode} == 200 and "${opAction}"=="add" Get-CategoryObjIds ${response}
... ELSE Set Variable ${EMPTY}
${CategoryIds} Run Keyword If "${returnData}" == "1" and ${testCode} == 200 and "${opAction}"=="add" Get-CategoryIds ${response}
... ELSE Set Variable ${EMPTY}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} ${testCode}
[Return] ${rescode} ${CategoryObjIds} ${CategoryIds}
QueryUpadateRecord
[Arguments] ${body} ${code}
${response} BaseGetRequestOK /${version}/system/feature/update body=${body}
log ${response}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} ${code}
[Return] ${rescode}
QueryCategory
#hbn
[Arguments] ${body} ${code}
${response} BaseGetRequest /${version}/category/dict body=${body}
log ${response}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} ${code}
# [Return] ${rescode} ${response}