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_cli/Interface.robot

504 lines
20 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 json
Library String
Library DateTime
Library SSHLibrary
Library Collections
Library RequestsLibrary
Library Selenium2Library
Resource ../../03-Variable/bifangapivariable.txt
*** Variables ***
# 指令前缀
${Tsg_Policy} tsg_policy
${Tsg_Policy_Object} tsg_policy_object
${Tsg_Record} tsg_record
${Tsg_Show} tsg_show
${Tsg_Passwd} tsg_passwd
# tsg_help指令返回值对比文件路径
${Tsg_Help_file_Path} cli_files/tsg_help.txt
# tsg_show指令查询时附加sql条件
${Tsg_Show_Added_Sql} "order by time desc limit 1"
${Tsg_Show_Added_Sql_Query} --query
# tsg_show指令返回数据flowType和sled参数值
${Tsg_Show_FlowType_Values} inline|intercomm|mirror
${Tsg_Show_Sled_Values} mcn0|mcn1|mcn2|mcn3
*** Keywords ***
Get_Policy_Object1
[Documentation]
... 描述获取SecurityPolicy数据
... 参数type(策略类型)
... 返回:除默认策略外的任意单条策略
[Arguments] ${type}
${dict} Tsg_Policy_Query ${type} ${None} ${None} ${None} ${True}
Should Be True ${dict}[data][total] > 1
${list} Evaluate list(${dict}[data][list])[1:11]
[Return] ${list}
Get_Policy_Object2
[Documentation]
... 描述获取ProxyManipulationPolicy数据
... 参数type(策略类型)
... 返回:任意单条策略
[Arguments] ${type}
${dict} Tsg_Policy_Query ${type} ${None} ${None} ${None} ${True}
${list} Evaluate list(${dict}[data][list])[1:11]
[Return] ${list}
Get_Policy_Object3
[Documentation]
... 描述:用于执行'tsg_policy --enable/disable ...'指令前的数据获取
... 参数type(策略类型)
... 返回policyId(策略ID)、commandType1(enable/disable修改)、commandType2(enable/disable还原)
[Arguments] ${type}
#${obj} Get_Policy_Object1 ${type}
${dict} Tsg_Policy_Query ${type} ${None} ${None} ${None} ${True}
Should Be True ${dict}[data][total] > 1
${obj} Set Variable ${dict}[data][list][1]
${commandType1} Run Keyword If ${obj}[isValid]==0 Set Variable enable
... ELSE Set Variable disable
${commandType2} Run Keyword If ${obj}[isValid]==1 Set Variable enable
... ELSE Set Variable disable
Set To Dictionary ${obj} commandType1=${commandType1} commandType2=${commandType2}
[Return] ${obj}
Get_Policy_Object4
[Documentation]
... 描述获取Object数据
... 参数type(对象类型)
... 返回:任意单条对象
[Arguments] ${type}
${dict} Tsg_Policy_Object_Query ${type} ${None} ${True}
${list} Evaluate list(${dict}[data][list])[:10]
[Return] ${list}
Get_File_Name
[Documentation]
... 描述:拼接对象数据导出时的文件名
... 参数ObjectType(对象类型) FileType(txt|csv)
... 返回:文件名称
[Arguments] ${ObjectType} ${FileType}
${date} Get Current Date
${date_stamp} Convert Date ${date} epoch
${time} Evaluate int(round(${date_stamp} * 1000))
${filename} Set Variable ${ObjectType}_export_${time}.${FileType}
[Return] ${filename}
Get_Import_Info
[Documentation]
... 描述:随机生成对象数据导入时的对象名称
... 参数type(对象类型)
... 返回:对象名称
[Arguments] ${type}
${date} Get Current Date
${date_stamp} Convert Date ${date} epoch
${time} Evaluate int(round(${date_stamp} * 1000))
${name} Set Variable ${type}_import_${time}
[Return] ${name}
Tsg_Policy_Query
[Documentation]
... 描述:执行'tsg_policy --query ...'指令
... 参数type(策略类型) param(非必传,最大参数数量为四位,依次顺序为'policyId'、'policyName'、'policyDesc'和'allFlag',中间存在为空参数可用'None'占位)
... 返回:查询响应数据
[Arguments] ${type} @{params}
${str} Evaluate '${Tsg_Policy} --query --policyType %s ' % ('${type}')
${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str}--policyId %s ' % ('${params}[0]')
... ELSE Set Variable ${str}
${str} Run Keyword If '${params}[1]' != '${None}' Evaluate '${str}--policyName "%s" ' % ('${params}[1]')
... ELSE Set Variable ${str}
${str} Run Keyword If '${params}[2]' != '${None}' Evaluate '${str}--policyDesc "%s" ' % ('${params}[2]')
... ELSE Set Variable ${str}
${str} Run Keyword If ${params}[3] == ${True} Evaluate '${str}--all '
... ELSE Set Variable ${str}
Log ${str}
${r} Run1 ${str}
[Return] ${r}
Tsg_Policy_EnDisable
[Documentation]
... 描述:执行'tsg_policy --enable/disable ...'指令
... 参数id(策略ID) type(策略类型) commandType(enable|disable)
... 返回:无
[Arguments] ${id} ${type} ${commandType}
${str} Evaluate '${Tsg_Policy} --%s --policyId %s --policyType %s' % ('${commandType}', '${id}', '${type}')
Run2 ${str}
# 数据更改后做查询验证
${r} Tsg_Policy_Query ${type} ${id} ${None} ${None} ${True}
${value} Run Keyword If '${commandType}'=='disable' Convert To Integer 0
... ELSE Convert To Integer 1
#Should Be Equal ${r}[data][list][0][isValid] ${value}
Run Keyword If '${cliUsername}'=='tsgadmin' Should Be Equal ${r}[data][list][0][isValid] ${value}
Tsg_Policy_Object_Query
[Documentation]
... 描述:执行'tsg_policy_object --query ...'指令
... 参数param(非必传,最大参数数量为三位,依次顺序为'objectName'、'objectType'和'allFlag',中间存在为空参数可用'None'占位)
... 返回:查询响应数据
[Arguments] @{params}
${str} Set Variable ${Tsg_Policy_Object} --query
${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str} --objectType "%s" ' % ('${params}[0]')
... ELSE Set Variable ${str}
${str} Run Keyword If '${params}[1]' != '${None}' Evaluate '${str} --objectName "%s" ' % ('${params}[1]')
... ELSE Set Variable ${str}
${str} Run Keyword If ${params}[2] == ${True} Evaluate '${str} --all '
... ELSE Set Variable ${str}
${r} Run1 ${str}
[Return] ${r}
Tsg_Policy_Object_Import
[Documentation]
... 描述:执行'tsg_policy_object --import ...'指令
... 参数type(对象类型) file(导入文件名称) params(对象名称)
... 返回:无
[Arguments] ${type} ${file} @{params}
${newFile} Replace String ${file} export import
${command} Set Variable head -n 2 files/${file} > files/${newFile}
Run4 ${command}
${str} Evaluate '${Tsg_Policy_Object} --import --objectType %s --file files/%s ' % ('${type}','${newFile}')
${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str}--objectName %s ' % ('${params}[0]')
... ELSE Set Variable ${str}
Run3 ${str}
# 数据导入后做查询验证
Tsg_Policy_Object_Query ${type} ${params}[0] ${True}
Tsg_Policy_Object_Export
[Documentation]
... 描述:执行'tsg_policy_object --export ...'指令
... 参数type(对象类型) file(导出文件名称) params(txt|csv)
... 返回:无
[Arguments] ${type} ${file} @{params}
${str} Evaluate '${Tsg_Policy_Object} --export --objectType %s --file files/%s ' % ('${type}','${file}')
${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str}--exportFormat %s ' % ('${params}[0]')
... ELSE Set Variable ${str}
Run3 ${str}
Tsg_Record_UserList
[Documentation]
... 描述:执行'tsg_record --userlist'指令
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Record} --userlist
Run6 ${str} ${cliUsername}
Tsg_Record_Query
[Documentation]
... 描述:执行'tsg_record --username'指令
... 参数:无
... 返回:无
${str} Evaluate '${Tsg_Record} --username %s ' % ('${cliUsername}')
${param} Set Variable ${Tsg_Record} --userlist
Run6 ${str} ${param}
Clear_Test_Data
[Documentation]
... 描述:清除测试对象导出功能时的文件
... 参数:无
... 返回:无
${str} Set Variable rm -rf /home/${cliUsername}/files/*
Run4 ${str}
Tsg_Help_Keyword
[Documentation]
... 描述:执行'tsg_help'指令,并验证返回值
... 参数:无
... 返回:无
${r} Run9 tsg_help
${data} Evaluate str(open(r"${path}/${Tsg_Help_file_Path}",'rb').read())
${data} Evaluate ${data.replace('\\n', '\\r\\n')}
Should Be Equal As Strings ${r} ${data}
Tsg_Diagnose_Keyword
[Documentation]
... 描述:执行'tsg_diagnose'指令
... 参数:无
... 返回:无
# 执行'text'指令,在'timeout'时间内每隔'retry_interval'时间重试,直至返回值出现'expected'时或超时结束
Write Until Expected Output tsg_diagnose\n Success ${timeout} ${retryInterval}
Tsg_Command_Help
[Documentation]
... 描述:执行'* --help'指令,并验证返回值
... 参数:无
... 返回:无
[Arguments] ${cmd}
${str} Set Variable ${cmd} --help
${r} Run9 ${str}
${data} Evaluate str(open(r"${path}/cli_files/${cmd}_help.txt",'rb').read(), 'utf-8')
Should Be Equal As Strings ${r} ${data}
Tsg_Show_Chassis-ip
[Documentation]
... 描述:执行'tsg_show --chassis-ip'指令,并验证返回值
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Show} --chassis-ip
${r} Run9 ${str}
Should Contain ${r} mxn
Should Contain ${r} mcn0
Should Contain ${r} mcn1
Should Contain ${r} mcn2
Should Contain ${r} mcn3
Tsg_Show_Chassis-port
[Documentation]
... 描述:执行'tsg_show --chassis-port'指令,并验证返回值
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Show} --chassis-port
${r} Run9 ${str}
Should Contain Any ${r} physical backplane
Should Contain Any ${r} inline mirror business intercomm
Time_Check
[Documentation]
... 描述:验证时间是否正确
... 参数str(时间列值) start(起始时间,用于验证) end(结束时间,用于验证)
... 返回:无
[Arguments] ${str} ${start} ${end}
# 处理'time'返回值例2020-03-31T09:19:05.445123Z
${str} Get Substring ${str} 0 -4
${date} Add Time To Date ${str} 08:00:00
${time} Evaluate int(time.mktime(time.strptime('${date}', '%Y-%m-%d %H:%M:%S.%f'))) time
# 处理时间范围
${start} Add Time To Date ${start} -00:10:00
${end} Add Time To Date ${end} 00:10:00
${minTime} Convert Date ${start} epoch
${maxTime} Convert Date ${end} epoch
Should Be True ${minTime} < ${time} < ${maxTime}
Tsg_Show_Interface
[Documentation]
... 描述:执行'tsg_show --interface'指令,并验证返回值
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Show} --interface -- ${Tsg_Show_Added_Sql} ${Tsg_Show_Added_Sql_Query}
${stime} Get Time
@{list} Run5 ${str}
${etime} Get Time
FOR ${obj} IN @{list}
#Time_Check ${obj}[time] ${stime} ${etime}
Should Contain ${Tsg_Show_FlowType_Values} ${obj}[flow_type]
Should Contain ${Tsg_Show_Sled_Values} ${obj}[sled]
END
Tsg_Show_APP
[Documentation]
... 描述:执行'tsg_show --app'指令,并验证返回值
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Show} --app -- ${Tsg_Show_Added_Sql} ${Tsg_Show_Added_Sql_Query}
${stime} Get Time
@{list} Run5 ${str}
${etime} Get Time
FOR ${obj} IN @{list}
#Time_Check ${obj}[time] ${stime} ${etime}
Should Contain ${Tsg_Show_FlowType_Values} ${obj}[flow_type]
Should Contain ${Tsg_Show_Sled_Values} ${obj}[sled]
END
Tsg_Show_Protocol
[Documentation]
... 描述:执行'tsg_show --protocol'指令,并验证返回值
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Show} --protocol -- ${Tsg_Show_Added_Sql} ${Tsg_Show_Added_Sql_Query}
${stime} Get Time
@{list} Run5 ${str}
${etime} Get Time
FOR ${obj} IN @{list}
#Time_Check ${obj}[time] ${stime} ${etime}
Should Contain ${Tsg_Show_FlowType_Values} ${obj}[flow_type]
Should Contain ${Tsg_Show_Sled_Values} ${obj}[sled]
END
Tsg_Show_Stream
[Documentation]
... 描述:执行'tsg_show --stream'指令,并验证返回值
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Show} --stream -- ${Tsg_Show_Added_Sql} ${Tsg_Show_Added_Sql_Query}
${stime} Get Time
@{list} Run5 ${str}
${etime} Get Time
FOR ${obj} IN @{list}
#Time_Check ${obj}[time] ${stime} ${etime}
Should Contain ${Tsg_Show_FlowType_Values} ${obj}[flow_type]
Should Contain ${Tsg_Show_Sled_Values} ${obj}[sled]
END
Tsg_Show_Intercept
[Documentation]
... 描述:执行'tsg_show --intercept'指令,并验证返回值
... 参数:无
... 返回:无
${str} Set Variable ${Tsg_Show} --intercept -- ${Tsg_Show_Added_Sql} ${Tsg_Show_Added_Sql_Query}
${stime} Get Time
@{list} Run5 ${str}
${etime} Get Time
FOR ${obj} IN @{list}
#Time_Check ${obj}[time] ${stime} ${etime}
Should Contain ${Tsg_Show_Sled_Values} ${obj}[sled]
END
Tsg_Passwd_Keyword
[Documentation]
... 描述:执行'tsg_show --passwd'指令,更改密码并验证
... 参数:无
... 返回:无
# 修改密码
${str1} Evaluate '${Tsg_Passwd} --password %s' % ('${cliPassword}x')
Run7 ${str1}
${str2} Evaluate '${Tsg_Passwd} --password %s --username %s' % ('${cliPassword}y','${cliUsername}')
Run7 ${str2}
Close Connection
# 登录验证
Open Connection ${cliHost}
SSHLibrary.Login ${cliUsername} ${cliPassword}y
# 复原密码
${str3} Evaluate '${Tsg_Passwd} --password %s' % ('${cliPassword}')
Run8 ${str3}
Run1
[Documentation]
... 描述:运行指令,将返回值处理后返回
... 参数command(具体指令内容)
... 返回:响应数据,字典
[Arguments] ${command}
Write ${command}
${r} Read delay=10s
${dict} Run Keyword If '${cliUsername}'!='tsgadmin' Run1_A ${r}
... ELSE Run1_B ${r}
[Return] ${dict}
Run1_A
[Arguments] ${r}
Should Contain ${r} command not found
${dict} To Json {"data":{"list":[{"policyDesc":"","policyId":0,"policyName":"","policyType":"","objectType":"","objectName":"","isValid":0},{"policyDesc":"","policyId":0,"policyName":"","policyType":"","isValid":0}],"total":2},"msg":"Success"}
[Return] ${dict}
Run1_B
[Arguments] ${r}
Should Contain ${r} Success
${str} Replace String ${r} ${\n} -
${str} Replace String ${str} ' \\'
${index} Evaluate '${str}'.rindex('}') + 1
${len} Convert To Integer ${index}
${json} Evaluate '${str}'[0:${len}]
${dict} json.Loads ${json}
Should Be True ${dict}[data][total] > 0
[Return] ${dict}
Run2
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容)
... 返回:无
[Arguments] ${command}
Write ${command}
${r} Read delay=10s
Run Keyword If '${cliUsername}'!='tsgadmin' Should Contain ${r} command not found
... ELSE Should Contain ${r} Success
Run3
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容)
... 返回:无
[Arguments] ${command}
${flag} Run Keyword If '${cliUsername}'!='tsgadmin' Set Variable command not found
... ELSE Set Variable Success
# 执行'text'指令,在'timeout'时间内每隔'retry_interval'时间重试,直至返回值出现'expected'时或超时结束
Write Until Expected Output ${command}\n ${flag} ${timeout} ${retryInterval}
Read delay=5s
Run4
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容)
... 返回:无
[Arguments] ${command}
Write ${command}
${r} Read delay=10s
Run Keyword If '${cliUsername}'!='tsgadmin' Should Contain Any ${r} command not found -bash:
... ELSE Should Not Contain ${r} head:
Run5
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容)
... 返回:响应数据,列表
[Arguments] ${command}
Write ${command}
${r} Read delay=10s
Should Not Be Empty ${r}
#用换行符作为命令结束
${str} Replace String ${r} ${\n} -
${index} Evaluate '${str}'.rindex('-')
${len} Convert To Integer ${index}
${json} Evaluate '${str}'[0:${len}]
#cli命令结果返回结束为换行使用下面截取
#${index} Evaluate '${r}'.rindex('tsgcli >')
#${len} Convert To Integer ${index}
#${json} Evaluate '${r}'[0:${len}]
${dict} json.Loads ${json}
${list} Convert To List ${dict}
[Return] ${list}
Run6
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容) param(预期内容,用于验证)
... 返回:无
[Arguments] ${command} ${param}
Write ${command}
${r} Read delay=10s
Should Not Be Empty ${r}
Run Keyword If '${cliUsername}'!='tsgadmin' Should Contain ${r} command not found
... ELSE Should Contain ${r} ${param}
Run7
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容)
... 返回:无
[Arguments] ${command}
Write ${command}
${r} Read delay=10s
Should Contain ${r} Success
Run8
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容)
... 返回:无
[Arguments] ${command}
# 执行'text'指令,在'timeout'时间内每隔'retry_interval'时间重试,直至返回值出现'expected'时或超时结束
Write Until Expected Output ${command}\n Success ${timeout} ${retryInterval}
Read delay=5s
Run9
[Documentation]
... 描述:运行指令,并验证返回值
... 参数command(具体指令内容)
... 返回:无
[Arguments] ${command}
Write ${command}
${r} Read delay=10s
Should Not Be Empty ${r}
[Return] ${r}
QueryObjectInnerForEach
# 循环嵌套
[Arguments] ${objectType}
${list} Get_Policy_Object4 ${objectType}
# 取最多10条策略对象数据分别做条件查询
FOR ${obj} IN @{list}
Tsg_Policy_Object_Query ${None} ${obj}[objectName] ${True}
Tsg_Policy_Object_Query ${obj}[objectType] ${None} ${True}
Tsg_Policy_Object_Query ${obj}[objectType] ${obj}[objectName] ${True}
END