*** Settings *** Resource ElementPath.robot Resource ../RE0_Common/KeyWord.robot *** Keywords *** VM备份_保留一天 [Arguments] ${esxi_name} ${bk_type} ${bk_name} ${pipelineEncryption} ${pipelineCompress} ${pipelineDedup} # esxi名称|备份类型|介质名称|管道加密|管道压缩|管道重删 [Documentation] 进行VM备份,根据传入的esxi名称,备份类型,虚拟机名称,以及是否选择管道加密压缩重删创建备份策略并校验备份成功 ... ... 备份集保留1天 ... ... 增加备份集页面搜索操作,防止修改时间对备份产生影响 元素点击 ${CDM_dataProtect} 副本数据保护定位成功 副本数据保护定位失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} Set Suite Variable ${random_strategyName} Log 切换为全局变量 Sleep 5s 元素点击 Xpath=//span[text()="${esxi_name}"] 主机定位成功 主机定位失败 策略清理 元素点击 ${Add_VM_Policy} 添加策略定位成功 添加策略定位失败 元素输入 ${Input_Vmname} ${bk_name} 输入虚拟机名称完毕 元素点击 ${Search_Vmname} 定位搜索虚拟机按钮成功 定位搜索虚拟机按钮失败 元素点击 xpath=//span[text()="${bk_name}"]/../../td[2]/div 定位虚拟机成功 定位虚拟机失败 元素点击 ${Add_Vmname} 定位添加虚拟机按钮成功 定位添加虚拟机按钮失败 元素点击 ${Add_Vm_Policy_Nextstep} 定位添加策略下一步成功 定位添加策略下一步失败 元素点击 ${AddTaskCycle} 添加任务周期定位成功 添加任务周期定位失败 Run Keyword If "${bk_type}"=="完全" KeyWord_VM.完全备份 ... ELSE IF "${bk_type}"=="增量" KeyWord_VM.增量备份 元素点击 ${Cycle_Onetime} 一次循环模式定位成功 一次循环模式定位失败 元素点击 ${Cycle_Confirm} 任务周期确定定位成功 任务周期确定定位失败 元素点击 ${Cycle_Nextstep} 任务周期下一步定位成功 任务周期下一步定位失败 Run Keyword If ${pipelineEncryption}==1 KeyWord_VM.管道加密 Run Keyword If ${pipelineCompress}==1 KeyWord_VM.管道压缩 Run Keyword If ${pipelineDedup}==1 KeyWord_VM.管道重删 Sleep 2s 元素点击 ${VMSave_time} 点击展开备份集保留时间下拉框 定位备份集保留时间下拉框失败 元素点击 ${VMSave_by_day} 点击选择保留周期为按日保留 定位保留周期为按日保留失败 元素点击 ${Advance_Nextstep} 定位高级选项下一步成功 定位高级选项下一步失败 元素输入 ${Vm_PolicyName} ${random_strategyName} 定位虚拟机策略名称失败 元素点击 ${Complete_policy} 定位虚拟机策略完成按钮成功 定位虚拟机策略完成按钮失败 元素点击 ${Success_Confirm} 备份策略创建完成定位成功 备份策略创建完成定位失败 元素点击 ${tab_backupset} 定位备份集选项成功 定位备份集选项失败 Sleep 60s 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s FOR ${n} IN RANGE 10 Click Element ${Button_Searchbutton} Sleep 10s ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${random_strategyName}"]/../../td[10]/div[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 60s END Run Keyword If ${bk_status}==False Fail ... ELSE Log 备份成功 Sleep 5s VM备份_保留一个 [Arguments] ${esxi_name} ${bk_type} ${bk_name} ${bk_nameBK} ${pipelineEncryption} ${pipelineCompress} ${pipelineDedup} # esxi名称|备份类型|介质名称|管道加密|管道压缩|管道重删 元素点击 ${CDM_dataProtect} 副本数据保护定位成功 副本数据保护定位失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} Set Suite Variable ${random_strategyName} Log 切换为全局变量 Sleep 5s 元素点击 Xpath=//span[text()="${esxi_name}"] 主机定位成功 主机定位失败 策略清理 元素点击 ${Add_VM_Policy} 添加策略定位成功 添加策略定位失败 元素输入 ${Input_Vmname} ${bk_name} 定位虚拟机输入框失败 元素点击 ${Search_Vmname} 定位搜索虚拟机按钮成功 定位搜索虚拟机按钮失败 元素点击 xpath=//span[text()="${bk_name}"]/../../td[2]/div 定位虚拟机成功 定位虚拟机失败 元素点击 xpath=//span[text()="${bk_nameBK}"]/../../td[2]/div 定位虚拟机成功 定位虚拟机失败 Sleep 5s 元素点击 ${Add_Vmname} 定位添加虚拟机按钮成功 定位添加虚拟机按钮失败 元素点击 ${Add_Vm_Policy_Nextstep} 定位添加策略下一步成功 定位添加策略下一步失败 元素点击 ${AddTaskCycle} 添加任务周期定位成功 添加任务周期定位失败 Run Keyword If "${bk_type}"=="完全" KeyWord_VM.完全备份 ... ELSE IF "${bk_type}"=="增量" KeyWord_VM.增量备份 元素点击 ${Cycle_Onetime} 一次循环模式定位成功 一次循环模式定位失败 元素点击 ${Cycle_Confirm} 任务周期确定定位失败 任务周期确定定位失败 元素点击 ${Cycle_Nextstep} 任务周期下一步定位成功 任务周期下一步定位失败 Run Keyword If ${pipelineEncryption}==1 KeyWord_VM.管道加密 Run Keyword If ${pipelineCompress}==1 KeyWord_VM.管道压缩 Run Keyword If ${pipelineDedup}==1 KeyWord_VM.管道重删 Sleep 2s 元素点击 ${VMSave_time} 点击展开备份集保留时间下拉框 定位备份集保留时间下拉框失败 元素点击 ${VMSave_by_geshu} 点击选择保留周期为按个数保留 定位保留周期为按个数保留失败 元素点击 ${Advance_Nextstep} 定位高级选项下一步成功 定位高级选项下一步失败 元素输入 ${Vm_PolicyName} ${random_strategyName} 定位虚拟机策略名称失败 元素点击 ${Complete_policy} 定位虚拟机策略完成按钮成功 定位虚拟机策略完成按钮失败 元素点击 ${Success_Confirm} 备份完成定位成功 备份完成定位失败 元素点击 ${tab_backupset} 定位备份集选项成功 定位备份集选项失败 Sleep 60s 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 Sleep 2s 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s FOR ${n} IN RANGE 10 Click Element ${Button_Searchbutton} Sleep 10s ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${bk_name}"]/../../td[10]/div[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 60s END Run Keyword If ${bk_status}==False Fail ... ELSE Log ${bk_name}备份成功 Sleep 5s FOR ${n} IN RANGE 10 Click Element ${Button_Searchbutton} Sleep 10s ${bk_statusBK} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${bk_nameBK}"]/../../td[10]/div[text()="已完成"] Run Keyword If "${bk_statusBK}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 60s END Run Keyword If ${bk_statusBK}==False Fail ... ELSE Log ${bk_nameBK}备份成功 VM恢复 Sleep 10s 循环点击 xpath=//div[text()="${random_strategyName}"]/../../../tr[@data-index="0"]//a[text()="恢复"] ${Recover_Vmname} Clear Element Text ${Recover_Vmname} ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${recover_name}= Catenate SEPARATOR=_ AutoRecover ${date} 元素输入 ${Recover_Vmname} ${recover_name} 恢复后的虚拟机名称输入失败 Log 输入恢复后的虚拟机名称 Sleep 5s 元素点击 ${Choose_Storage} 点击存储下拉框 定位恢复存储未完成 元素点击 ${Datastore} 选择存储介质完毕 定位存储介质失败 元素点击 ${Complete_Recover_Policy} 点击策略恢复确定按钮 定位完成vm恢复策略按钮失败 元素点击 ${confirm_restore} 确认执行恢复 定位确认恢复按钮失败 元素点击 ${Success_Confirm} 点击“确定”按钮 定位“确定”失败 元素点击 ${Tab_Work} 切换到作业一栏 定位作业一栏失败 Sleep 30s 元素点击 ${PolicySearch} 点击查询按钮成功 定位查询按钮失败 FOR ${n} IN RANGE 10 Click Element ${PolicySearch} ${work_status} Run Keyword And Return Status Wait Until Element Is Visible xpath=//div[contains(text(),"${recover_name}")]/../../td[6]/div[text()="成功"] Run Keyword If ${work_status}==False Log 恢复未完成 ... ELSE Exit For Loop Sleep 60s END Run Keyword If ${work_status}==False Fail ... ELSE Log 恢复成功 元素点击 ${Tab_Policy} 切换到策略一栏 定位策略失败 FOR ${n} IN RANGE 3 ${policy_status} Run Keyword And Return Status Wait Until Element Is Visible ${VMPolicyDelete} Run Keyword If ${policy_status}==True 策略删除 ... ELSE Exit For Loop END Log 环境清理完毕 VM恢复_文件 [Arguments] ${esxi_name} # esxi名称 循环点击 Xpath=//div[text()="${random_strategyName}"]/../..//a[text()="更多"] ${Vm_Recover_File} 元素点击 ${Vm_Recover_File} 点击恢复文件 定位“恢复文件”失败 元素点击 ${Vm_Recover_File_NextStep} 点击恢复文件下一步 定位“下一步”按钮失败 元素点击 ${Vm_Recover_File_Complete} 点击完成按钮完成虚拟机文件恢复策略 定位“完成”按钮失败 元素点击 ${Success_Confirm} 确定虚拟机文件恢复策略创建成功 定位“确定”按钮失败 Comment 元素输入 ${Host_Search} ${CDM_IP} 定位代理名称输入框失败 元素点击 ${BC_Agent} 选择黑方集成代理 定位黑方集成代理失败 Sleep 5s 元素点击 ${Common_Tab_Work} 切换到作业一栏 定位作业一览失败 FOR ${n} IN RANGE 5 ${work_status} Run Keyword And Return Status Wait Until Element Is Visible ${Quick_Mount_Complete} Run Keyword If ${work_status}==False Log 快速挂载未完成 ... ELSE Exit For Loop Sleep 60s END Run Keyword If ${work_status}==False Fail ... ELSE Log 挂载成功 元素点击 ${Stop_Mount} 点击停止挂载 定位停止挂载失败 元素点击 ${Stop_Work_Confirm} 确认停止挂载作业 定位确认停止弹窗失败 元素点击 ${Success_Confirm} 作业停止成功 作业停止失败 sleep 10s 元素点击 Xpath=//span[text()="${esxi_name}"] 切换回esxi 定位esxi失败 元素点击 ${Tab_Policy} 点击切换到策略栏 定位策略失败 FOR ${n} IN RANGE 3 ${policy_status} Run Keyword And Return Status Wait Until Element Is Visible ${Policy_Delete} Run Keyword If ${policy_status}==True 策略删除 ... ELSE Exit For Loop END Log 环境清理完毕 完全备份 Sleep 2s 元素点击 ${Full_Backup} 勾选完全备份 勾选完全备份失败 增量备份 Sleep 2s 元素点击 ${Incremental_Backup} 勾选增量备份 勾选增量备份失败 管道加密 元素点击 ${Pipeline_Encryption} 勾选管道加密 勾选管道加密失败 Sleep 2s 管道压缩 元素点击 ${Pipeline_Compress} 勾选管道压缩 勾选管道压缩失败 Sleep 2s 管道重删 元素点击 ${Pipeline_Dedup} 勾选管道重删 勾选管道重删失败 策略删除 元素点击 ${Tab_Policy} 切换到策略一栏 定位策略失败 Sleep 2s 循环点击 ${VMPolicyDelete} ${Confirm_Delete2} Sleep 2s 元素点击 ${Confirm_Delete2} 确认删除 确认删除定位失败 Sleep 2s 元素点击 ${Success_Confirm} 完成策略删除 定位删除成功按钮失败 Sleep 2s 立即执行 [Arguments] ${bk_type} ${bk_name} # 备份类型 #备份源名称 元素点击 ${Tab_Policy} 切换到策略一栏 定位策略失败 Sleep 2s 循环点击 xpath=//div[@id="policytable_VM"]/..//div[text()="${random_strategyName}"]/../..//a[text()="立即执行"] ${Select_Bk_Type} Log 点击立即执行 元素点击 ${Select_Bk_Type} 点击下拉备份选项 定位备份类型选项失败 Run Keyword If "${bk_type}"=="完全" Click Element ${Option_Fullbk} ... ELSE IF "${bk_type}"=="增量" Click Element ${Option_VMIncrebk} Log 选择备份类型完毕 Sleep 3s 元素点击 ${VM_CDM_RESExpand} 点击展开虚拟机列表 定位展开虚拟机失败 元素点击 xpath=//span[text()="${bk_name}"]/../../td[2]/div 点击备份虚拟机 定位备份目标失败 元素点击 ${Confirm_Exec} 点击立即执行—确定按钮 定位确认按钮失败 Sleep 5s 元素点击 ${Success_Confirm} 点击确定 确认执行失败 Sleep 3s 元素点击 ${tab_backupset} 切换到备份集栏 定位备份集选项失败 Sleep 60s 元素输入 ${Input_Policy_Name} ${random_strategyName} 定位策略名称输入框失败 Log 输入策略名进行搜索 Sleep 2s FOR ${n} IN RANGE 10 Click Element ${Button_Searchbk} ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${random_strategyName}"]/../../../tr[1]/td[5]/div[text()="VMware增量备份"]/../../td/div[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 60s END Log 备份完成 Sleep 2s 备份集清理 [Documentation] ${random_strategyName} 元素点击 xpath=//div[text()="${random_strategyName}"]/../..//div[text()="VMware完全备份"]/../..//a[text()="更多"] 点击更多展开备份集操作 定位备份集更多失败 元素点击 ${Bk_More_Delete} 点击删除备份集 定位备份集删除失败 Comment 元素点击 ${Total_Del_BK} 点击删除完全备份集 定位完全备份删除失败 循环点击 ${Confim_Delete_Bk} ${Success_Confirm} 元素点击 ${Success_Confirm} 删除成功 定位删除成功失败 添加VMware平台 [Arguments] ${nick_name} ${esxi_name} ${esxi_password} ${esxi_ip} ${mds_type} 元素点击 ${CDM_dataProtect} 进入副本数据保护栏 定位副本数据保护失败 元素点击 ${Virtual_Manage} 点击主机管理按钮 定位主机管理按钮失败 元素点击 ${Add_New_VM} 点击添加VM3.0 定位添加VM平台失败 元素输入 ${Add_ESXI_Name} ${nick_name} 定位备注主机名输入框失败 元素输入 ${Add_ESXI_User} ${esxi_name} 定位用户名输入框失败 元素输入 ${Add_ESXI_PWD} ${esxi_password} 定位密码输入框失败 元素输入 ${Add_ESXI_IP} ${esxi_ip} 定位IP输入框失败 元素点击 ${ESXI_Info_Nextstep} 填写信息完毕,点击下一步 定位下一步失败 Sleep 10s 元素点击 ${Exec_Point} 勾选执行节点 定位执行节点勾选框失败 元素点击 ${Exec_Point_Nextstep} 选择完毕执行节点,点击下一步 定位下一步失败 元素点击 ${Add_BC} 点击添加黑方 定位添加按钮失败 元素点击 ${Select_BC_MDS} 点击存储介质选择 定位存储介质选择框失败 元素点击 xpath=//option[contains(text(),"${mds_type}")] 选择存储介质 定位存储介质失败 元素点击 ${Confirm_Add_BC} 确认完毕备份黑方,点击确定 定位确定按钮失败 元素点击 ${Add_BC_Nextstep} 添加黑方完毕,点击下一步 定位下一步失败 Sleep 15s 元素点击 ${Add_ESXI_Finish} 点击完成 定位完成按钮失败 元素点击 ${Success_Confirm} 点击添加成功确定按钮 定位确定按钮失败 Wait Until Element Is Visible xpath=//span[text()="${nick_name}"] 30s 添加VM平台失败 重启MDS服务 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 Execute Command /unary/unabackup/bin/stop_mds.sh;/unary/unabackup/bin/start_mds.sh>/mds_status.txt Log 重启MDS服务 Sleep 40s ${mds_status} Execute Command grep "start mds success" /mds_status.txt ${mds_status_length} Get Length ${mds_status} Run Keyword If ${mds_status_length}>0 Log MDS服务开启 ... ELSE Fail MDS服务未启动 Close Connection Sleep 100s VM快速挂载 Comment 元素点击 xpath=//div[text()="${random_strategyName}"]/../..//a[@lay-event="quickMount_VM"] 点击快速挂载按钮 定位快速挂载按钮失败 元素点击 xpath=//a[@class="transparent" and text()="快速挂载"] 点击快速挂载按钮 定位快速挂载按钮失败 Clear Element Text ${Recover_Vmname} ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${mount_name}= Catenate SEPARATOR=_ AutoRecover ${date} 元素输入 ${Recover_Vmname} ${mount_name} 挂载后虚拟机名称输入失败 Log 输入挂载后的虚拟机名称 元素点击 ${Choose_Storage} 点击展开存储选项 定位存储下拉框失败 元素点击 ${Datastore} 点击选择存储 定位存储失败 元素点击 ${Confirm_Quick_Mount} 点击完成快速挂载策略创建 定位确定按钮失败 元素点击 ${Success_Confirm} 点击确认添加成功 定位添加成功弹窗失败 元素点击 ${Tab_Work} 切换到作业一栏 定位作业一览失败 FOR ${n} IN RANGE 5 Click Element ${Button_Searchwork} 元素点击 ${VMCDM_Refresh} 点击刷新作业列表 定位刷新按钮失败 ${work_status} Run Keyword And Return Status Wait Until Element Is Visible xpath=//div[contains(text(),"${mount_name}")]/../..//div[contains(text(),"成功")] Run Keyword If ${work_status}==False Log 快速挂载未完成 ... ELSE Exit For Loop Sleep 60s END Run Keyword If ${work_status}==False Fail ... ELSE Log 挂载成功 元素点击 ${VMCDM_application} 切换到副本应用页面 定位副本应用失败 Sleep 5s 元素点击 ${VMCDM_Unload} 点击卸载 定位卸载按钮失败 Sleep 5s 元素点击 ${VMCDM_UnloadConfirm} 点击确定卸载 定位确定卸载失败 Sleep 10s 元素点击 ${Success_Confirm} 确定卸载成功 定位卸载成功确定按钮失败 Sleep 5s 元素点击 ${Tab_Policy} 切换到策略功能栏 定位策略失败 FOR ${n} IN RANGE 3 ${policy_status} Run Keyword And Return Status Wait Until Element Is Visible ${Policy_Delete} Run Keyword If ${policy_status}==True 策略删除 ... ELSE Exit For Loop END Log 环境清理完毕 策略清理 元素点击 ${Tab_Policy} 切换到策略一栏 定位策略失败 Sleep 2s FOR ${n} IN RANGE 3 ${policy_status} Run Keyword And Return Status Wait Until Element Is Visible ${Policy_Delete_VM} Run Keyword If ${policy_status}==True 策略删除 ... ELSE Exit For Loop END Log 环境清理完毕 虚拟化主机定位 [Arguments] ${esxi_name} # 虚拟化主机名称 元素点击 ${CDM_dataProtect} 选择副本数据保护 副本数据保护定位失败 Sleep 5s 元素点击 Xpath=//span[text()="${esxi_name}"] 选择ESXI 主机定位失败 VM备份集清理校验 [Arguments] ${esxi_name} ${result} # 虚拟化主机名称|清理结果(yes表示清理,no表示未清理) 元素点击 ${CDM_dataProtect} 点击进入副本数据保护页面 定位副本数据保护失败 Sleep 2s 元素点击 xpath=//span[text()="${esxi_name}"] 点击选择虚拟化主机 定位虚拟化主机所在位置失败 Mouse Out xpath=//span[text()="${esxi_name}"] Sleep 180s 元素点击 ${tab_backupset} 进入备份集一栏 定位备份集栏失败 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s ${result_now} Run Keyword And Return Status Wait Until Element Is Visible //div[text()="${random_strategyName}"]/../../td[5]/div[text()="VMware完全备份"] 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 立即执行_备份集按个数保留 [Arguments] ${bk_type} ${bk_name} ${bk_nameBK} # 备份类型|备份虚拟机名称|备份虚拟机名称2 元素点击 ${Tab_Policy} 定位策略成功 定位策略失败 循环点击 xpath=//div[@id="policytable_VM"]/..//div[text()="${random_strategyName}"]/../..//a[text()="立即执行"] ${Select_Bk_Type} Log 点击立即执行 Sleep 2s 元素点击 ${Select_Bk_Type} 定位备份类型选项成功 定位备份类型选项失败 Sleep 2s Run Keyword If "${bk_type}"=="完全" Click Element ${Option_Fullbk} ... ELSE IF "${bk_type}"=="增量" Click Element ${Option_VMIncrebk} Log 选择备份类型完毕 Sleep 2s 元素点击 ${Expand_VM_Tree} 点击展开虚拟机树 定位展开虚拟机树+号失败 元素点击 xpath=//h4[text()="立即执行策略"]/../..//span[contains(text(),"${bk_nameBK}")]/../..//td[2] 点击勾选要立即执行的虚拟机BK 定位要立即执行的虚拟机失败 元素点击 xpath=//h4[text()="立即执行策略"]/../..//span[contains(text(),"${bk_name}")]/../..//td[2] 点击勾选要立即执行的虚拟机 定位要立即执行的虚拟机失败 元素点击 ${Confirm_Exec} 定位确认按钮成功 定位确认按钮失败 元素点击 ${Success_Confirm} 确认执行成功 确认执行失败 Sleep 2s 元素点击 ${tab_backupset} 定位备份集选项成功 定位备份集选项失败 Sleep 60s 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 Sleep 2s 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 FOR ${n} IN RANGE 10 Click Element ${Button_Searchbutton} ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${bk_name}"]/../../../tr[1]/td[5]/div[text()="VMware增量备份"]/../../td/div[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 60s END Log 备份完成 Sleep 2s FOR ${n} IN RANGE 10 Click Element ${Button_Searchbutton} ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${bk_nameBK}"]/../../../tr[1]/td[5]/div[text()="VMware增量备份"]/../../td/div[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 60s END Log 备份完成 Sleep 2s 立即执行_备份集按天保留 [Arguments] ${bk_type} ${bk_name} # 备份类型|备份虚拟机名称 [Documentation] 立即执行VM备份策略,并更加策略名称在备份集页面搜索,判断备份成功,增加搜索防止修改时间对备份任务造成影响 元素点击 ${Tab_Policy} 定位策略成功 定位策略失败 循环点击 xpath=//div[@id="policytable_VM"]/..//div[text()="${random_strategyName}"]/../..//a[text()="立即执行"] ${Select_Bk_Type} Log 点击立即执行 Sleep 2s 元素点击 ${Select_Bk_Type} 定位备份类型选项成功 定位备份类型选项失败 Run Keyword If "${bk_type}"=="完全" Click Element ${Option_Fullbk} ... ELSE IF "${bk_type}"=="增量" Click Element ${Option_VMIncrebk} Log 选择备份类型完毕 Sleep 2s 元素点击 ${Expand_VM_Tree} 点击展开虚拟机树 定位展开虚拟机树+号失败 元素点击 xpath=//h4[text()="立即执行策略"]/../..//span[contains(text(),"${bk_name}")]/../..//td[2] 点击勾选要立即执行的虚拟机 定位要立即执行的虚拟机失败 元素点击 ${Confirm_Exec} 定位确认按钮成功 定位确认按钮失败 元素点击 ${Success_Confirm} 确认执行成功 确认执行定位失败 元素点击 ${tab_backupset} 定位备份集选项成功 定位备份集选项失败 Sleep 60s 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 FOR ${n} IN RANGE 10 Click Element ${Button_Searchbutton} ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${bk_name}"]/../../../tr[1]/td[5]/div[text()="VMware增量备份"]/../../td/div[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 60s END Log 备份完成 Sleep 2s 元素点击 ${Tab_Policy} 定位策略栏成功 定位策略栏失败 定位VM备份集页面 元素点击 ${tab_backupset} 点击VM备份集页面成功 定位VMware备份集页面失败 恢复VM [Documentation] 在备份集页面根据策略名称搜索并恢复备份集 ... ... 在作业页面搜索恢复虚拟机名称,判断恢复成功(增加搜索操作防止修改时间对恢复作业产生影响) 元素点击 ${tab_backupset} 点击VM备份集页面成功 定位VMware备份集页面失败 Sleep 5s 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 5s 循环点击 Xpath=//div[text()="${random_strategyName}"]/../../../tr[@data-index="0"]//a[text()="恢复"] ${Recover_Vmname} Clear Element Text ${Recover_Vmname} ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${recover_name}= Catenate SEPARATOR=_ AutoRecover ${date} Input Text ${Recover_Vmname} ${recover_name} Log 输入恢复后的虚拟机名称 Sleep 5s 元素点击 ${Choose_Storage} 定位恢复存储成功 定位恢复存储未完成 Sleep 5s 元素点击 ${Datastore} 定位存储介质成功 定位存储介质失败 Sleep 5s 元素点击 ${Complete_Recover_Policy} 定位完成vm恢复策略按钮成功 定位完成vm恢复策略按钮失败 循环点击 ${confirm_restore} ${Success_Confirm} 元素点击 ${Success_Confirm} 定位“确定”成功 定位“确定”失败 元素点击 ${Policy_show} 定位作业一栏成功 定位作业一栏失败 Sleep 30s 元素输入 ${RecoverPolicyname} ${recover_name} 定位策略名输入框失败 元素点击 ${PolicySearch} 点击查询按钮成功 定位查询按钮失败 FOR ${n} IN RANGE 10 Click Element ${PolicySearch} ${work_status} Run Keyword And Return Status Wait Until Element Is Visible xpath=//div[contains(text(),"${recover_name}")]/../../td[6]/div[text()="成功"] Run Keyword If ${work_status}==False Log 恢复未完成 ... ELSE Exit For Loop Sleep 60s END Run Keyword If ${work_status}==False Fail ... ELSE Log 恢复成功 元素点击 ${Tab_Policy} 定位策略栏成功 定位策略失败 Sleep 2s FOR ${n} IN RANGE 3 ${policy_status} Run Keyword And Return Status Wait Until Element Is Visible ${VMPolicyDelete} Run Keyword If ${policy_status}==True 策略删除 ... ELSE Exit For Loop END Log 环境清理完毕 VM恢复文件_清理校验后 [Arguments] ${esxi_name} ${BC_Agent} #虚拟化主机名称|挂载代理 [Documentation] VM备份集恢复文件操作 ... ... 新增备份集页面根据策略名称搜索操作,防止修改时间对恢复操作造成影响 ... ... 清理校验后是指在执行TC07_Bk_CheckClean后经过修改时间,使用此关键字不受修改时间的影响 元素点击 ${tab_backupset} 点击VM备份集页面成功 定位VMware备份集页面失败 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s 循环点击 Xpath=//div[text()="${random_strategyName}"]/../..//a[text()="更多"] ${Vm_Recover_File} 元素点击 ${Vm_Recover_File} 点击恢复文件 定位“恢复文件”失败 元素点击 ${Vm_Recover_File_NextStep} 点击恢复文件下一步 定位“下一步”按钮失败 元素点击 ${Vm_Recover_File_Complete} 点击完成按钮完成虚拟机文件恢复策略 定位“完成”按钮失败 元素点击 ${Success_Confirm} 确定虚拟机文件恢复策略创建成功 定位“确定”按钮失败 元素点击 xpath=//span[text()="${BC_Agent}"] 选择黑方集成代理 定位黑方集成代理失败 Sleep 5s 元素点击 ${Common_Tab_Work} 切换到作业一栏 定位作业一览失败 FOR ${n} IN RANGE 5 ${work_status} Run Keyword And Return Status Wait Until Element Is Visible ${Quick_Mount_Complete} Run Keyword If ${work_status}==False Log 快速挂载未完成 ... ELSE Exit For Loop Sleep 60s END Run Keyword If ${work_status}==False Fail ... ELSE Log 挂载成功 元素点击 ${Stop_Mount} 点击停止挂载 定位停止挂载失败 元素点击 ${Stop_Work_Confirm} 确认停止挂载作业 定位确认停止弹窗失败 元素点击 ${Success_Confirm} 作业停止成功 作业停止失败 元素点击 Xpath=//span[text()="${esxi_name}"] 切换回esxi 定位esxi失败 元素点击 ${Tab_Policy} 点击切换到策略栏 定位策略失败 FOR ${n} IN RANGE 3 ${policy_status} Run Keyword And Return Status Wait Until Element Is Visible ${Policy_Delete} Run Keyword If ${policy_status}==True 策略删除 ... ELSE Exit For Loop END Log 环境清理完毕 VM快速挂载_清理校验后 [Documentation] VM备份集快速挂载操作 ... ... 新增在备份集页面根据策略名称搜索操作,防止修改时间对快速挂载操作造成影响 ... ... 清理校验后是指在执行TC07_Bk_CheckClean后经过修改时间,使用此关键字不受修改时间的影响 元素点击 ${tab_backupset} 点击VM备份集页面成功 定位VMware备份集页面失败 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s 元素点击 xpath=//div[text()="${random_strategyName}"]/../..//a[@lay-event="quickMount_VM"] 点击快速挂载按钮 定位快速挂载按钮失败 Clear Element Text ${Recover_Vmname} ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${mount_name}= Catenate SEPARATOR=_ AutoRecover ${date} Input Text ${Recover_Vmname} ${mount_name} Log 输入挂载后的虚拟机名称 元素点击 ${Choose_Storage} 点击展开存储选项 定位存储下拉框失败 元素点击 ${Datastore} 点击选择存储 定位存储失败 元素点击 ${Confirm_Quick_Mount} 点击完成快速挂载策略创建 定位确定按钮失败 元素点击 ${Success_Confirm} 点击确认添加成功 定位添加成功弹窗失败 元素点击 ${Tab_Work} 切换到作业一栏 定位作业一览失败 FOR ${n} IN RANGE 5 Click Element ${Button_Searchwork} ${work_status} Run Keyword And Return Status Wait Until Element Is Visible xpath=//div[contains(text(),"${mount_name}")]/../..//div[text()="成功"] Run Keyword If ${work_status}==False Log 快速挂载未完成 ... ELSE Exit For Loop Sleep 60s END Run Keyword If ${work_status}==False Fail 快速挂载失败 ... ELSE Log 挂载成功 元素点击 ${Tab_Policy} 切换到策略功能栏 定位策略失败 FOR ${n} IN RANGE 3 ${policy_status} Run Keyword And Return Status Wait Until Element Is Visible ${Policy_Delete} Run Keyword If ${policy_status}==True 策略删除 ... ELSE Exit For Loop END Log 环境清理完毕 备份集清理_清理校验后 [Documentation] 清理备份链中的VM完全备份集 ... ... 清理校验后是指在执行TC07_Bk_CheckClean后经过修改时间,使用此关键字不受修改时间的影响 元素点击 ${tab_backupset} 点击VM备份集页面成功 定位VMware备份集页面失败 元素输入 ${Find_Policy} ${random_strategyName} 定位策略名称输入框失败 元素点击 ${Button_Searchbutton} 点击搜索按钮 定位搜索按钮失败 Sleep 2s 元素点击 xpath=//div[text()="${random_strategyName}"]/../..//div[text()="VMware完全备份"]/../..//a[text()="更多"] 点击更多展开备份集操作 定位备份集更多失败 元素点击 ${Bk_More_Delete} 点击删除备份集 定位备份集删除失败 元素点击 ${Confim_Delete_Bk} 点击确认删除备份集 定位确定删除备份集失败 元素点击 ${Success_Confirm} 删除成功 定位删除成功失败 VM备份 [Arguments] ${esxi_name} ${bk_type} ${bk_name} ${pipelineEncryption} ${pipelineCompress} ${pipelineDedup} # esxi名称|备份类型|介质名称|管道加密|管道压缩|管道重删 元素点击 ${CDM_dataProtect} 选择副本数据保护 定位副本数据保护栏失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} Set Suite Variable ${random_strategyName} Log 切换为全局变量 Sleep 5s 元素点击 Xpath=//span[text()="${esxi_name}"] 点击定位esxi 定位esxi失败 策略清理 元素点击 ${Add_VM_Policy} 点击添加策略按钮 添加策略定位失败 元素输入 ${Input_Vmname} ${bk_name} 定位虚拟机输入框失败 Log 输入虚拟机名称完毕 元素点击 ${Search_Vmname} 点击搜索虚拟机按钮 定位搜索虚拟机按钮失败 元素点击 xpath=//span[text()="${bk_name}"]/../../td[2]/div 勾选备份虚拟机 定位虚拟机失败 元素点击 ${Add_Vmname} 添加虚拟机完毕 定位添加虚拟机按钮失败 元素点击 ${Add_Vm_Policy_Nextstep} 进入任务周期 定位添加策略下一步失败 元素点击 ${AddTaskCycle} 添加任务周期成功 添加任务周期定位失败 Run Keyword If "${bk_type}"=="完全" KeyWord_VM.完全备份 ... ELSE IF "${bk_type}"=="增量" 增量备份 元素点击 ${Cycle_Onetime} 添加仅一次立即备份 一次循环模式定位失败 元素点击 ${Cycle_Confirm} 添加任务周期 任务周期确定定位失败 元素点击 ${Cycle_Nextstep} 点击下一步 任务周期下一步定位失败 Log 进入高级选项 Run Keyword If ${pipelineEncryption}==1 管道加密 Run Keyword If ${pipelineCompress}==1 管道压缩 Run Keyword If ${pipelineDedup}==1 管道重删 Sleep 2s 元素点击 ${Advance_Nextstep} 点击下一步 定位高级选项下一步失败 Log 进入概览 Sleep 2s 元素输入 ${Vm_PolicyName} ${random_strategyName} 定位虚拟机策略名称失败 Log 策略名称输入完毕 元素点击 ${Complete_policy} 点击完成按钮,策略创建完毕 定位虚拟机策略完成按钮失败 元素点击 ${Success_Confirm} 策略添加完成 备份策略完成定位失败 log 开始备份 元素点击 ${tab_backupset} 进入备份集栏 定位备份集选项失败 Sleep 60s 元素输入 ${Input_Policy_Name} ${random_strategyName} 定位策略名称输入框失败 Log 输入策略名进行搜索 Sleep 2s FOR ${n} IN RANGE 10 Click Element ${Button_Searchbk} Sleep 10s ${bk_status} Run Keyword And Return Status Wait Until Element Is Visible Xpath=//div[text()="${random_strategyName}"]/../../td[10]/div[text()="已完成"] Run Keyword If "${bk_status}"=="True" Exit For Loop ... ELSE Log 备份未完成 Sleep 120s END Run Keyword If ${bk_status}==False Fail ... ELSE Log 备份成功 Sleep 5s