*** 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 *** Variables *** ${objectUrl} /policy/object *** Keywords *** AddObjects [Documentation] ... 新增策略对象 ... objectList,策略对象,可为list类型与dict类型 ... returnData,是否返回数据,固定为1 [Arguments] ${returnData} ${objectList} ${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}" == "" ObjectListOperation ${returnData} ${objectList} add ... ELSE IF "${dictType}" == "" 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 [Documentation] ... 更新策略对象 ... objectList,策略对象,可为list类型与dict类型 ... returnData,是否返回数据,固定为1 ... opAction,可为update,enable,disable [Arguments] ${returnData} ${objectList} ${opAction} ${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}" == "" ObjectListOperation ${returnData} ${objectList} ${opAction} ... ELSE IF "${dictType}" == "" 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} GetObjectItems [Documentation] ... 获取策略对象中的item,策略对象单元 ... 当updateItemList中有需要传入数据时 ... 调用此关键字 [Arguments] ${params} #必选参数判定 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 [Documentation] ... 获取策略对象中的item,策略对象单元 ... 当updateItemList中有需要传入数据时 ... 调用此关键字 [Arguments] ${params} #必选参数判定 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 [Documentation] ... 删除策略对象 ... params,传入的删除字典 ... 结构为[1,2,3] [Arguments] ${objectIds} ${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 [Documentation] ... 策略对象导入 ... filePath文件路径 ... fileName文件名称 ... objectType对象类型 ... objectSubType对象子类型 ... objectName对象名称 ... jira CHON-12导入限制需求支持 [Arguments] ${filePath} ${fileName} ${objectType} ${objectSubType} ${objectName} 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} #总数超过一定数据量测试不通过 ${total1} Evaluate ${total}+${lines} #jira CHON-12导入限制需求支持 Run Keyword If "${objectType}"=="url" and ${total1}>1000000 Fail 当前已经存在item个数${total},待导入个数${lines},总数超过100万条! ... ELSE IF ${total1}>100000 Fail 当前已经存在item个数${total},待导入个数${lines},总数超过10万条! ${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} ExportObject [Documentation] ... 策略对象导出 ... objectType ip,url等 ... objectSubType 子类型 ... objectIds 1,2,3 ... objectName 字符串 [Arguments] ${objectType} ${objectSubType} ${objectIds} ${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 [Documentation] ... 获取策略对象单元总数 ... [Arguments] ${objectType} ${objectSubType} ${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} CountLines [Documentation] ... 获取文件总行数 [Arguments] ${file} ${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} ${match} Get Regexp Matches ${val} ^--> ${len} Get Length ${match} ${count} Run Keyword If "${line[0]}"=="0" and ${len}>0 Set Variable ${count} ... ELSE Evaluate ${count}+1 END [Return] ${count}