*** Settings *** Resource ../../03-Variable/BifangApiVariable.txt Library RequestsLibrary Library String Library Collections *** Keywords *** GetApi [Arguments] ${apiName} ${url} ${startTime}=${None} ${endTime}=${None} ${limit}=50000 ${statisticTime}=${None} ${statisticsUnit}=${None} ${timeGranularity}=${None} ${policy_id}=${None} ${ip}=${None} ${device_ids}=${None} ${policy_ids}=${None} ${orderBy}=${None} log policy_ids:${policy_ids} #拼接查询条件 ${strstrartTime}= run keyword if '${startTime}'!='${None}' Set Variable startTime=${startTime}& ... ELSE Set Variable ${EMPTY} ${strendTime}= run keyword if '${endTime}'!='${None}' Set Variable endTime=${endTime}& ... ELSE Set Variable ${EMPTY} ${strstatisticTime}= run keyword if '${statisticTime}'!='${None}' Set Variable statisticTime=${statisticTime}& ... ELSE Set Variable ${EMPTY} ${strlimit}= run keyword if '${limit}'!='${None}' Set Variable limit=${limit}& ... ELSE Set Variable ${EMPTY} ${strstatisticsUnit}= run keyword if '${statisticsUnit}'!='${None}' Set Variable statisticsUnit=${statisticsUnit}& ... ELSE Set Variable ${EMPTY} ${strtimeGranularity}= run keyword if '${timeGranularity}'!='${None}' Set Variable timeGranularity=${timeGranularity}& ... ELSE Set Variable ${EMPTY} ${strpolicy_id}= run keyword if '${policy_id}'!='${None}' Set Variable policy_id=${policy_id}& ... ELSE Set Variable ${EMPTY} ${strip}= run keyword if '${ip}'!='${None}' Set Variable ip=${ip}& ... ELSE Set Variable ${EMPTY} ${strdevice_ids}= run keyword if '${device_ids}'!='${None}' Set Variable device_ids=${device_ids}& ... ELSE Set Variable ${EMPTY} ${strpolicy_ids}= run keyword if '${policy_ids}'!='${None}' Set Variable policy_ids=${policy_ids}& ... ELSE Set Variable ${EMPTY} ${strorderBy}= run keyword if '${orderBy}'!='${None}' Set Variable orderBy=${orderBy}& ... ELSE Set Variable ${EMPTY} #替换policy_id为policyId ${strpolicy_id}= run keyword if '${apiName}'=='domain_resource' replace string ${strpolicy_id} policy_id policyId ... ELSE Set Variable ${strpolicy_id} #bifang请求信息 ${condition} catenate SEPARATOR= ${strstrartTime} ${strendTime} ${strstatisticTime} ${strlimit} ${strstatisticsUnit} ${strtimeGranularity} ${strpolicy_id} ${strip} ${strdevice_ids} ${strpolicy_ids} ${strorderBy} #创建请求信息 ${header} Create Dictionary Content-Type=application/x-www-form-urlencoded Authorization=${token} Create Session api http://${host}:${port} #发送请求 ${remoteResponse} Get Request api ${url}?${condition} headers=${header} ${bifang} to json ${remoteResponse.content} #验证请求是否成功 Should Be Equal As Strings ${remoteResponse.status_code} 200 Should Be Equal As Strings ${bifang}[code] 200 #请求大数据 ${strstrartTime}= run keyword if '${startTime}'!='${None}' Set Variable __time > '${startTime}' and ... ELSE Set Variable ${EMPTY} ${strendTime}= run keyword if '${endTime}'!='${None}' Set Variable __time < '${endTime}' and ... ELSE Set Variable ${EMPTY} ${strstatisticTime}= run keyword if '${statisticTime}'!='${None}' Set Variable statisticTime=${statisticTime} and ... ELSE Set Variable ${EMPTY} ${strstatisticsUnit}= run keyword if '${statisticsUnit}'!='${None}' Set Variable statisticsUnit=${statisticsUnit} and ... ELSE Set Variable ${EMPTY} ${strtimeGranularity}= run keyword if '${timeGranularity}'!='${None}' Set Variable timeGranularity=${timeGranularity} and ... ELSE Set Variable ${EMPTY} ${strpolicy_id}= run keyword if '${policy_id}'!='${None}' Set Variable policy_id=${policy_id} and ... ELSE Set Variable ${EMPTY} ${strip}= run keyword if '${ip}'!='${None}' Set Variable ip=${ip} and ... ELSE Set Variable ${EMPTY} ${strdevice_ids}= run keyword if '${device_ids}'!='${None}' Set Variable device_ids=${device_ids} and ... ELSE Set Variable ${EMPTY} #sql拼接 ${where} ${sqlwhere} catenate ${strstrartTime} ${strendTime} ${strstatisticTime} ${strstatisticsUnit} ${strtimeGranularity} ${strpolicy_id} ${strip} ${strdevice_ids} ${strippedwhere}= Strip String ${sqlwhere} mode=right #截取最后一个and ${where}= Get Substring ${strippedwhere} \ -4 #injectionstatics 时间粒度默认为30 ${timeGranularity}= run keyword if '${timeGranularity}'=="${None}" and '${apiName}'=="injectionstatics" set variable 30 ... ELSE set variable ${timeGranularity} log ${apiName} #topn排序依据: \ sessions、totalbytes、totalpackets ${TotalOrderBy}= run keyword if '${orderBy}'=="bytes" and '${apiName}'=="topn" set variable totalBytes ... ELSE IF '${orderBy}'=="packets" and '${apiName}'=="topn" set variable totalPackets ... ELSE IF '${orderBy}'=="sessions" and '${apiName}'=="topn" set variable sessions #BigData ${sql}= run keyword if '${apiName}'=="country" Set Variable SELECT country, APPROX_COUNT_DISTINCT_DS_HLL(ip_object) as num FROM source_country_ip_num_log where ${where} group by country order by num desc limit ${limit} ... ELSE IF '${apiName}'=="domain" Set Variable SELECT domain, protocol_type, ip_num, session_num \ FROM top_domain_recommend_daily_log where __time = '${statisticTime}' ... ELSE IF '${apiName}'=="url" Set Variable SELECT url, content_length, ip_num, session_num \ FROM top_website_urls_daily_log where __time = '${statisticTime}' ... ELSE IF '${apiName}'=="traffic" and '${statisticsUnit}'=='bytes' Set Variable select sum(total_in_bytes) as trafficInBytes, sum(total_out_bytes) as trafficOutBytes, \ sum(total_in_bytes+total_out_bytes) as trafficTotalBytes \ \ from traffic_metrics_log where __time >= '${startTime}' and __time < '${endTime}' ... ELSE IF '${apiName}'=="traffic" and '${statisticsUnit}'=='packets' Set Variable select sum(total_in_packets) as trafficInPackets,sum(total_out_packets) as trafficOutPackets,sum(total_in_packets+total_out_packets) as trafficTotalPackets from traffic_metrics_log where __time >= '${startTime}' and __time < '${endTime}' ... ELSE IF '${apiName}'=="traffic" and '${statisticsUnit}'=='sessions' Set Variable select sum(new_conn_num) as sessions \ from traffic_metrics_log where __time >= '${startTime}' and __time < '${endTime}' ... ELSE IF '${apiName}'=="traffic" and '${statisticsUnit}'=='${None}' Set Variable select sum(total_in_bytes) as trafficInBytes, sum(total_out_bytes) as trafficOutBytes, \ sum(total_in_bytes+total_out_bytes) as trafficTotalBytes, sum(total_in_packets) as trafficInPackets,sum(total_out_packets) as trafficOutPackets,sum(total_in_packets+total_out_packets) as trafficTotalPackets, sum(new_conn_num) as sessions from traffic_metrics_log where __time >= '${startTime}' and __time < '${endTime}' ... ELSE IF '${apiName}'=="ip_correlation_domain" and '${ip}'!='${None}' Set Variable SELECT \ ip, FROM_UNIXTIME(max(stat_time)) as last_time, FROM_UNIXTIME(min(stat_time)) as first_time, groupUniqArrayMerge(domain_list) as domain_list, groupUniqArrayMerge(port_list) as port_list \ FROM security_ip_info where \ stat_time >= '${startTime}' and stat_time < '${endTime}' and ip='${ip}' group by ip ... ELSE IF '${apiName}'=="ip_correlation_domain" and ${ip}==${None} Set Variable SELECT ip,FROM_UNIXTIME(max(stat_time)) as last_time, FROM_UNIXTIME(min(stat_time)) as first_time, groupUniqArrayMerge(domain_list) as domain_list, groupUniqArrayMerge(port_list) as port_list \ FROM security_ip_info where \ stat_time >= '${startTime}' and stat_time < '${endTime}' \ group by ip ... ELSE IF '${apiName}'=="hijack_srcip_num" Set Variable SELECT policy_id,country,location, APPROX_COUNT_DISTINCT_DS_HLL(ip_object) as num \ FROM proxy_event_hits_log where \ __time >='${startTime}' and __time <'${endTime}' and policy_id in \ ( ${policy_ids} ) group by policy_id , country,location order by num desc ... ELSE IF '${apiName}'=="hijack_srcip_location" Set Variable select ip, IP_TO_CITY(ip) as location, IP_TO_GEO(ip) as geo from (SELECT policy_id, arrayJoin(groupUniqArrayMerge(ip_list)) as ip FROM proxy_ip_info where \ stat_time >= '${startTime}' and stat_time < '${endTime}' and policy_id = ${policy_id} group by policy_id ) ... ELSE IF '${apiName}'=="domain_resource" Set Variable SELECT \ domain, groupUniqArrayMerge(ip_list) as ip_list, groupUniqArrayMerge(cdn_list) as cdn_list, groupUniqArrayMerge(protocol_type_list) as protocol_type_list, groupUniqArrayMerge(port_list) as port_list \ FROM security_website_domain_info where \ stat_time >= '${startTime}' and stat_time < '${endTime}' and policy_id=${policy_id} group by domain ... ELSE IF '${apiName}'=="injectionstatistics" Set Variable select DATE_FORMAT(FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(__time)/${timeGranularity})*${timeGranularity}),'%Y-%m-%d %H:%i:%s') as stat_time, \ sum(bytes) as bytes from injection_metrics_log \ where __time >= '${startTime}' and __time < '${endTime}' group by DATE_FORMAT(FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(__time)/${timeGranularity})*${timeGranularity}),'%Y-%m-%d %H:%i:%s') limit ${limit} ... ELSE IF '${apiName}'=="topn" Set Variable select domain,sum(session_num) as sessions,sum(c2s_byte_num) as sentBytes,sum(s2c_byte_num) as receivedBytes,sum(c2s_byte_num+s2c_byte_num) as totalBytes,sum(c2s_pkt_num) as sentPackets,sum(s2c_pkt_num) as receivedPackets,sum(c2s_pkt_num+s2c_pkt_num) as totalPackets from top_website_domain_log where __time >= '${startTime}' \ and __time < '${endTime}' \ and order_by='${orderBy}' \ group by domain order by ${TotalOrderBy} desc limit ${limit} log ${sql} log sql------------${sql} #traffic二次请求sql ${sql2}= run keyword if '${apiName}'=='traffic' SplicingTrafficSql ${apiName} ${startTime} ${endTime} statisticsUnit=${statisticsUnit} timeGranularity=${timeGranularity} limit=${limit} #请求大数据接口 ${response}= BigData ${sql} ${bigdata} to json ${response.content} #traffic二次请求大数据 ${response2}= run keyword if '${apiName}'=="traffic" BigData ${sql2} ${bigdata2} run keyword if '${apiName}'=="traffic" to json ${response2.content} #响应码断言 Should Be Equal As Strings ${response.status_code} 200 Should Be Equal As Strings ${bigdata}[status] 200 #traffic二次请求响应码断言 run keyword if '${apiName}'=="traffic" run keywords Should Be Equal As Strings ${response2.status_code} 200 ... AND Should Be Equal As Strings ${bigdata2}[status] 200 #traffic二次请求json拼接与毕方一致 ${bigdataTraffic}= run keyword if '${apiName}'=="traffic" SplicingTrafficJson ${bigdata} ${bigdata2} ${bifanglist} run keyword if '${apiName}'=="ip_correlation_domain" \ or '${apiName}'=='domain_resource' set variable ${bifang['data']['list']['list']} ... ELSE IF '${apiName}'=="traffic" set variable ${bifang['data']} ... ELSE set variable ${bifang['data']['list']} ${bigdatalist} run keyword if '${apiName}'=="traffic" set variable ${bigdataTraffic} ... ELSE set variable ${bigdata['data']} FOR ${k} ${v} IN ENUMERATE @{bifanglist} run keyword if '${apiName}'=="hijack_srcip_location" List Should Contain Value ${bigdatalist} ${v} ... ELSE IF '${apiName}'=="traffic" ForSecondary ${bigdatalist} ${bifanglist} ${apiName} ... ELSE ForSecondary @{bigdatalist}[${k}] ${v} ${apiName} END BigData [Arguments] ${sql} #创建请求信息 Create Session api http://192.168.40.186:9999 #发送请求 ${remoteResponse}= Get Request api ?query=${sql} [Return] ${remoteResponse} ForSecondary [Arguments] ${bigdata} ${v} ${apiName} ${bigdata} run keyword if '${apiName}'=='traffic' Convert To Dictionary ${bigdata} ... ELSE Set Variable ${bigdata} ${strbig} Get Dictionary Values ${bigdata} ${strfang} Get Dictionary Values ${v} FOR ${key} ${var} IN ENUMERATE @{bigdata} ${string} Convert To String ${v}[${var}] ${stt} Get Substring ${string} 0 1 run keyword if '${stt}'=='[' ForTertiary ${bigdata}[${var}] ${v}[${var}] ... ELSE List Should Contain Value ${strbig} ${v}[${var}] END ForTertiary [Arguments] ${str1} ${str2} ${str1} Convert To List ${str1} ${str2} Convert To List ${str2} FOR ${kk} ${vv} IN ENUMERATE @{str1} List Should Contain Value ${str1} ${vv} END SplicingTrafficJson [Arguments] ${bigdata} ${bigdata2} ${bigdata} set variable ${bigdata['data']}[0] @{trafficOutPacketsList} Create list @{trafficOutBytesList} Create list @{trafficTotalPacketsList} Create list @{trafficInPacketsList} Create list @{trafficInBytesList} Create list @{sessionsList} Create list @{trafficTotalBytesList} Create list FOR ${k} ${v} IN ENUMERATE @{bigdata2['data']} ${total_out_packets}= Run keyword and ignore error log ${v['total_out_packets']} ${trafficOutPacketsListData}= run keyword if '${total_out_packets}[0]'!='FAIL' Create Dictionary statisticsTime=${v['statisticsTime']} statisticsNum=${v['total_out_packets']} ${total_out_bytes}= Run keyword and ignore error log ${v['total_out_bytes']} ${trafficOutBytesListData}= run keyword if '${total_out_bytes}[0]'!='FAIL' Create Dictionary statisticsTime=${v['statisticsTime']} statisticsNum=${v['total_out_bytes']} ${total_all_packets}= Run keyword and ignore error log ${v['total_all_packets']} ${trafficTotalPacketsListData}= run keyword if '${total_all_packets}[0]'!='FAIL' Create Dictionary statisticsTime=${v['statisticsTime']} statisticsNum=${v['total_all_packets']} ${total_in_packets}= Run keyword and ignore error log ${v['total_in_packets']} ${trafficInPacketsListData}= run keyword if '${total_in_packets}[0]'!='FAIL' Create Dictionary statisticsTime=${v['statisticsTime']} statisticsNum=${v['total_in_packets']} ${total_in_bytes}= Run keyword and ignore error log ${v['total_in_bytes']} ${trafficInBytesListData}= run keyword if '${total_in_bytes}[0]'!='FAIL' Create Dictionary statisticsTime=${v['statisticsTime']} statisticsNum=${v['total_in_bytes']} ${sessions}= Run keyword and ignore error log ${v['sessions']} ${sessionsListData}= run keyword if '${sessions}[0]'!='FAIL' Create Dictionary statisticsTime=${v['statisticsTime']} statisticsNum=${v['sessions']} ${total_all_bytes}= Run keyword and ignore error log ${v['total_all_bytes']} ${trafficTotalBytesListData}= run keyword if '${total_all_bytes}[0]'!='FAIL' Create Dictionary statisticsTime=${v['statisticsTime']} statisticsNum=${v['total_all_bytes']} Append To List ${trafficTotalPacketsList} ${trafficTotalPacketsListData} Append To List ${trafficInPacketsList} ${trafficInPacketsListData} Append To List ${trafficInBytesList} ${trafficInBytesListData} Append To List ${sessionsList} ${sessionsListData} Append To List ${trafficTotalBytesList} ${trafficTotalBytesListData} Append To List ${trafficOutPacketsList} ${trafficOutPacketsListData} Append To List ${trafficOutBytesList} ${trafficOutBytesListData} END ${bigdataTraffic} Create Dictionary ${1}= Run keyword and ignore error log ${bigdata['sessions']} run keyword if '${1}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} sessions=${bigdata['sessions']} ${2}= Run keyword and ignore error log ${bigdata['trafficInPackets']} run keyword if '${2}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficInPackets=${bigdata['trafficInPackets']} ${3}= Run keyword and ignore error log ${bigdata['trafficTotalBytes']} run keyword if '${3}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficTotalBytes=${bigdata['trafficTotalBytes']} ${4}= Run keyword and ignore error log ${v['total_out_packets']} run keyword if '${4}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficOutPacketsList=${trafficOutPacketsList} ${5}= Run keyword and ignore error log ${bigdata['trafficInBytes']} run keyword if '${5}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficInBytes=${bigdata['trafficInBytes']} ${6}= Run keyword and ignore error log ${bigdata['trafficOutBytes']} run keyword if '${6}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficOutBytes=${bigdata['trafficOutBytes']} ${7}= Run keyword and ignore error log ${bigdata['trafficOutPackets']} run keyword if '${7}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficOutPackets=${bigdata['trafficOutPackets']} ${8}= Run keyword and ignore error log ${bigdata2['data'][0]['total_out_bytes']} run keyword if '${8}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficOutBytesList=${trafficOutBytesList} ${9}= Run keyword and ignore error log ${bigdata2['data'][0]['total_all_packets']} run keyword if '${9}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficTotalPacketsList=${trafficTotalPacketsList} ${10}= Run keyword and ignore error log ${bigdata2['data'][0]['total_in_packets']} run keyword if '${10}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficInPacketsList=${trafficInPacketsList} ${11}= Run keyword and ignore error log ${bigdata2['data'][0]['total_in_bytes']} run keyword if '${11}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficInBytesList=${trafficInBytesList} ${12}= Run keyword and ignore error log ${bigdata2['data'][0]['sessions']} run keyword if '${12}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} sessionsList=${sessionsList} ${13}= Run keyword and ignore error log ${bigdata2['data'][0]['total_all_bytes']} run keyword if '${13}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficTotalBytesList=${trafficTotalBytesList} ${14}= Run keyword and ignore error log ${bigdata['trafficTotalPackets']} run keyword if '${14}[0]'!='FAIL' Set To Dictionary ${bigdataTraffic} trafficTotalPackets=${bigdata['trafficTotalPackets']} [Return] ${bigdataTraffic} SplicingTrafficSql [Arguments] ${apiName} ${startTime} ${endTime} ${statisticsUnit} ${limit} ${timeGranularity} ${bytes}= run keyword if '${apiName}'=="traffic" and '${statisticsUnit}'=='bytes' Set Variable sum(total_in_bytes) as total_in_bytes, sum(total_out_bytes) as total_out_bytes, sum(total_in_bytes+total_out_bytes) as total_all_bytes, ... ELSE Set Variable ${EMPTY} ${packets}= run keyword if '${apiName}'=="traffic" and '${statisticsUnit}'=='packets' Set Variable sum(total_in_packets) as total_in_packets, sum(total_out_packets) as total_out_packets, sum(total_in_packets+total_out_packets) as total_all_packets, ... ELSE Set Variable ${EMPTY} ${sessions}= run keyword if '${apiName}'=="traffic" and '${statisticsUnit}'=='sessions' Set Variable sum(new_conn_num) as sessions ... ELSE Set Variable ${EMPTY} ${where} catenate ${bytes} ${packets} ${sessions} ${where} run keyword if '${apiName}'=="traffic" and '${statisticsUnit}'=='${None}' Set Variable sum(total_in_bytes) as total_in_bytes, sum(total_out_bytes) as total_out_bytes, sum(total_in_bytes+total_out_bytes) as total_all_bytes, sum(total_in_packets) as total_in_packets, sum(total_out_packets) as total_out_packets, sum(total_in_packets+total_out_packets) as total_all_packets, sum(new_conn_num) as sessions, ... ELSE Set Variable ${where} #清空尾随空格 ${strippedwhere}= Strip String ${where} mode=right #时间粒度默认值 ${timeGranularity}= run keyword if '${timeGranularity}'=="${None}" set variable 30 ... ELSE set variable ${timeGranularity} #截取最后一个and ${where}= Get Substring ${strippedwhere} \ -1 ${sql2} catenate select DATE_FORMAT(FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(__time)/${timeGranularity})*${timeGranularity}),'%Y-%m-%d %H:%i:%s') as statisticsTime, ${where} from traffic_metrics_log where __time >= '${startTime}' and __time < '${endTime}' group by DATE_FORMAT(FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(__time)/${timeGranularity})*${timeGranularity}),'%Y-%m-%d %H:%i:%s') limit ${limit} [Return] ${sql2} Recommend [Arguments] ${url} ${statisticTime} ${header} Create Dictionary Content-Type=application/x-www-form-urlencoded Authorization=${token} #Create Session api http://${host}:${port}/${version} headers=${header} Create Session api http://${host}:${port} headers=${header} ${remoteResponse} Get Request api ${url}?statisticTime=${statisticTime} headers=${header} ${response} to json ${remoteResponse.content} Should Be Equal As Strings ${remoteResponse.status_code} 200 Trend [Arguments] ${url} ${startTime} ${endTime} ${logType} ${policyId} ${header} Create Dictionary Content-Type=application/x-www-form-urlencoded Authorization=${token} Create Session api http://${host}:${port} headers=${header} ${remoteResponse} Get Request api ${url}?policyId=${policyId}&logType=${logType}&startTime=${startTime}&endTime=${endTime} headers=${header} ${response} to json ${remoteResponse.content} Should Be Equal As Strings ${remoteResponse.status_code} 200 Should Be Equal As Strings ${remoteResponse.json()}[msg] Success Timeandcount [Arguments] ${url} ${logType} ${policyIds} ${header} Create Dictionary Content-Type=application/x-www-form-urlencoded Authorization=${token} #Create Session api http://${host}:${port}/${version} headers=${header} Create Session api http://${host}:${port} headers=${header} ${remoteResponse} Get Request api ${url}?policyIds=${policyIds}&logType=${logType} headers=${header} ${response} to json ${remoteResponse.content} Should Be Equal As Strings ${remoteResponse.status_code} 200 Should Be Equal As Strings ${remoteResponse.json()}[msg] Success ${data} set variable ${response}[data][list] FOR ${kk} ${vv} IN ENUMERATE @{data} log ${vv}[policyId] ${true} Evaluate "${vv}[policyId]" in "${policyIds}" Should Be Equal As Strings ${true} True END