*** Settings *** Resource ElementPath.robot Library SSHLibrary Resource ../RE0_Common/KeyWord.robot Library String Resource ../RE7_Storage/ElementPath.robot Resource ../RE12_Archive/ElementPath.robot Resource ../RE6_Sync/KeyWord_LocalCopy.robot *** Keywords *** 生成备份文件 [Arguments] ${ip} ${user} ${pwd} # Linux_ip地址|用户名|密码 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} log 新建备份所需文件 Execute Command service iptables stop Execute Command rm -rf /A.txt Execute Command touch /A.txt Execute Command chmod 755 /A.txt Execute Command date >> /A.txt Execute Command dd if=/dev/zero of=/B.dbf bs=1M count=500 Sleep 5s Execute Command mv /B.dbf /B.txt sleep 2s ${origin_file_md5} Execute Command md5sum /A.txt|cut -d" " -f1 Set Suite Variable ${origin_file_md5} Log 源文件MD5值:${origin_file_md5} Close Connection Log 源文件MD5值计算完毕 文件备份 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${check_attr}=0 # 代理名|备份源名称|备份类型|存储介质名称|加密|压缩|重删|校验(默认不勾选) 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 循环点击 ${Add_Policy} ${File_Module} 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//select[@id="dialogues_addCycleStorage_fileOrOracle_selectMedia_select"]/option[contains(text(),"${mds_name}")] 点击选择指定介质 定位指定介质失败 Run Keyword If ${dedup_attr}==1 File_KeyWord.重删 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 File_KeyWord.加密 Run Keyword If ${compress_attr}==1 File_KeyWord.压缩 ... ELSE File_KeyWord.取消压缩 Run Keyword If ${check_attr}==1 File_KeyWord.校验 sleep 6s 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 5s ${View2}= Catenate SEPARATOR= //*[@id="compileBackupViewId ${random_strategyName} "] Wait Until Page Contains Element ${View2} 300s 备份未完成 Log 备份完成 Sleep 2s 文件备份_性能 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${get_bcinfo_interval}=3600s # 代理名|备份目标名称|备份类型|加密|压缩|重删|获取性能信息时间间隔 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" 完全备份 ... ELSE IF "${bk_type}"=="差量" 差量备份 ... ELSE IF "${bk_type}"=="合成" 合成备份 ... ELSE IF "${bk_type}"=="累积增量" 累积增量备份_扫描 Sleep 2s 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 加密 Run Keyword If ${compress_attr}==1 压缩 ... ELSE 取消压缩 Run Keyword If ${dedup_attr}==1 重删 元素点击 ${File_Senior_NextStep} 点击下一步进入到备份信息确认栏 定位下一步失败 循环点击 ${Complete_CreatePolicy} ${Success_Confirm} sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 60s Log 开始记录性能数据 Open Connection ${Plantform_BC_IP} SSHLibrary.Login root 2008Bc1223!@# Put File ${Scripts_Path}${/}Script${/}SC0_Common${/}00_Initial${/}server_monitor.sh /mnt mode=7777 Log 上传本地脚本至黑方服务器 FOR ${n} IN RANGE 10000 ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep ${get_bcinfo_interval}s Log 开始记录第 ${n} 次 重删性能数据 Start Command echo "********* Num_${${n}+1}_DEDUP_INFO_OUTPUT*********">> /mnt/${random_strategyName}.log Start Command /mnt/server_monitor.sh >> /mnt/${random_strategyName}.log END Close Connection Log 备份完成 Sleep 2s 文件备份_断网 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${adapter} ${duration} # 代理名|备份目标名称|备份类型|加密|压缩|重删|代理网卡名称|持续间隔 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入任务周期界面 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" 完全备份 ... ELSE IF "${bk_type}"=="差量" 差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 加密 Run Keyword If ${compress_attr}==1 压缩 ... ELSE 取消压缩 Run Keyword If ${dedup_attr}==1 重删 元素点击 ${Speed_Control} 勾选限速 定位限速控制失败 元素输入 ${Input_Speed} 80 定位限速输入框失败 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${Policy_Work} 点击进入作业一栏 定位作业栏失败 Sleep 60s Open Connection 10.10.22.126 timeout=15 s newline=CRLF SSHLibrary.Login root unary@2008 Put File ${Scripts_Path}${/}Script${/}SC0_Common${/}00_Initial${/}adapter_switch.sh /mnt mode=7777 Log 上传本地脚本至黑方服务器 Execute Command /mnt/adapter_switch.sh ${adapter} ${duration} 元素输入 ${Input_PolicyName_Search} ${random_strategyName} 定位策略名输入框失败 元素点击 ${Button_PolicyName_Search} 点击搜索相关作业 定位策略名搜索按钮失败 FOR ${n} IN RANGE 10000 ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//td[@data-field="policyName"]/div[text()="${random_strategyName}"]/../..//div[contains(text(),"本次备份成功")] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 30s END Close Connection Log 备份完成 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 5s 文件备份_网络波动 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${adapter} ${max_delay} ${min_delay} ${loss_per} ${duration} # 代理名|备份目标名称|备份类型|加密|压缩|重删|代理网卡名称|最大延迟时间|最小延迟时间|丢包百分比|持续间隔 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入任务周期界面 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" 完全备份 ... ELSE IF "${bk_type}"=="差量" 差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 加密 Run Keyword If ${compress_attr}==1 压缩 ... ELSE 取消压缩 Run Keyword If ${dedup_attr}==1 重删 元素点击 ${Speed_Control} 勾选限速 定位限速控制失败 元素输入 ${Input_Speed} 50 定位限速输入框失败 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 5s Open Connection 10.10.22.126 timeout=15 s newline=CRLF SSHLibrary.Login root unary@2008 Sleep 5s Put File ${Scripts_Path}${/}Script${/}SC0_Common${/}00_Initial${/}net_instable_1.sh /mnt mode=7777 Put File ${Scripts_Path}${/}Script${/}SC0_Common${/}00_Initial${/}net_instable_2.sh /mnt mode=7777 Log 上传本地脚本至黑方服务器 FOR ${n} IN RANGE 10000 ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 2s Log 开始调整网络丢包和延迟 Execute Command /mnt/net_instable_1.sh ${adapter} ${max_delay} ${min_delay} ${duration} Execute Command /mnt/net_instable_2.sh ${adapter} ${loss_per} ${duration} END Close Connection Log 备份完成 Sleep 2s 文件恢复_性能 [Arguments] ${Sleep_Time} # 恢复策略执行结果的查询间隔 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_Nextstep} 点击下一步进入到恢复高级选项 恢复目标下一步定位失败 元素点击 ${Recover_fileExec} 确定完成恢复策略创建 恢复执行定位失败 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_PolicyName_Search} 恢复策略 定位策略名输入框失败 元素点击 ${Button_PolicyName_Search} 点击搜索相关作业 定位策略名搜索按钮失败 FOR ${n} IN RANGE 10000 ${recover_status} Run Keyword And Return Status Wait Until Page Contains Element ${Recover_Success} Run Keyword If "${recover_status}"=="True" Exit For Loop ... ELSE Log 恢复未完成 Sleep ${Sleep_Time} END Log 恢复成功 文件恢复_断网 [Arguments] ${adapter} ${duration} # 代理网卡名称|持续间隔 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 Sleep 2s 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 元素点击 ${Speed_Control_Recover} 勾选限速 定位限速控制失败 元素输入 ${Input_Speed_Recover} 50 定位限速输入框失败 循环点击 ${Recover_fileExec} ${Success_Confirm} 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Open Connection 10.10.22.126 timeout=15 s newline=CRLF SSHLibrary.Login root unary@2008 Execute Command /mnt/adapter_switch.sh ${adapter} ${duration} FOR ${n} IN RANGE 10000 ${recover_status} Run Keyword And Return Status Wait Until Page Contains Element ${Recover_Success} Run Keyword If "${recover_status}"=="True" Exit For Loop ... ELSE Log 恢复未完成 Sleep 30s END Log 恢复成功 Close Connection 文件恢复_网络波动 [Arguments] ${adapter} ${max_delay} ${min_delay} ${loss_per} ${duration} # 代理网卡名称|最大延迟时间|最小延迟时间|丢包百分比|持续间隔 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 Sleep 2s 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 元素点击 ${Speed_Control_Recover} 勾选限速 定位限速控制失败 元素输入 ${Input_Speed_Recover} 50 定位限速输入框失败 元素点击 ${Recover_fileExec} 确定完成恢复策略创建 恢复执行定位失败 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 5s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Open Connection 10.10.22.126 timeout=15 s newline=CRLF SSHLibrary.Login root unary@2008 FOR ${n} IN RANGE 10000 ${recover_status} Run Keyword And Return Status Wait Until Page Contains Element ${Recover_Success} Run Keyword If "${recover_status}"=="True" Exit For Loop ... ELSE Log 恢复未完成 Sleep 2s Log 开始调整网络丢包和延迟 Execute Command /mnt/net_instable_1.sh ${adapter} ${max_delay} ${min_delay} ${duration} Execute Command /mnt/net_instable_2.sh ${adapter} ${loss_per} ${duration} Execute Command rm -rf *.sh END Log 恢复成功 Close Connection 文件备份_保留周期 [Arguments] ${agent_name} ${bk_target} ${bk_type} # 代理名|备份目标名称|备份类型 [Documentation] 创建文件备份策略,设置备份保留周期,可根据传入的参数进行备份类型,介质,加密压缩重删等参数进行选择 ... ... 新增备份集页面搜索操作,防止修改时间对备份集状态的判断造成影响 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期界面 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" File_KeyWord.累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" File_KeyWord.累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Select_Bk_Savetime} 点击展开备份集保留时间下拉框 定位备份集保留时间下拉框失败 元素点击 ${Save_by_Day} 点击选择保留周期为天 定位保留周期为天失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 comment 取消压缩 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} Sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 120s 元素输入 ${DPMFind_Policy} ${random_strategyName} 策略名输入失败 Sleep 2s 元素点击 ${DPMButton_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 2s 文件备份_保留个数 [Arguments] ${agent_name} ${bk_target} ${bk_type} # 代理名|备份目标名称|备份类型 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期界面 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" 完全备份 ... ELSE IF "${bk_type}"=="差量" 差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Select_Bk_Savetime} 点击展开备份集保留时间下拉框 定位备份集保留时间下拉框失败 元素点击 ${Save_by_geshu} 点击选择保留周期为按个数保留 定位保留周期为按个数保留失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Comment 取消压缩 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} Sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 60s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 2s 备份集属性校验 [Arguments] ${encryption} ${compress} ${deduped} # 压缩|加密|重删 元素点击 ${BackupSet} 进入备份集页面 进入备份集页面失败 sleep 10s ${BK_Detailid}= Catenate SEPARATOR= compileBackupViewId ${random_strategyName} click element xpath=//span[@id="${BK_Detailid}"] Sleep 10s Run Keyword If ${encryption}==1 加密属性校验 ... ELSE Log 属性不校验 Run Keyword If ${compress}==1 压缩属性校验 ... ELSE Log 属性不校验 Run Keyword If ${deduped}==1 重删属性校验 ... ELSE Log 属性不校验 元素点击 ${Attr_Cancel} 点击取消关闭备份集详情弹窗 定位取消按钮失败 Log 备份集属性确认完毕 Sleep 2s 文件恢复 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 sleep 5s 元素输入 ${Input_Policy_Name} ${random_strategyName} 定位策略名搜索框失败 元素点击 ${DPMButton_Searchbutton} 点击查找筛选策略 定位查找按钮失败 sleep 5s 元素点击 ${Click_recover} 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 元素点击 ${Recover_fileExec} 点击创建恢复策略 定位恢复策略最后一步确定失败 元素点击 ${window_button_recover_confirm} 点击确定按钮完成恢复操作 定位恢复弹窗确定按钮失败 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Wait Until Page Contains Element ${Recover_Success} 300s 恢复失败 sleep 2s Log 恢复成功 文件恢复_编辑 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 循环点击 ${Recover_fileExec} ${window_button_recover_confirm} 元素点击 ${window_button_recover_confirm} 点击确定按钮完成恢复操作 定位恢复弹窗确定按钮失败 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Wait Until Page Contains Element ${Recover_Success} 300s 恢复失败 sleep 2s Log 恢复成功 校验文件 [Arguments] ${ip} ${user} ${pwd} Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Log 连接成功 ${recovered_file_md5} Execute Command md5sum /A.txt|cut -d" " -f1 Close Connection Log origin_file_md5=${origin_file_md5} Run Keyword If "${recovered_file_md5}"=="${origin_file_md5}" Log 文件恢复成功,MD5值一致 ... ELSE Fail 文件恢复失败,MD5值不一致 完全备份 Sleep 2s Click Element ${Full_Backup} Log 勾选完全备份 差量备份 Sleep 2s Click Element ${Divergence_Backup} Log 勾选差量备份 累积增量备份_扫描 Sleep 2s Click Element ${Total_Backup} Log 勾选累积增量备份 元素点击 ${Total_Backup_Style} 点击展开增量备份下拉框 定位增量备份下拉框失败 元素点击 ${Total_Backup_Scan} 选择累积增量扫描方式 定位扫描选项失败 累积增量备份_驱动 Sleep 2s Click Element ${Total_Backup} Log 勾选累积增量备份 元素点击 ${Total_Backup_Style} 点击展开增量备份下拉框 定位增量备份下拉框失败 元素点击 ${Total_Backup_Driver} 选择累积增量驱动选项 定位增量驱动选项失败 加密 Sleep 2s Click Element ${Option_Encryption} Log 点击加密 Sleep 2s 压缩 Log 点击压缩 Set Focus To Element ${Option_Compress} Click Element ${Option_Compress} 重删 Sleep 2s Click Element ${Select_Dedup} Log 点击重删 Sleep 2s 压缩属性校验 ${get_attr}= Get Text ${Compress_Attr} Element Text Should Be ${Compress_Attr} 是 Log 压缩属性校验完毕 加密属性校验 ${get_attr}= Get Text ${Encryption_Attr} Element Should Contain ${Encryption_Attr} 是 Log 加密属性校验完毕 重删属性校验 ${get_attr}= Get Text ${Deduped_Attr} Element Should Contain ${Deduped_Attr} 是 Log 重删属性校验完毕 任务信息校验 Open Connection ${Plantform_BC_IP} SSHLibrary.Login root 2008Bc1223!@# 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//span[text()="详情"] 点击查看备份集详情 定位备份集详情失败 ${Bk_Storage} Get Text ${Bk_Storage} @{Storage} Evaluate re.split(' ','${Bk_Storage}') re ${Int_Storage} Evaluate float(${Storage}[0]) Log 备份集大小为:${Int_Storage} G Start Command echo "BK_Storage:${Int_Storage} G">> /mnt/${random_strategyName}.log ${Bk_RealStorage} Get Text ${Bk_RealStorage} @{RealStorage} Evaluate re.split(' ','${Bk_RealStorage}') re ${Int_RealStorage} Evaluate float(${RealStorage}[0]) Log 备份集实际大小为:${Int_RealStorage} G Start Command echo "Real_BK_Storage:${Int_RealStorage} G">> /mnt/${random_strategyName}.log ${Bk_Dedup_Per} Get Text ${Bk_Dedup_Per} Log 备份集重删率为:${Bk_Dedup_Per} Start Command echo "Dedup_Percentage:${Bk_Dedup_Per} ">> /mnt/${random_strategyName}.log 元素点击 ${Attr_Cancel} 点击取消关闭备份集详情弹窗 定位取消按钮失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 ${Bk_Runingtime} Get Text xpath=//div[text()="${random_strategyName}"]/../..//td[6]/div Log 备份运行时间为:${Bk_Runingtime} Start Command echo -e "BK_Time:${Bk_Runingtime} \n">> /mnt/${random_strategyName}.log 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 普通任务信息校验 Open Connection ${Plantform_BC_IP_Des} SSHLibrary.Login root 2008Bc1223!@# 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//span[text()="详情"] 点击查看备份集详情 定位备份集详情失败 ${Bk_Storage} Get Text ${Bk_Storage} Log 备份集大小为:${Bk_Storage} Start Command echo "BK_Storage:${Bk_Storage}">> /mnt/${random_strategyName}.log ${Bk_RealStorage} Get Text ${Bk_RealStorage} Log 备份集实际大小为:${Bk_RealStorage} Start Command echo "Real_BK_Storage:${Bk_RealStorage} ">> /mnt/${random_strategyName}.log 元素点击 ${Attr_Cancel} 点击取消关闭备份集详情弹窗 定位取消按钮失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 ${Bk_Runingtime} Get Text xpath=//div[text()="${random_strategyName}"]/../..//td[6]/div Log 备份运行时间为:${Bk_Runingtime} Start Command echo -e "BK_Time:${Bk_Runingtime} \n">> /mnt/${random_strategyName}.log ${Bk_RuningSpeed} Get Text xpath=//div[text()="${random_strategyName}"]/../..//td[8]/div Log 备份运行时间为:${Bk_RuningSpeed} Start Command echo -e "BK_RunningSpeed:${Bk_RuningSpeed} \n">> /mnt/${random_strategyName}.log 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 文件备份普通_性能 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${get_bcinfo_interval}=3600s # 代理名|备份目标名称|备份类型|获取性能信息时间间隔 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" 完全备份 ... ELSE IF "${bk_type}"=="差量" 差量备份 ... ELSE IF "${bk_type}"=="合成" 合成备份 ... ELSE IF "${bk_type}"=="累积增量" 累积增量备份 Sleep 2s 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Set Focus To Element ${Option_Compress} Click Element ${Option_Compress} Sleep 2s Log 取消压缩 元素点击 ${File_Senior_NextStep} 点击下一步进入到备份信息确认栏 定位下一步失败 元素点击 ${Complete_CreatePolicy} 点击确定按钮完成策略创建 定位确定按钮失败 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 Open Connection ${Plantform_BC_Url} SSHLibrary.Login root 2008Bc1223!@# Execute Command systemctl stop firewalld 关闭防火墙 Execute Command /unary/unabackup/bin/nmon -F "${random_strategyName}"_BK_CPU_MEM -s 5 -c 12 -m /mnt 生成备份性能文件 sleep 10s Open Connection ${File_IP_Lin} SSHLibrary.Login root unary@2008 Execute Command systemctl stop firewalld 关闭防火墙 Execute Command mkdir /root/top Start Command echo "CPU_US(%)">> /root/top/${random_strategyName}_bk.log Execute Command top -b -n 1| grep Cpu \| awk '{print $2}'>>/root/top/${random_strategyName}_bk.log Start Command echo "---------------------------------">> /root/top/${random_strategyName}_bk.log Start Command echo "MEM_TOTAL(KB)">> /root/top/${random_strategyName}_bk.log Execute Command top -b -n 1 \| grep "KiB Mem" \| awk '{print $4}'>>/root/top/${random_strategyName}_bk.log Start Command echo "---------------------------------">> /root/top/${random_strategyName}_bk.log Start Command echo "MEM_USED(KB)">> /root/top/${random_strategyName}_bk.log Execute Command top -b -n 1 \| grep "KiB Mem" \| awk '{print $10}'>>/root/top/${random_strategyName}_bk.log 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 元素输入 ${Input_PolicyName_Search} ${random_strategyName} 定位策略名输入框失败 元素点击 ${Button_PolicyName_Search} 点击搜索相关作业 定位策略名搜索按钮失败 FOR ${n} IN RANGE 10000 ${bk_status} Run Keyword And Return Status Wait Until Page Contains Element xpath=//tbody/tr[1]/td[@data-field="description"]/div[text()="本次备份成功 "] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 30s END 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Log 备份完成 Sleep 5s 恢复数据记录 Open Connection 10.10.15.110 SSHLibrary.Login root 2008Bc1223!@# ${Bk_Recovertime} Get Text xpath=//tbody/tr[1]/td[@data-field="runningTime"]/div[1] Log 备份运行时间为:${Bk_Recovertime} Start Command echo -e "-------------------------------------- \n">> /mnt/${random_strategyName}.log Start Command echo -e "Recover_Time:${Bk_Recovertime} \n">> /mnt/${random_strategyName}.log ${Bk_RecoverSpeed} Get Text xpath=//tbody/tr[1]/td[@data-field="networkSpeed"]/div[1] Log 备份运行时间为:${Bk_RecoverSpeed} Start Command echo -e "Recover_Speed:${Bk_RecoverSpeed} \n">> /mnt/${random_strategyName}.log 文件恢复普通 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 Sleep 6s 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 元素点击 ${File_Rec_Senior_NextStep} 点击下一步进入到恢复信息确认页面 定位高级选项下一步失败 循环点击 ${Recover_fileExec} ${Success_Confirm} 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Open Connection ${Plantform_BC_Url} SSHLibrary.Login root 2008Bc1223!@# Execute Command systemctl stop firewalld 关闭防火墙 Execute Command /unary/unabackup/bin/nmon -F "${random_strategyName}"_Recover_CPU_MEM -s 5 -c 12 -m /mnt 生成恢复性能文件 Sleep 10s Open Connection ${File_IP_Lin} SSHLibrary.Login root unary@2008 Execute Command systemctl stop firewalld 关闭防火墙 Start Command echo "CPU_US(%)">> /root/top/${random_strategyName}_recover.log Execute Command top -b -n 1| grep Cpu \| awk '{print $2}'>>/root/top/${random_strategyName}_recover.log Start Command echo "---------------------------------">> /root/top/${random_strategyName}_recover.log Start Command echo "MEM_TOTAL(KB)">> /root/top/${random_strategyName}_recover.log Execute Command top -b -n 1 \| grep "KiB Mem" \| awk '{print $4}'>>/root/top/${random_strategyName}_recover.log Start Command echo "---------------------------------">> /root/top/${random_strategyName}_recover.log Start Command echo "MEM_USED(KB)">> /root/top/${random_strategyName}_recover.log Execute Command top -b -n 1 \| grep "KiB Mem" \| awk '{print $10}'>>/root/top/${random_strategyName}_recover.log 元素输入 ${Input_PolicyName_Search} 恢复策略 定位策略名输入框失败 元素点击 ${Button_PolicyName_Search} 点击搜索相关作业 定位策略名搜索按钮失败 FOR ${n} IN RANGE 10000 ${recover_status} Run Keyword And Return Status Wait Until Page Contains Element ${Recover_Success} Run Keyword If "${recover_status}"=="True" Exit For Loop ... ELSE Log 恢复未完成 Sleep 30s END Log 恢复成功 立即执行 [Arguments] ${bk_type} # 立即执行备份类型 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 ${dpm_Protection strategy} 切换到定时保护策略栏 定位定时保护策略功能栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//span[text()="立即执行"] 点击策略立即执行 定位立即执行失败 元素点击 ${Exe_File_Bk} 点击展开立即执行下拉框 定位立即执行备份类型失败 Run Keyword If "${bk_type}"=="完全" 立即执行_完全 ... ELSE IF "${bk_type}"=="差量" 立即执行_差量 ... ELSE IF "${bk_type}"=="累积增量_扫描" 立即执行_累计扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 立即执行_累计驱动 ... ELSE IF "${bk_type}"=="合成备份_完全" 立即执行_合成完全 ... ELSE IF "${bk_type}"=="合成备份_增量" 立即执行_合成增量 Sleep 2s 循环点击 ${ExecutePolicy_execute} ${Complie_confirm} Sleep 15s 元素点击 ${Complie_confirm} 点击确定按钮 定位确定按钮失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 300s ${out1} get text //*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[5] Log 备份集类型为${out1} Comment Sleep 5s Wait Until Page Contains Element xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 5s 立即执行_完全 元素点击 ${Now Full_Bacup} 点击立即执行完全备份 定位完全备份选项失败 立即执行_差量 元素点击 ${Now Difference_Backup} 点击立即执行差量备份 定位差量备份选项失败 立即执行_累计扫描 元素点击 ${Now_Total} 点击立即执行累计增量备份 定位累计增量备份选项失败 元素点击 ${Exe_Total_Bk} 点击展开累计增量备份下拉框 定位累计增量备份下拉框失败 元素点击 ${Exe_Total_Scan} 选择扫描方式进行备份 定位扫描方式失败 立即执行_累计驱动 元素点击 ${Now_Total} 点击立即执行累计增量备份 定位累计增量备份选项失败 元素点击 ${Exe_Total_Bk} 点击展开累计增量备份下拉框 定位累计增量备份下拉框失败 元素点击 ${Exe_Total_Driver} 选择驱动方式进行备份 定位驱动方式失败 立即执行_合成完全 元素点击 ${Now_Compose} 点击立即执行合成备份 定位合成备份选项失败 元素点击 ${Exe_Compose} 点击展开合成备份下拉框 定位合成备份下拉框失败 元素点击 ${Exe_Compose_Full} 选择合成完全方式进行备份 定位合成完全方式失败 立即执行_合成增量 元素点击 ${Now_Compose} 点击立即执行合成备份 定位合成备份选项失败 元素点击 ${Exe_Compose} 点击展开合成备份下拉框 定位合成备份下拉框失败 元素点击 ${Exe_Compose_Incre} 选择合成增量方式进行备份 定位合成增量方式失败 普通文件备份windows [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${get_bcinfo_interval}=3600s # 代理名|备份目标名称|备份类型|获取性能信息时间间隔 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" 完全备份 ... ELSE IF "${bk_type}"=="差量" 差量备份 ... ELSE IF "${bk_type}"=="合成" 合成备份 ... ELSE IF "${bk_type}"=="累积增量" 累积增量备份 Sleep 2s 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Set Focus To Element ${Option_Compress} Click Element ${Option_Compress} Sleep 2s Log 取消压缩 元素点击 ${File_Senior_NextStep} 点击下一步进入到备份信息确认栏 定位下一步失败 元素点击 ${Complete_CreatePolicy} 点击确定按钮完成策略创建 定位确定按钮失败 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 Open Connection ${Plantform_BC_Url} SSHLibrary.Login root 2008Bc1223!@# delay=5s Execute Command systemctl stop firewalld 关闭防火墙 Execute Command /unary/unabackup/bin/nmon -F "${random_strategyName}"_BK_CPU_MEM -s 5 -c 12 -m /mnt 生成备份性能文件 Sleep 2s Open Connection ${Agent_windows_IP} SSHLibrary.Login administrator unary@2008 delay=5s Sleep 1s Run Keyword And Ignore Error Execute Command cd /Python27&python GETCPU_MEMORY_bk.py 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 元素输入 ${Input_PolicyName_Search} ${random_strategyName} 定位策略名输入框失败 元素点击 ${Button_PolicyName_Search} 点击搜索相关作业 定位策略名搜索按钮失败 FOR ${n} IN RANGE 10000 ${bk_status} Run Keyword And Return Status Wait Until Page Contains Element xpath=//div[text()="${random_strategyName}"]/../..//td[@data-field="description"]/div[contains(text(),"备份成功")] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 30s END Run Keyword If "${bk_status}"=="False" Fail 备份失败 ... ELSE Log 备份完成 Sleep 5s 普通文件恢复windows 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 Sleep 6s 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 元素点击 ${File_Rec_Senior_NextStep} 点击下一步进入到恢复信息确认页面 定位高级选项下一步失败 循环点击 ${Recover_fileExec} ${Success_Confirm} 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Open Connection ${Plantform_BC_IP_Des} SSHLibrary.Login root 2008Bc1223!@# delay=5s Execute Command systemctl stop firewalld 关闭防火墙 Execute Command /unary/unabackup/bin/nmon -F "${random_strategyName}"_Recover_CPU_MEM -s 5 -c 12 -m /mnt 生成恢复性能文件 Sleep 10s Open Connection ${Agent_windows_IP} SSHLibrary.Login administrator unary@2008 Sleep 1s Run Keyword And Ignore Error Execute Command cd /Python27&python GETCPU_MEMORY_recover.py 元素输入 ${Input_PolicyName_Search} 恢复策略 定位策略名输入框失败 元素点击 ${Button_PolicyName_Search} 点击搜索相关作业 定位策略名搜索按钮失败 FOR ${n} IN RANGE 10000 ${recover_status} Run Keyword And Return Status Wait Until Page Contains Element ${Recover_Success} Run Keyword If "${recover_status}"=="True" Exit For Loop ... ELSE Log 恢复未完成 Sleep 30s END Log 恢复成功 取消压缩 Log 点击取消压缩 Comment Set Focus To Element ${Option_Compress} Comment Click Element ${Option_Compress} 计算MD5值 [Arguments] ${ip} ${user} ${pwd} # Linux_ip地址|用户名|密码 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} ${origin_file_md5} Execute Command md5sum /A.txt|cut -d" " -f1 Set Suite Variable ${origin_file_md5} Log 源文件MD5值获取完毕 Close Connection Log 源文件MD5值计算完毕 校验 Set Focus To Element ${Option_Check} Click Element ${Option_Check} Log 勾选校验选项 Sleep 2s 校验任务检测 [Arguments] ${agent_name} # 代理名称 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 Mouse Out xpath=//span[text()="${agent_name}"] Sleep 120s 元素点击 ${BackupSet} 进入备份集一栏 定位备份集栏失败 元素输入 ${DPMFind_Policy} ${random_strategyName} 策略名输入失败 Sleep 2s 元素点击 ${DPMButton_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s Wait Until Element Is Visible xpath=//div[@id="backupSetTable"]//tr[2]/td[text()="${random_strategyName}"]/../td[text()="校验成功"] 120s 定位校验作业失败 Log 校验成功 备份集清理状态校验 [Arguments] ${agent_name} ${result} # 代理名称|清理结果(yes表示清理,no表示未清理) 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 Sleep 2s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 Mouse Out xpath=//span[text()="${agent_name}"] Sleep 180s 元素点击 ${BackupSet} 进入备份集一栏 定位备份集栏失败 元素输入 ${DPMFind_Policy} ${random_strategyName} 策略名输入失败 Sleep 2s 元素点击 ${DPMButton_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s ${result_now} Run Keyword And Return Status Wait Until Element Is Visible xpath=//div[@id="backupSetTable"]//td[text()="${random_strategyName}"]/../td[text()="文件差量备份"] 30s 定位校验作业失败 Log 获取当前备份集状态 Run Keyword If ${result}==1 Log 需要清理备份集 ... ELSE IF ${result}==0 Log 不需要清理备份集 Run Keyword If '${result_now}'=='False' Log 备份集不存在了 ... ELSE IF '${result_now}'=='True' Log 备份集还存在 Run Keyword If ${result}==1 and '${result_now}'=='False' Log 备份集清理成功 ... ELSE IF ${result}==0 and '${result_now}'=='True' Log 备份集未被清理 ... ELSE Fail 备份集状态错误 Log 判断备份集存在状态完毕 Sleep 60s 备份集清理状态校验Mysql增量备份集 [Arguments] ${agent_name} ${result} # 代理名称|清理结果(yes表示清理,no表示未清理) [Documentation] 校验mysql指定备份集是否被清理成功 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 Sleep 2s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 Mouse Out xpath=//span[text()="${agent_name}"] Sleep 180s 元素点击 ${BackupSet} 进入备份集一栏 定位备份集栏失败 元素输入 ${DPMFind_Policy} ${random_strategyName} 策略名输入失败 Sleep 2s 元素点击 ${DPMButton_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s ${result_now} Run Keyword And Return Status Wait Until Element Is Visible xpath=//div[@id="backupSetTable"]//td[text()="${random_strategyName}"]/../td[text()="MySQL逻辑增量备份"] 30s 定位校验作业失败 Log 获取当前备份集状态 Run Keyword If ${result}==1 Log 需要清理备份集 ... ELSE IF ${result}==0 Log 不需要清理备份集 Run Keyword If '${result_now}'=='False' Log 备份集不存在了 ... ELSE IF '${result_now}'=='True' Log 备份集还存在 Run Keyword If ${result}==1 and '${result_now}'=='False' Log 备份集清理成功 ... ELSE IF ${result}==0 and '${result_now}'=='True' Log 备份集未被清理 ... ELSE Fail 备份集状态错误 Log 判断备份集存在状态完毕 Sleep 2s 定时代理选择 [Arguments] ${agent_name} 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素输入 ${Search_Agent} ${agent_name} 定位代理名称输入框失败 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 文件恢复_同步 [Arguments] ${agent_name} # 恢复到的主机名称 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 ${BK_Restoreid}= Catenate SEPARATOR= compileBackupRecId ${random_strategyName} 元素点击 xpath=//span[@id="${BK_Restoreid}"] 选择备份集进行恢复 定位恢复按钮失败 Sleep 5s 元素输入 ${Input_Sync_Name} ${Sys_Admin} 定位鉴权用户名输入框失败 元素输入 ${Input_Sync_Pwd} ${WebPWD} 定位鉴权密码输入框失败 元素点击 ${Sync_Confirm} 点击确定完成鉴权 定位鉴权确定按钮失败 Sleep 5s 元素点击 ${Success_Confirm} 点击确定关闭弹窗 定位确定按钮失败 Sleep 5s 元素点击 ${Select_Hostname} 点击展开主机名称 定位主机名称下拉框失败 元素点击 xpath=//dd[contains(text(),'${agent_name}')] 选择恢复到的主机名称 定位恢复到的主机名称失败 Sleep 5s 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 Sleep 5s 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 Sleep 6s 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 元素点击 ${Recover_fileExec} 点击执行按钮 定位执行按钮失败 循环点击 ${window_button_recover_confirm} ${Success_Confirm} 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 元素输入 ${Search_Agent} ${Plantform_BC_Agent} 定位代理名称输入框失败 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 Sleep 6s 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Wait Until Page Contains Element ${Recover_Success} 300s 恢复失败 sleep 2s Log 恢复成功 DPM文件备份 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${check_attr}=0 # 代理名|备份目标名称|备份类型|加密|压缩|重删|校验(默认不勾选) 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${BackupSet} 点击进入备份集页面 定位备份集按钮失败 元素点击 ${dpm_Protection strategy} 点击进入保护策略页面 定位保护策略按钮失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项页面 定位下一步按钮失败 元素点击 ${Bk_File_NextStep_Config} 点击下一步进入任务周期页面 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 Run Keyword If ${dedup_attr}==1 重删 ... ELSE log 不选择重删 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 加密 ... ELSE log 不选择加密 Run Keyword If ${compress_attr}==1 压缩 ... ELSE 取消压缩 Comment Run Keyword If ${check_attr}==1 校验 元素点击 ${Complete_Policy_Create_No_Info} 点击确定按钮完成策略创建 定位确定按钮失败 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 60s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 120s 备份未完成 Log 备份完成 Sleep 2s 编辑策略 [Arguments] ${mds_name} ${new_encryption_attr} ${new_compress_attr} ${new_check_attr} 元素点击 ${dpm_Protection strategy} 切换到定时保护策略栏 定位定时保护策略栏失败 元素点击 xpath=//td[text()="${random_strategyName}"]/..//span[text()="编辑"] 点击编辑按钮 定位编辑按钮失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${new_policy_name} Catenate SEPARATOR=_ 编辑策略 ${date} Set Suite Variable ${new_policy_name} 元素输入 ${Input_File_Policy_Name} ${new_policy_name} 定位编辑策略名输入框失败 Sleep 5s 循环点击 ${Edit_Bk_Storage} ${Edit_Select_Media} 循环点击 ${Edit_Select_Media} xpath=//h4[text()="编辑策略"]/../..//select[@ng-model="item.media"]/option[@label="${mds_name}"] 元素点击 xpath=//h4[text()="编辑策略"]/../..//select[@ng-model="item.media"]/option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Bk_Senior_Config} 点击进入备份高级选项 定位编辑下备份高级选项失败 Run Keyword If ${new_encryption_attr}==1 Click Element ${Edit_Encryption} Run Keyword If ${new_compress_attr}==1 Click Element ${Edit_Compress} Run Keyword If ${new_check_attr}==1 Click Element ${Edit_Check} 元素点击 ${Button_File_Finish} 点击完成策略编辑 定位完成策略编辑失败 元素点击 ${Success_Confirm} 确认编辑策略完成 定位策略编辑确认框失败 sleep 2s 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 60s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${new_policy_name}"]/..//td[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 2s 策略校验 [Arguments] ${new_encryption_attr} ${new_compress_attr} ${new_check_attr} Open Connection ${Plantform_BC_IP} SSHLibrary.Login ${Plantform_BC_Name} ${Plantform_BC_PWD} ${Edit_Encryption_Xml}= Set Variable If ${new_encryption_attr}==1 0 ${Edit_Compress_Xml}= Set Variable If ${new_compress_attr}==1 lz4 no ${Edit_Check_Xml}= Set Variable If ${new_check_attr}==1 md5 write cd /tmp;ll -t|grep xml|awk 'NR==1'|awk '{print$9}'|xargs cat |grep -o "${new_policy_name}" Sleep 2s ${Edit_Policy_Name_Result}= read ${Policyname_result} Run Keyword And Return Status Should Contain ${Edit_Policy_Name_Result} ${new_policy_name} write cd /tmp;ll -t|grep xml|awk 'NR==1'|awk '{print$9}'|xargs cat |grep -o "${Edit_Encryption_Xml}" Sleep 2s ${Edit_Encryption_Result}= read ${Encryption_result} Run Keyword And Return Status Should Contain ${Edit_Encryption_Result} encrypt write cd /tmp;ll -t|grep xml|awk 'NR==1'|awk '{print$9}'|xargs cat |grep -o "${Edit_Compress_Xml}" Sleep 2s ${Edit_Compress_Result}= read ${Compress_result} Run Keyword And Return Status Should Contain ${Edit_Compress_Result} compress_type_f write cd /tmp;ll -t|grep xml|awk 'NR==1'|awk '{print$9}'|xargs cat |grep -o "${Edit_Check_Xml}" Sleep 2s ${Edit_Check_Result}= read ${Check_result} Run Keyword And Return Status Should Contain ${Edit_Check_Result} bksetcheck Run Keyword If "${Policyname_result}"=="True" Log 策略下发成功 ... ELSE Fail 策略名修改下发失败 Run Keyword If "${Encryption_result}"=="True" Log 策略下发成功 ... ELSE Fail 策略加密下发失败 Run Keyword If "${Compress_result}"=="True" Log 策略下发成功 ... ELSE Fail 策略压缩下发失败 Run Keyword If "${Check_result}"=="True" Log 策略下发成功 ... ELSE Fail 策略校验下发失败 Close Connection 文件备份集删除加载_备份链 [Arguments] ${agent_name} [Documentation] 只会删除和加载第二行的备份集 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 3s 循环点击 xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] ${Del_Local_Confirm} Sleep 3s 元素点击 ${Del_Local_Confirm} 点击确定删除备份集 定位确定按钮失败 元素点击 ${Success_Confirm} 确定完成备份集删除 定位备份集删除确定弹框失败 ${Del_Result} Run Keyword And Return Status Wait Until Element Is Visible xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] 10s 备份集删除失败 Run Keyword If ${Del_Result}==True 归档备份集删除 ${random_strategyName} Log 备份集删除成功 元素点击 ${Archive} 点击进入创建归档策略栏 定位左侧创建归档策略栏失败 元素点击 ${Arched_Bk} 点击切换到已归档备份集一栏 定位已归档备份集失败 元素输入 ${Input_Arch_PolicyName} ${archive_policy} 定位归档策略输入框失败 元素点击 ${Button_Search_Policy} 点击搜索查询已归档备份集 定位搜索按钮失败 Sleep 5s 元素点击 xpath=//tr[2]//div[text()="${random_strategyName}"]/../..//button[text()="加载"] 点击加载备份集 定位备份集加载按钮失败 元素输入 ${Input_Load_PolicyName} 加载${random_strategyName}备份集 定位加载策略输入框失败 元素点击 ${Complete_Load_Policy} 点击完成加载策略 定位完成按钮失败 元素点击 ${Success_Confirm} 确定备份集加载任务启动成功 定位备份集加载确定弹框失败 元素点击 ${Archive_Monitor} 点击切换到归档任务监控界面 定位归档任务监控栏失败 元素输入 ${Archive_Task_Name} ${random_strategyName} 定位归档任务输入框失败 元素点击 ${Search_Archive_Task} 点击查询按钮搜索归档任务 定位归档任务查询按钮失败 FOR ${n} IN RANGE 15 ${jz_status} Run Keyword And Return Status Wait Until Element Is Visible xpath=//td[contains(text(),"加载成功")] Run Keyword If "${jz_status}"=="True" Exit For Loop ... ELSE Log 加载未完成 Sleep 30s END Run Keyword If "${jz_status}"=="False" Fail ... ELSE Log 加载成功 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 文件恢复_归档 [Arguments] ${Num} # 备份集的行数 Comment 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//div[@id="compileButtonBackup${Num}"]/span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 Sleep 5s 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 Sleep 5s 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到恢复高级选项 恢复目标下一步定位失败 Sleep 6s 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 循环点击 ${Recover_fileExec} ${window_button_recover_confirm} 元素点击 ${window_button_recover_confirm} 点击确定按钮完成恢复操作 定位恢复弹窗确定按钮失败 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 Sleep 6s 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Wait Until Page Contains Element ${Recover_Success} 300s 恢复失败 sleep 2s Log 恢复成功 清空后台策略 [Arguments] ${ip} ${user} ${pwd} Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} log 新建备份所需文件 Execute Command rm -rf /tmp/*.xml Close Connection Log 源文件MD5值计算完毕 定时文件备份集删除_备份链 [Arguments] ${agent_name} [Documentation] 只会删除和加载第二行的备份集 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] 点击删除备份集 定位删除按钮失败 Sleep 2s 元素点击 ${Del_Local_Confirm} 点击确定删除备份集 定位确定按钮失败 元素点击 ${Success_Confirm} 确定完成备份集删除 定位备份集删除确定弹框失败 Wait Until Element Is Not Visible xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] 10s 备份集删除失败 Log 备份集删除成功 定时文件备份集删除_独立备份集 [Arguments] ${agent_name} 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup0"]/span[text()="删除"] 点击删除备份集 定位删除按钮失败 Sleep 2s Comment 元素点击 ${Del_All_Bk_DPM} 点击完全删除备份集 定位完全删除本地备份集失败 元素点击 ${Del_Local_Confirm} 点击确定删除备份集 定位确定按钮失败 元素点击 ${Success_Confirm} 确定完成备份集删除 定位备份集删除确定弹框失败 Sleep 30s 磁带清理扫描 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${Tape_Manager} 进入磁带库管理页面 定位磁带库管理失败 元素点击 ${Tape_Pool} 点击进入磁带存储池栏 定位磁带存储池失败 Sleep 2s 循环点击 xpath=//span[text()="${D2D2T}"] ${Tape_ChooseFirst} Sleep 5s 元素点击 ${Tape_ChooseFirst} 点击存储池第一个磁带的详情 详情位置定位失败 Sleep 300s 元素点击 ${Tape_CleanTape} 点击清除磁带按钮 清除磁带按钮定位失败 元素点击 ${Tape_CleanTapeSure} 点击清除磁带确认按钮 清除磁带确认按钮定位失败 元素点击 ${Tape_CleanTapeOK} 点击确认磁带清除成功 磁带清理成功确认按钮定位失败 元素点击 ${Tape_TapeScanClose} 点击关闭磁带详情页面成功 定位关闭磁带详情按钮失败 Comment 元素点击 ${Tape_TapeScan} 点击扫描按钮 扫描按钮定位失败 Comment 元素点击 ${Tape_CleanTapeOK} 点击确认扫描下发成功 确定按钮定位失败 元素点击 ${Archive} 点击进入创建归档策略栏 定位左侧创建归档策略栏失败 元素点击 ${Tape_Scan_List} 点击切换到归档介质列表栏 定位归档介质列表失败 Sleep 10s 元素点击 ${Start_Scan_Tape} 点击开始扫描磁带 定位扫描磁带失败 Sleep 5s 元素点击 ${Success_Confirm} 点击确定弹窗,开始扫描 定位确定开始扫描弹窗失败 Sleep 10s 定时文件备份集加载_备份链 [Arguments] ${agent_name} [Documentation] 只会删除和加载第二行的备份集 元素点击 ${Archive} 点击进入创建归档策略栏 定位左侧创建归档策略栏失败 元素点击 ${Arched_Bk} 点击切换到已归档备份集一栏 定位已归档备份集失败 元素输入 ${Input_Arch_PolicyName} ${archive_policy} 定位归档策略输入框失败 元素点击 ${Button_Search_Policy} 点击搜索查询已归档备份集 定位搜索按钮失败 元素点击 xpath=//tr[2]//div[text()="${random_strategyName}"]/../..//button[text()="加载"] 点击加载备份集 定位备份集加载按钮失败 元素输入 ${Input_Load_PolicyName} 加载${random_strategyName}备份集 定位加载策略输入框失败 元素点击 ${Complete_Load_Policy} 点击完成加载策略 定位完成按钮失败 元素点击 ${Success_Confirm} 确定备份集加载任务启动成功 定位备份集加载确定弹框失败 元素点击 ${Archive_Monitor} 点击切换到归档任务监控界面 定位归档任务监控栏失败 元素输入 ${Archive_Task_Name} ${random_strategyName} 定位归档任务输入框失败 元素点击 ${Search_Archive_Task} 点击查询按钮搜索归档任务 定位归档任务查询按钮失败 FOR ${n} IN RANGE 15 ${jz_status} Run Keyword And Return Status Wait Until Element Is Visible xpath=//td[contains(text(),"加载成功")] Run Keyword If "${jz_status}"=="True" Exit For Loop ... ELSE Log 加载未完成 Sleep 30s END Run Keyword If "${jz_status}"=="False" Fail ... ELSE Log 加载成功 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 立即执行_归档 [Arguments] ${bk_type} ${agent_name} # 立即执行备份类型|代理名称 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${dpm_Protection strategy} 切换到定时保护策略栏 定位定时保护策略功能栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//span[text()="立即执行"] 点击策略立即执行 定位立即执行失败 元素点击 ${Exe_File_Bk} 点击展开立即执行下拉框 定位立即执行备份类型失败 Run Keyword If "${bk_type}"=="完全" 立即执行_完全 ... ELSE IF "${bk_type}"=="差量" 立即执行_差量 ... ELSE IF "${bk_type}"=="累积增量_扫描" 立即执行_累计扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 立即执行_累计驱动 ... ELSE IF "${bk_type}"=="合成备份_完全" 立即执行_合成完全 ... ELSE IF "${bk_type}"=="合成备份_增量" 立即执行_合成增量 Sleep 2s 循环点击 ${ExecutePolicy_execute} ${Complie_confirm} Sleep 5s 元素点击 ${Complie_confirm} 点击确定按钮 定位确定按钮失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 20s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 5s 定时文件备份集加载_独立备份集 [Arguments] ${agent_name} [Documentation] 只会删除和加载第二行的备份集 元素点击 ${Archive} 点击进入创建归档策略栏 定位左侧创建归档策略栏失败 元素点击 ${Arched_Bk} 点击切换到已归档备份集一栏 定位已归档备份集失败 元素输入 ${Input_Arch_PolicyName} ${archive_policy} 定位归档策略输入框失败 元素点击 ${Button_Search_Policy} 点击搜索查询已归档备份集 定位搜索按钮失败 Sleep 5s 元素点击 xpath=//tr[1]//div[text()="${random_strategyName}"]/../..//button[text()="加载"] 点击加载备份集 定位备份集加载按钮失败 元素输入 ${Input_Load_PolicyName} 加载${random_strategyName}备份集 定位加载策略输入框失败 元素点击 ${Complete_Load_Policy} 点击完成加载策略 定位完成按钮失败 元素点击 ${Success_Confirm} 确定备份集加载任务启动成功 定位备份集加载确定弹框失败 元素点击 ${Archive_Monitor} 点击切换到归档任务监控界面 定位归档任务监控栏失败 元素输入 ${Archive_Task_Name} ${random_strategyName} 定位归档任务输入框失败 元素点击 ${Search_Archive_Task} 点击查询按钮搜索归档任务 定位归档任务查询按钮失败 FOR ${n} IN RANGE 15 ${jz_status} Run Keyword And Return Status Wait Until Element Is Visible xpath=//td[contains(text(),"加载成功")] Run Keyword If "${jz_status}"=="True" Exit For Loop ... ELSE Log 加载未完成 Sleep 30s END Run Keyword If "${jz_status}"=="False" Fail ... ELSE Log 加载成功 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 归档路径查询_文件 [Arguments] ${agent_name} ${tape_name} # 代理名称|磁盘名称 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s Wait Until Element Is Visible xpath=//td[text()="${random_strategyName}"]/../../tr[2]/td[text()="已归档"] 5s 未找到已归档的备份集 元素点击 xpath=//td[text()="${random_strategyName}"]/..//span[text()="详情"] 点击展开备份集详情 定位详情按钮失败 元素点击 ${Check_Archpath} 点击查询归档路径 定位归档路径查询按钮失败 Wait Until Element Is Visible xpath=//div[text()="${tape_name}"] 15s 归档路径查询失败 归档备份集删除 [Arguments] ${random_strategyName} 元素点击 xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] 点击删除备份集 定位删除按钮失败 Sleep 2s 元素点击 ${Del_Local_Confirm} 点击确定删除备份集 定位确定按钮失败 元素点击 ${Success_Confirm} 确定完成备份集删除 定位备份集删除确定弹框失败 ${Del_Result} Run Keyword And Return Status Wait Until Element Is Visible xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] 10s 备份集删除失败 修改备份数据源 [Arguments] ${ip} ${user} ${pwd} # Linux_ip地址|用户名|密码 [Documentation] 功能:修改备份文件 ... ... 使用方法:在A.txt中插入当前时间点 ... ... 变量:无 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} log 修改备份所需文件 Execute Command service iptables stop Comment Execute Command rm -rf /A.txt Comment Execute Command touch /A.txt Comment Execute Command chmod 755 /A.txt Execute Command date >> /A.txt sleep 2s write [ -f /A.txt ] && echo yes || echo no ${add} read Should Contain ${add} yes ${origin_file_md5} Execute Command md5sum /A.txt|cut -d" " -f1 Set Suite Variable ${origin_file_md5} Log 源文件MD5值:${origin_file_md5} Close Connection Log 源文件MD5值计算完毕 文件备份_清理校验 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${check_attr}=0 # 代理名|备份目标名称|备份类型|加密|压缩|重删|校验(默认不勾选) [Documentation] 创建文件备份策略,设置备份保留周期,可根据传入的参数进行备份类型,介质,加密压缩重删等参数进行选择 ... ... 新增备份集页面搜索操作,防止修改时间对备份集状态的判断造成影响 ... ... 清理校验后是指在执行TC07_Bk_CheckClean后经过修改时间,使用此关键字不受修改时间的影响 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 循环点击 ${Add_Policy} ${File_Module} 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 File_KeyWord.加密 Run Keyword If ${compress_attr}==1 File_KeyWord.压缩 ... ELSE File_KeyWord.取消压缩 Run Keyword If ${dedup_attr}==1 File_KeyWord.重删 Run Keyword If ${check_attr}==1 File_KeyWord.校验 sleep 6s 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 120s 元素输入 ${DPMFind_Policy} ${random_strategyName} 策略名输入失败 Sleep 2s 元素点击 ${DPMButton_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 360s 备份未完成 Log 备份完成 Sleep 2s 立即执行_清理校验 [Arguments] ${bk_type} # 立即执行备份类型 [Documentation] 清理校验后是指在执行TC07_Bk_CheckClean后经过修改时间,使用此关键字不受修改时间的影响 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 ${dpm_Protection strategy} 切换到定时保护策略栏 定位定时保护策略功能栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//span[text()="立即执行"] 点击策略立即执行 定位立即执行失败 元素点击 ${Exe_File_Bk} 点击展开立即执行下拉框 定位立即执行备份类型失败 Run Keyword If "${bk_type}"=="完全" 立即执行_完全 ... ELSE IF "${bk_type}"=="差量" 立即执行_差量 ... ELSE IF "${bk_type}"=="累积增量_扫描" 立即执行_累计扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 立即执行_累计驱动 ... ELSE IF "${bk_type}"=="合成备份_完全" 立即执行_合成完全 ... ELSE IF "${bk_type}"=="合成备份_增量" 立即执行_合成增量 Sleep 2s 循环点击 ${ExecutePolicy_execute} ${Complie_confirm} Sleep 5s 元素点击 ${Complie_confirm} 点击确定按钮 定位确定按钮失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 90s 元素输入 ${DPMFind_Policy} ${random_strategyName} 策略名输入失败 Sleep 2s 元素点击 ${DPMButton_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 60s 文件备份_限速 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${speed} # 代理名|备份源名称|备份类型|存储介质名称|限速大小 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 循环点击 ${Add_Policy} ${File_Module} 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//select[@id="dialogues_addCycleStorage_fileOrOracle_selectMedia_select"]/option[contains(text(),"${mds_name}")] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 元素点击 ${Speed_Control} 点击创建限速策略 定位创建限速策略失败 元素点击 ${All_Day} 点击勾选全天 定位限速全天按钮失败 元素输入 ${Input_Speed} ${speed} 定位限速输入框失败 元素点击 ${Confirm_SpeedLimit} 点击确定创建限速策略 定位限速策略创建确定按钮失败 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 30s 文件恢复_限速 [Arguments] ${recover_speed} # 恢复限速 Wait Until Page Contains Element Xpath=//span[@id="compileBackupViewId${random_strategyName}"]/../../..//*[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 2s 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到文件选项页面 定位下一步定位失败 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 元素点击 ${Choose_LimitSpeed} 点击勾选限速 定位限速 元素点击 ${All_Day} 点击勾选全天 定位全天限速选项失败 元素输入 ${Input_LimitSpeed} ${recover_speed} 定位恢复速度输入框失败 元素点击 ${Confirm_SpeedLimit} 点击确定创建恢复限速策略 定位限速恢复确定按钮失败 元素点击 ${Recover_fileExec} 点击创建恢复策略 定位恢复策略最后一步确定失败 元素点击 ${window_button_recover_confirm} 点击确定按钮完成恢复操作 定位恢复弹窗确定按钮失败 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 文件备份集校验_限速 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Wait Until Page Contains Element ${Recover_Success} 300s 恢复失败 sleep 2s Log 恢复成功 DPM文件备份_win [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${check_attr}=0 # 代理名|备份目标名称|备份类型|加密|压缩|重删|校验(默认不勾选) 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${BackupSet} 点击进入备份集页面 定位备份集按钮失败 元素点击 ${dpm_Protection strategy} 点击进入保护策略页面 定位保护策略按钮失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 ${File_Expand} 点击展开C盘文件 定位C盘文件展开按钮失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项页面 定位下一步按钮失败 元素点击 ${Bk_File_NextStep_Config} 点击下一步进入任务周期页面 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 Run Keyword If ${dedup_attr}==1 重删 sleep 3s 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 加密 Run Keyword If ${compress_attr}==1 压缩 ... ELSE 取消压缩 Comment Run Keyword If ${dedup_attr}==1 重删 Comment Run Keyword If ${check_attr}==1 校验 元素点击 ${Complete_Policy_Create_No_Info} 点击确定按钮完成策略创建 定位确定按钮失败 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 10s 元素输入 ${Input_Policy_Name} ${random_strategyName} 定位策略名搜索框失败 元素点击 ${DPMButton_Searchbutton} 点击查找筛选策略 定位查找按钮失败 sleep 60s Wait Until Page Contains Element xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 120s 备份未完成 Log 备份完成 Sleep 2s 生成备份文件_win [Arguments] ${ip} ${user} ${pwd} ${ip_win} ${user_win} ${pwd_win} # 黑方IP | 黑方用户名 | 黑方密码|win代理ip|win用户名|win密码 删除文件_win ${ip_win} ${user_win} ${pwd_win} Log 登录文件代理 Open Connection ${ip} 22 SSHLibrary.Login ${user} ${pwd} sleep 5s Log 生成1个目录,每个目录下存在1000个小文件 Run Keyword And Ignore Error Execute Command rm -rf /dir sleep 10s Execute Command /vdb/0.Vdbench/vdbench -f /vdb/0.Vdbench/examples/filesys/create_files sleep 180s Write scp -r /dir ${user_win}@${ip_win}:C:/ Sleep 3s Comment Write yes Sleep 3s Write ${pwd_win} Sleep 100s Close Connection 生成文件md5_win ${ip_win} ${user_win} ${pwd_win} sleep 5s 修改备份数据源_win [Arguments] ${ip} ${user} ${pwd} ${ip_win} ${user_win} ${pwd_win} # 黑方IP | 黑方用户名 | 黑方密码|win代理ip|win用户名|win密码 [Documentation] 功能:修改备份文件 ... ... 使用方法:在A.txt中插入当前时间点 ... ... 变量:无 Open Connection ${ip} 22 SSHLibrary.Login ${user} ${pwd} Log 登录文件代理 sleep 5s Log 生成第二个目录,目录下存在1000个小文件 Execute Command /vdb/0.Vdbench/vdbench -f /vdb/0.Vdbench/examples/filesys/create_files2 sleep 180s Write scp -r /dir ${user_win}@${ip_win}:C:/ Sleep 3s Write yes Sleep 3s Write ${pwd_win} Sleep 100s Close Connection 生成文件md5_win ${ip_win} ${user_win} ${pwd_win} sleep 5s 校验文件内容_win [Arguments] ${ip_win} ${user_win} ${pwd_win} #Windows_ip地址|用户名|密码 Open Connection ${ip_win} SSHLibrary.Login ${user_win} ${pwd_win} Log 连接成功 Start Command chcp 65001 Start Command type A.txt ${compare}= Read Command Output Set Suite Variable ${compare} Log ${origin_content} ${compare_result} Run Keyword And Return Status Should Match ${compare} ${origin_content} Run Keyword If ${compare_result}==True Log 文件恢复成功,文本内容一致 ... ELSE Fail 文件恢复失败,文本内容不一致 Close Connection 删除文件_win [Arguments] ${ip_win} ${user_win} ${pwd_win} #Windows_ip地址|用户名|密码 Log 删除dir目录 Open Connection ${ip_win} SSHLibrary.Login ${user_win} ${pwd_win} Log 连接成功 Run Keyword And Ignore Error Execute Command rmdir \/s \/q C:\\dir sleep 30s Close Connection 修改备份数据源2_win [Arguments] ${ip} ${user} ${pwd} ${ip_win} ${user_win} ${pwd_win} # 黑方IP | 黑方用户名 | 黑方密码|win代理ip|win用户名|win密码 Open Connection ${ip} 22 SSHLibrary.Login ${user} ${pwd} Log 登录文件代理 sleep 5s Log 生成第二个目录,目录下存在1000个小文件 Execute Command /vdb/0.Vdbench/vdbench -f /vdb/0.Vdbench/examples/filesys/create_files 3 sleep 180s Write scp -r /dir ${user_win}@${ip_win}:C:/ Sleep 3s Sleep 3s Write ${pwd_win} Sleep 100s Close Connection 生成文件md5_win ${ip_win} ${user_win} ${pwd_win} sleep 5s 校验文件md5_win [Arguments] ${ip_win} ${user_win} ${pwd_win} #Windows_ip地址|用户名|密码 sleep 60s Open Connection ${ip_win} SSHLibrary.Login ${user_win} ${pwd_win} Sleep 20s Start Command chcp 65001 sleep 5s Start Command C:/Agent/ubackup/uagent/bin/Python27/python D:/MD5.py ${compare} Read Command Output Log 校验文件md5为:${compare} Close Connection ${compare_result} Run Keyword And Return Status Should Match ${compare} ${origin_content} Run Keyword If ${compare_result}==True Log MD5值校验一致,恢复成功 ... ELSE Fail MD5值校验不一致,恢复失败 生成文件md5_win [Arguments] ${ip_win} ${user_win} ${pwd_win} #Windows_ip地址|用户名|密码 Open Connection ${ip_win} SSHLibrary.Login ${user_win} ${pwd_win} Log 获取生产机文件md5 Start Command C:/Agent/ubackup/uagent/bin/Python27/python D:/MD5.py ${origin_content}= Read Command Output Set Suite Variable ${origin_content} Log 原文本MD5值为${origin_content} Close Connection 文件备份集删除切换_备份链 [Arguments] ${agent_name} [Documentation] 只会删除和加载第二行的备份集 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] 点击删除备份集 定位删除按钮失败 Sleep 2s 元素点击 ${Del_Local_Confirm} 点击确定删除备份集 定位确定按钮失败 元素点击 ${Success_Confirm} 确定完成备份集删除 定位备份集删除确定弹框失败 Wait Until Element Is Not Visible xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup1"]/span[text()="删除"] 10s 备份集删除失败 Log 备份集删除成功 元素点击 ${Remote_Sync} 点击进入备份数据复制栏 定位备份数据复制栏失败 元素点击 ${Local_Copy} 点击本地复制功能栏 定位本地复制功能栏失败 元素点击 ${Copy_List} 点击切换到副本列表 定位到副本列表栏失败 元素输入 ${Search_LocalCopy_PolicyName} ${Copy_Name} 定位复制任务名输入框失败 元素点击 ${Button_Search_Copy} 点击搜索按钮搜索备份集 定位按钮搜索失败 元素点击 xpath=//div[text()="${Copy_Name}"]/../..//span[text()="切换"] 点击备份集副本进行切换 定位要切换的备份集失败 元素点击 ${Switch_Confirm} 点击二次确认开始备份集切换 定位二次确认开始备份集切换按钮失败 元素点击 ${Switch_Success_Confirm} 点击确认备份集切换成功 定位确认备份集切换成功按钮失败 ${Switch_PolicyName} Catenate SEPARATOR= 【副本切换】 ${Copy_Name} 元素点击 ${Log_LocalCopy} 点击切换到任务日志列表 定位任务日志列表失败 元素输入 ${Log_Input_PolicyName} ${Switch_PolicyName} 定位副本切换策略名输入框失败 元素点击 ${Log_Search_Button} 点击搜索按钮查询副本切换日志 定位搜索按钮查询副本切换日志失败 Wait Until Element Is Visible ${Switch_Success_Message} 10s 副本切换失败,未查询到${Switch_PolicyName}的日志 Log 副本切换成功 立即执行_本地复制 [Arguments] ${bk_type} ${agent_name} # 立即执行备份类型|代理名称 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${dpm_Protection strategy} 切换到定时保护策略栏 定位定时保护策略功能栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//span[text()="立即执行"] 点击策略立即执行 定位立即执行失败 元素点击 ${Exe_File_Bk} 点击展开立即执行下拉框 定位立即执行备份类型失败 Run Keyword If "${bk_type}"=="完全" 立即执行_完全 ... ELSE IF "${bk_type}"=="差量" 立即执行_差量 ... ELSE IF "${bk_type}"=="累积增量_扫描" 立即执行_累计扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 立即执行_累计驱动 ... ELSE IF "${bk_type}"=="合成备份_完全" 立即执行_合成完全 ... ELSE IF "${bk_type}"=="合成备份_增量" 立即执行_合成增量 Sleep 2s 循环点击 ${ExecutePolicy_execute} ${Complie_confirm} Sleep 5s 元素点击 ${Complie_confirm} 点击确定按钮 定位确定按钮失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 20s Wait Until Page Contains Element Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody/tr[2]/td[3][text()="${random_strategyName}"]/..//td[text()="已完成"] 300s 备份未完成 Log 备份完成 Sleep 5s 文件恢复_本地复制 [Arguments] ${agent_name} ${Num} # 代理名称|备份集的行数 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] Sleep 2s 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 元素点击 Xpath=//*[@id="backupSetTable"]/div[2]/table/tbody//td[3][text()="${random_strategyName}"]/..//div[@id="compileButtonBackup${Num}"]/span[text()="恢复"] 选择备份集进行恢复 定位恢复按钮失败 Sleep 5s 元素点击 ${Recover_File} 选择需要恢复的文件 定位需要恢复的文件失败 Sleep 5s 元素点击 ${Recover_To_Oldpath} 选择恢复路径 定位恢复到原路径失败 元素点击 ${Recover_fileNextstep} 点击下一步进入到恢复高级选项 恢复目标下一步定位失败 Sleep 6s 元素点击 ${File_Rec_More_NextStep} 点击下一步进入到恢复高级选项 定位文件选项下一步失败 循环点击 ${Recover_fileExec} ${window_button_recover_confirm} 元素点击 ${window_button_recover_confirm} 点击确定按钮完成恢复操作 定位恢复弹窗确定按钮失败 元素点击 ${Success_Confirm} 恢复策略确定创建成功 恢复作业创建成功弹窗定位失败 Sleep 6s 元素点击 ${Policy_Work} 点击进入作业栏 定位作业栏失败 Sleep 60s 元素输入 ${Input_All_Policy} 恢复策略 定位所有策略输入框失败 元素点击 ${Search_By_Policy} 点击查找筛选恢复策略 定位查找按钮失败 Wait Until Page Contains Element ${Recover_Success} 300s 恢复失败 sleep 2s Log 恢复成功 文件备份集删除切换 [Arguments] ${agent_name} ${mds_name} # 代理名称|介质名称 [Documentation] 只会删除和加载第二行的备份集 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 Mouse Out Xpath=//span[text()="${agent_name}"] 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 2s 元素点击 xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup0"]/span[text()="删除"] 点击删除备份集 定位删除按钮失败 Sleep 2s 元素点击 ${Del_Local_Confirm} 点击确定删除备份集 定位确定按钮失败 元素点击 ${Success_Confirm} 确定完成备份集删除 定位备份集删除确定弹框失败 Wait Until Element Is Not Visible xpath=//td[text()="${random_strategyName}"]/..//div[@id="compileButtonBackup0"]/span[text()="删除"] 10s 备份集删除失败 Log 备份集删除成功 元素点击 ${Remote_Sync} 点击进入备份数据复制栏 定位备份数据复制栏失败 元素点击 ${Local_Copy} 点击本地复制功能栏 定位本地复制功能栏失败 元素点击 ${Copy_List} 点击切换到副本列表 定位到副本列表栏失败 元素输入 ${Search_LocalCopy_PolicyName} ${Copy_Name} 定位复制任务名输入框失败 元素点击 ${CopyList_Server} 点击展开介质服务器选项 定位副本列表下搜索介质服务器选项失败 元素点击 xpath=//option[text()="${Plantform_BC_Agent}"] 点击选择指定黑方介质服务器 定位${Plantform_BC_Agent}介质服务器失败 元素点击 ${CopyList_Storage} 点击展开介质配置选项 定位副本列表下搜索介质配置选项失败 元素点击 xpath=//option[text()="${mds_name}"] 点击选择要切换备份集所在的介质 定位要切换备份集所在的介质失败 元素点击 ${Button_Search_Copy} 点击搜索按钮搜索备份集 定位按钮搜索失败 元素点击 xpath=//div[text()="${Copy_Name}"]/../..//span[text()="切换"] 点击备份集副本进行切换 定位要切换的备份集失败 元素点击 ${Switch_Confirm} 点击二次确认开始备份集切换 定位二次确认开始备份集切换按钮失败 元素点击 ${Switch_Success_Confirm} 点击确认备份集切换成功 定位确认备份集切换成功按钮失败 ${Switch_PolicyName} Catenate SEPARATOR= 【副本切换】 ${Copy_Name} 元素点击 ${Log_LocalCopy} 点击切换到任务日志列表 定位任务日志列表失败 元素输入 ${Log_Input_PolicyName} ${Switch_PolicyName} 定位副本切换策略名输入框失败 元素点击 ${Log_Search_Button} 点击搜索按钮查询副本切换日志 定位搜索按钮查询副本切换日志失败 Wait Until Element Is Visible ${Switch_Success_Message} 10s 副本切换失败,未查询到${Switch_PolicyName}的日志 Log 副本切换成功 文件备份_备份模板 [Arguments] ${agent_name} ${bk_target} ${bk_type} # 代理名|备份源名称|备份类型 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建了策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 循环点击 ${Add_Policy} ${File_Module} 元素点击 ${Add_Policy_ByTemplate} 点击切换到模板创建备份策略 定位模板创建备份策略按钮失败 元素点击 ${Select_DPM_Template} 点击展开模板列表 定位策略模板列表展开失败 元素点击 ${Selected_Template} 点击选择已经创建的模板 定位已创建的模板选项失败 Sleep 5s 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 Comment 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 Comment 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 Comment 元素点击 xpath=//select[@id="dialogues_addCycleStorage_fileOrOracle_selectMedia_select"]/option[contains(text(),"${mds_name}")] 点击选择指定介质 定位指定介质失败 Comment Run Keyword If ${dedup_attr}==1 File_KeyWord.重删 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Comment Run Keyword If ${encryption_attr}==1 File_KeyWord.加密 Comment Run Keyword If ${compress_attr}==1 File_KeyWord.压缩 Comment ... ... ELSE File_KeyWord.取消压缩 Comment Run Keyword If ${check_attr}==1 File_KeyWord.校验 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 元素点击 ${BackupSet} 点击进入备份集一栏 定位备份集栏失败 Sleep 5s ${View2}= Catenate SEPARATOR= //*[@id="compileBackupViewId ${random_strategyName} "] Wait Until Page Contains Element ${View2} 300s 备份未完成 Log 备份完成 Sleep 2s 备份集属性校验_备份模板 [Arguments] ${encryption} ${compress} ${deduped} ${mds} ${mds_name} ${keep_time} ${time_num} # 压缩|加密|重删|介质|介质名称|保留时间|具体时间 元素点击 ${BackupSet} 进入备份集页面 进入备份集页面失败 sleep 10s ${BK_Detailid}= Catenate SEPARATOR= compileBackupViewId ${random_strategyName} click element xpath=//span[@id="${BK_Detailid}"] Sleep 10s Run Keyword If ${encryption}==1 加密属性校验 ... ELSE Log 加密属性不校验 Run Keyword If ${compress}==1 压缩属性校验 ... ELSE Log 压缩属性不校验 Run Keyword If ${deduped}==1 重删属性校验 ... ELSE Log 重删属性不校验 Run Keyword If ${mds}==1 存储路径校验 ${mds_name} ... ELSE Log 存储路径不校验 元素点击 ${Attr_Cancel} 点击取消关闭备份集详情弹窗 定位取消按钮失败 Log 备份集属性确认完毕 Sleep 2s 存储路径校验 [Arguments] ${mds_name} # 介质名称 Wait Until Element Is Visible xpath=//td[text()="介质名称:"]/..//td[text()="${mds_name}"] 10s 存储介质定位失败 Log 存储介质定位成功