*** Settings *** Library Selenium2Library Resource ../RE0_Common/KeyWord.robot Resource ../RE4_CDP/KeyWord.robot Library SSHLibrary Library String Library ../../Script/SC5_DR/Remainder.py Resource ElementPath.robot Variables ../../Config/DR/DR_config.py Library ../../Script/SC0_Common/00_Initial/Vsphere.py Library DateTime *** Keywords *** 选择数据源 [Arguments] ${SourceType} ${DataSource} ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' Select DataSourceType ${SourceType} Log 选择容灾数据源类型 Run Keyword If '${Source_Type}'=='实时备份数据' Run Keywords 选择容灾数据源 ${DataSource} ... AND Log 选择容灾数据源 ... ELSE IF '${Source_Type}'=='虚拟化快照数据' Run Keywords Select DrPlatformType ${DrPlatformType} ... AND Select DrVirtualHostInCDR ${DrVirtualHostInCDR} ... AND sleep 5s ... AND 元素点击 xpath=//div[text()='Centos6.5 64bit_10.10.8.20']/../../td[1] 选择数据源成功 数据源获取失败 元素点击 ${Add_Policy_step2} 点击下一步按钮成功 下一步获取失败 容灾机配置(正确) [Arguments] ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${ChannelIP} ${SourceType} ${Network_Configuration} Run Keyword If '${SourceType}'=='实时备份数据' Run Keywords Select PolicyDrMachineType ${PDM_Type} ... AND Log 选择容灾机类型 log 是否手动创建容灾机 sleep 5s 元素点击 ${Btn_Init} 自动创建容灾机 手动创建容灾机按钮定位失败 sleep 5s Select DrPlatform ${Plafrom} Log 选择容灾平台 元素输入 ${Input_Policy_CoreNumberCPU} ${coreCPU} CPU核心数元素获取失败 元素输入 ${Input_Policy_NumberCPU} ${numberCPU} CPU个数定位失败 元素输入 ${Input_Policy_Memory} ${Memory} 内存容量定位失败 Run Keyword If '${Network_Configuration}'=='保持原有网络配置' 保持原有网络配置 ... ELSE IF '${Network_Configuration}'=='自定义网络配置' 自定义网络配置 Select ServerChannelIP ${ChannelIP} Log 设置服务端通道IP 元素点击 ${Add_Policy_step3} 容灾机配置下一步点击成功 下一步获取失败 容灾机配置(错误) [Arguments] ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${ChannelIP} ${Message} Select PolicyDrMachineType ${PDM_Type} Log 选择容灾机类型 Comment 是否手动创建容灾机 Select DrPlatform ${Plafrom} Log 选择容灾平台 元素输入 ${Input_Policy_CoreNumberCPU} ${coreCPU} CPU核心数元素获取失败 元素输入 ${Input_Policy_NumberCPU} ${numberCPU} CPU个数定位失败 元素输入 ${Input_Policy_Memory} ${Memory} 内存容量定位失败 Select NetWork ${Network} Log 设置网络 Select NetWorkAdapter ${NetworkAdp} Log 设置网络适配器 Select ServerChannelIP ${ChannelIP} Log 设置服务端通道IP 元素点击 ${Add_Policy_step3} 容灾机配置下一步点击成功 下一步获取失败 Wait Until Element Is Visible ${Add_Policy_Alert_Message} 10s 警告弹出框 ${info} Get Text ${Add_Policy_Alert_Message} should contain ${info} ${Message} sleep 2s log 点击取消 click button ${Button_AlertOK} 容灾机模式配置_win [Arguments] ${Mode} ${Auto_Switch} ${list} ${Auto_Type} Select DRMode ${Mode} log ${Mode} Log 设置容灾机模式 Run Keyword If '${Auto_Switch}'=="是" and '${Mode}'=="演练模式" 自动演练配置win ${list} ${Auto_Type} ... ELSE IF '${Auto_Switch}'=="是" and '${Mode}'=="接管模式" 自动接管配置 ${list} ${Auto_Type} ... ELSE 完成容灾模式配置 容灾策略预览 [Arguments] ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${ChannelIP} ${PDM_Type} ${datasource} Page Should Contain ${PolicyName} Page Should Contain ${datasource} Page Should Contain CPU个数:${numberCPU} Page Should Contain CPU核心数:${coreCPU} Comment Page Should Contain 内存容量:${Memory} Page Should Contain ${Plafrom} Page Should Contain ${Network} Page Should Contain ${NetworkAdp} Page Should Contain ${PDM_Type} Page Should Contain ${ChannelIP} Comment Run Keyword If '${SourceType}'=='虚拟化快照数据' Run Keywords 元素点击 xpath=//*[@id="rightContentMain"]//span[contains(text(),"完成")][1] 预览界面完成按钮点击成功 预览界面完成按钮元素定位失败 Log 进入下一步 sleep 10s 元素点击 ${Button_AlertOK} 策略创建完成 确认按钮获取失败 容灾策略创建完成状态 [Arguments] ${PolicyName} ${Select_DataTimePoint} ${snap_point}='' sleep 20s ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] FOR ${n} IN RANGE 20 Sleep 1s Run Keyword If "${temp}"=='' ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] ... ELSE Exit For Loop END Run Keyword If '${temp}'=="创建中" 容灾策略创建完成状态 ${PolicyName} ${Select_DataTimePoint} ${snap_point} ... ELSE IF '${temp}'=="断开" 执行容灾策略 ${PolicyName} ${Select_DataTimePoint} ${snap_point} ... ELSE fail 执行容灾策略 [Arguments] ${PolicyName} ${Select_DataTimePoint} ${snap_point}= 元素点击 xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[9]//div//span[1] 手动演练/接管点击成功 手动演练/接管元素获取失败 sleep 5s Run Keyword If '${Select_DataTimePoint}'=="最新时间点" 最新时间点 ... ELSE IF '${Select_DataTimePoint}'=="指定时间点" 指定时间点 ... ELSE IF '${Select_DataTimePoint}'=="已用时间点" 已用时间点 ... ELSE IF '${Select_DataTimePoint}'=="指定快照" 指定快照 ${snap_point} ... ELSE 关闭浏览器 sleep 5s 元素点击 ${Button_DrPolicy_TakeOverFinish} 选择容灾数据时间点完成 选择容灾时间点完成按钮获取失败 sleep 3s log 开始判断 ${W_KeepData} Run Keyword And Return Status Wait Until Element Is Visible xpath=//div[text()="切换时间会丢失之前接管的数据"] ${W_LostData} Run Keyword And Return Status Wait Until Element Is Visible xpath=//*[@id="unaryLayer"]/div[1]/div[1] log 判断结束 Run Keyword If ${W_LostData}==True 元素点击 xpath=//a[@class='layui-layer-btn1'] 确定按钮点击成功 确定按钮定位失败 ... ELSE IF ${W_KeepData}==True 元素点击 xpath=//a[@class='layui-layer-btn1'] 确定按钮点击成功 确定按钮定位失败 ... ELSE sleep 1s sleep 3s Wait Until Element Is Visible ${Button_AlertOK} 30 元素点击 ${Button_AlertOK} 手动演练/接管配置完成 点击确定操作失败 执行状态 ${PolicyName} log 999991111 执行状态 [Arguments] ${PolicyName} sleep 300s ${temp} Get Text xpath=//*[@id="disasterTable"]//td[text()="${PolicyName}"]/..//td[4] Run Keyword If '${temp}'=="连接中" 执行状态 ${PolicyName} ... ELSE IF '${temp}'=="连接" Log 执行策略成功 ... ELSE fail [Teardown] 校验容灾机 Comment 校验CPU、内存 Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=5s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName} * ${output} read delay=5s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' Log cpu设置正确 Close Connection Comment 获取生产机文件md5值 sleep 5s log 登录容灾机开始校验 sleep 240s Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入生产机 write md5sum /A.txt | awk '{print $1}' ${output} read delay=5s Log 获取生产机文件md5值 Close Connection sleep 60s Open Connection ${Add_IPV4_Address_Input} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入演练机 write md5sum /A.txt | awk '{print $1}' ${output2} read delay=10s Log 获取演练机文件md5值 Should Be Equal ${output2} ${output} Log 验证成功 Close Connection 断开连接 [Arguments] ${PolicyName} sleep 5s Comment Log 断开连接 log ${PolicyName} Wait Until Element Is Visible xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]/td[9]//div//span[text()="断开连接"] 5s 元素点击 xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]/td[9]//div//span[text()='断开连接'] 断开连接点击成功 断开连接定位失败 sleep 5s Log 断开连接确定 元素点击 ${Disconnect_OK} 断开连接确定成功 断开连接确定定位失败 sleep 10s Log 断开操作成功 元素点击 ${Button_AlertOK} 断开连接操作成功 断开连接操作失败 断开状态 ${PolicyName} sleep 100s 断开状态 [Arguments] ${PolicyName} sleep 60s ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="断开中" 断开状态 ${PolicyName} ... ELSE IF '${temp}'=="断开" Log 断开连接成功 ... ELSE 关闭浏览器 删除容灾策略 [Arguments] ${policyname} sleep 5s 元素点击 xpath=//td[text()='${PolicyName}']/../td[9]//span[text()='更多'] 点击更多操作成功 更多操作定位失败 Log 获取更多操作 元素点击 ${Delete_Policy} 点击删除操作成功 删除操作定位失败 元素点击 ${Disconnect_OK} 删除确认按钮点击成功 删除确定定位失败 元素点击 ${Button_AlertOK} 删除策略确认按钮点击成功 确认按钮元素定位失败 删除中 ${policyname} 删除中 [Arguments] ${policyname} ${status} Run Keyword And Return Status Wait Until Element Contains ${policyname} 1 Run Keyword If '${status}'=="False" Log 删除成功 ... ELSE IF '${status}'=="True" 删除状态 ${policyname} 删除状态 [Arguments] ${PolicyName} sleep 10s ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[3] Run Keyword If '${temp}'=="删除中" 删除中 ${PolicyName} ... ELSE Log 删除策略成功 Select DataSourceType [Arguments] ${SourceType} Wait Until Page Contains Element ${Select_DataSourceType} 30s Wait Until Element Is Visible ${Select_DataSourceType} 30s Sleep 1s Select From List By Label ${Select_DataSourceType} ${SourceType} 选择容灾数据源 [Arguments] ${DataSource} Comment Wait Until Page Contains Element ${Select_DataSource} 30s Comment log ${Select_DataSource} Comment Wait Until Element Is Visible ${Select_DataSource} 30s Comment Sleep 1s Comment Select From List By Label ${Select_DataSource} ${DataSource} 元素点击 ${Select_DataSource} 点击数据源下拉框 定位数据源下拉框失败 log //*[@id="addPolicyDrSelectDataSourceRealTime"]/../div/dl/dd[contains(text(),"${DataSource}")] 元素点击 xpath=//*[@id="addPolicyDrSelectDataSourceRealTime"]/../div/dl/dd[contains(text(),"${DataSource}")] 选中数据源 选中数据源失败 sleep 5s Select PolicyDrMachineType [Arguments] ${PDM_Type} Wait Until Page Contains Element ${Select_DrMachineType} 30s Wait Until Element Is Visible ${Select_DrMachineType} 30s Sleep 1s Select From List By Label ${Select_DrMachineType} ${PDM_Type} Select DrPlatform [Arguments] ${Plafrom} Wait Until Page Contains Element ${Select_DrPlatform} 30s Wait Until Element Is Visible ${Select_DrPlatform} 30s Sleep 1s Select From List By Label ${Select_DrPlatform} ${Plafrom} Select NetWork [Arguments] ${Network} Wait Until Page Contains Element ${Select_Policy_Network} 30s Wait Until Element Is Visible ${Select_Policy_Network} 30s Sleep 1s Select From List By Label ${Select_Policy_Network} ${Network} Log 设置网络 Select NetWorkAdapter [Arguments] ${NetworkAdp} Wait Until Page Contains Element ${Select_Policy_NetworkAdapter} 30s Wait Until Element Is Visible ${Select_Policy_NetworkAdapter} 30s Sleep 1s Select From List By Label ${Select_Policy_NetworkAdapter} ${NetworkAdp} Log 设置网络适配器 Select ServerChannelIP [Arguments] ${ChannelIP} Wait Until Page Contains Element ${Select_Policy_ChannelIP} 30s Wait Until Element Is Visible ${Select_Policy_ChannelIP} 30s Sleep 1s Select From List By Label ${Select_Policy_ChannelIP} ${ChannelIP} Select DRMode [Arguments] ${DrMode} Wait Until Page Contains Element ${Select_Policy_DrMode} 30s Wait Until Element Is Visible ${Select_Policy_DrMode} 30s Sleep 1s Select From List By Label ${Select_Policy_DrMode} ${DrMode} 最新时间点 sleep 5s 元素点击 ${Click_DrPolicy_LatestTimePoint} 选择容灾数据时间点(最新时间点) 容灾数据时间点定位失败 已用时间点 元素点击 ${DRPolicy_UsedTimePoint} 选择容灾数据时间点(已用时间点) 容灾数据时间点定位失败 接管容灾策略创建完成状态 [Arguments] ${PolicyName} sleep 10s ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="创建中" 接管容灾策略创建完成状态 ${PolicyName} ... ELSE IF '${temp}'=="断开" Log 策略创建完成 ... ELSE 关闭浏览器 查看生产机状态 [Arguments] ${PolicyName} ${IP} ${Select_DataTimePoint} ${snap_point}= Comment 如果online进行关机,否则执行策略 Log 查看的生产机状态 Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write ping \ '${IP}' Sleep 5s ${output} read delay=20 Comment ${text2} Get Line ${output} 1 Close Connection ${flag} Evaluate 'Destination Host Unreachable' in $output Run Keyword If ${flag} 执行容灾策略 ${PolicyName} ${Select_DataTimePoint} ${snap_point} ... ELSE 查看生产机状态 ${PolicyName} ${IP} ${Select_DataTimePoint} ${snap_point} 生产机关机 Log 打开生产机 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Write shutdown -h now sleep 120s Close Connection 校验接管容灾机 Comment 校验CPU、内存 Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=1s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName}* ${output} read delay=3s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' Should Contain ${output} cores='${CPU_Core}' Log cpu设置正确 Close Connection sleep 40s Comment 获取接管容灾机文件md5值 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入接管容灾机 sleep 5s Start Command md5sum /A.txt | awk '{print $1}' ${output} Read Command Output delay=3s Log 获取接管容灾机文件md5值 log ${origin_file_md5} log ${output} Should Be Equal ${output} ${origin_file_md5} Close Connection Log 容灾机数据校验成功 完成容灾模式配置 元素点击 ${Add_Policy_step4} 容灾模式下一步点击成功 下一步获取失败 自动演练配置 [Arguments] ${list} ${Auto_Type} 元素点击 ${Add_Policy_AutoSwitch} 开启自动演练成功 自动演练开启按钮获取失败 sleep 10s Run Keyword If '${Auto_Type}'=='脚本' 选择脚本文件 ... ELSE IF '${Auto_Type}'=='服务' 自动演练服务选择 ${list} 完成容灾模式配置 选择服务 [Arguments] ${element} ${temp} Get Text xpath=//*[@class="layui-laypage-count"] ${length} Get Length ${temp} ${total} Get Substring ${temp} 1 ${length-1} ${page} Calc Remainder ${total} 10 FOR ${i} IN RANGE 1 ${page}+1 1 元素输入 xpath=//*[@class="layui-table-page"]//button[text()="确定"]/..//input ${i} 页数输入框定位失败 元素点击 xpath=//*[@class="layui-table-page"]//button[text()="确定"] 点击确定成功 确定按钮获取失败 ${temp} Run Keyword And Return Status Page Should Contain ${element} log ${element} Run Keyword If '${temp}'=='True' Run Keywords 勾选服务 ${element} ... AND Log ${element}选择成功 ... AND Exit For Loop ... ELSE Continue For Loop END 勾选服务 [Arguments] ${element} 元素点击 xpath=//div[contains(text(),"${element}")]/../../td[1] 服务勾选成功 服务位置获取失败 选择脚本文件 元素点击 xpath=//*[@ng-click="addPolicyDrimportScript()"] 点击选择脚本文件按钮成功 选择脚本按钮元素获取失败 元素点击 xpath=//div[text()="UnaEDRDrillServiceReport7X"]/../../td[1] 选择linux脚本文件成功 选择linux脚本文件元素获取失败 元素点击 xpath=//*[@id="addPolicyDrSelectScriptFile"]/div[2]/button[2] 脚本选择导入成功 获取导入按钮元素失败 自动演练策略创建完成状态 [Arguments] ${PolicyName} sleep 60s Wait Until Element Is Visible //*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] 10s 定位容灾状态失败 ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="创建中" 自动演练策略创建完成状态 ${PolicyName} ... ELSE IF '${temp}'=="断开" 自动演练策略创建完成状态 ${PolicyName} ... ELSE IF '${temp}'=="连接" Log 开始自动演练 ... ELSE 关闭浏览器 校验演练报告 [Arguments] ${PolicyName} sleep 5s 元素点击 //*[@id="disasterTable"]/div[2]/table//td[text()="${PolicyName}"]/..//span[text()="更多"] 点击更多操作成功 更多操作定位失败 Log 获取更多操作 sleep 5s 元素点击 ${Click_LookReport} 点击查看演练报告 获取点击查看演练报告失败 ${temp} Run Keyword And Return Status Page Should Contain 查看报告 Run Keyword If '${temp}'=='True' Run Keywords Log 自动演练成功 ... AND 校验报告内容 ... ELSE Log 自动演练失败 sleep 5s 元素点击 xpath=//*[@id="drLookDrillReportId"]/div[2]/button 关闭演练报告窗口 关闭演练报告窗口失败 等待自动演练完成 [Arguments] ${PolicyName} sleep 480s Wait Until Element Is Visible xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] 10s 容灾策略不存在 ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="连接" 等待自动演练完成 ${PolicyName} ... ELSE IF '${temp}'=="断开" Log 自动演练作业结束 校验报告内容 sleep 10s 元素点击 xpath=//a[text()="查看报告"] 查看演练报告 获取查看报告失败 sleep 5s 元素点击 xpath=//*[@id="drDrillReportDetailsId"]/div[2]/button 关闭查看演练报告窗口 关闭查看演练报告窗口失败 创建容灾策略 [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${DR_BC_IP} ${SourceType} ${Network_Configuration_custom} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} 自动演练服务选择 [Arguments] ${list} 元素点击 ${Add_Policy_GetServiceData} 获取服务数据点击成功 获取服务数据元素定位失败 sleep 10s FOR ${element} IN @{list} log ${element} 选择服务 ${element} Continue For Loop END Select DrPlatformType [Arguments] ${DrPlatformType} Wait Until Page Contains Element ${Select_DrPlatformType} 30s Wait Until Element Is Visible ${Select_DrPlatformType} 30s Sleep 1s Select From List By Label ${Select_DrPlatformType} ${DrPlatformType} Select DrVirtualHostInCDR [Arguments] ${DrVirtualHostInCDR} Wait Until Page Contains Element ${Select_DrVirtualHostInCDR} 30s Wait Until Element Is Visible ${Select_DrVirtualHostInCDR} 30s Sleep 1s Select From List By Label ${Select_DrVirtualHostInCDR} ${DrVirtualHostInCDR} Select AgentTiming [Arguments] ${AgentTiming} Wait Until Page Contains Element ${Select_DrVirtualHostInCDR} 30s Wait Until Element Is Visible ${Select_DrVirtualHostInCDR} 30s Sleep 1s Select From List By Label ${Select_DrVirtualHostInCDR} ${AgentTiming} Select NetWork2 [Arguments] ${Network} Wait Until Page Contains Element ${Select_Policy_Network2} 30s Wait Until Element Is Visible ${Select_Policy_Network2} 30s Sleep 1s Select From List By Label ${Select_Policy_Network2} ${Network} Log 设置网络 Select NetWorkAdapter2 [Arguments] ${NetworkAdp} Wait Until Page Contains Element ${Select_Policy_NetworkAdapter2} 30s Wait Until Element Is Visible ${Select_Policy_NetworkAdapter2} 30s Sleep 1s Select From List By Label ${Select_Policy_NetworkAdapter2} ${NetworkAdp} Log 设置网络适配器 指定快照 [Arguments] ${snap_point} 元素点击 ${Click_DrPolicy_LatestSnap} 选择容灾数据时间点 容灾数据时间点定位失败 sleep 2s 元素点击 xpath=//div[contains(text(),'${snap_point}')]/../../td[1] 选择快照成功 选择快照定位失败 校验容灾机状态 [Arguments] ${Esxi_IP} ${Esxi_User} ${Esxi_PWD} Sphere Login ${Esxi_IP} ${Esxi_User} ${Esxi_PWD} Log 登录esxi成功 Vsphere.Vm Poweron Name ${PolicyName} Log 容灾机已开启 接管机性能数据采集 ${time1} Evaluate ${times}*30 ${time2} Evaluate ${times}*28+30 Log 接管容灾机开机时间在${time1}s—${time2}s之间 Run Keyword If ${times}>0 Log 接管容灾机开机时间未在30s内 ... ELSE Log 接管容灾机开机时间在30s内 循环次数 ${times} Evaluate ${times}+1 Set Global Variable ${times} 校验容灾机(指定快照1) Comment 校验CPU、内存 Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=1s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName} * ${output} read delay=1s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' cores='${CPU_Core}' Log cpu设置正确 Close Connection Comment 获取生产机文件md5值 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入生产机 write cat ${drillfile_path} ${output1} read delay=2s ${text2} Get Line ${output1} 9 ${text3} Get Substring ${text2} 13 23 Log 获取演练机IP Close Connection sleep 60s Open Connection ${text3} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入演练机 write md5sum ${file_path1} ${output2} read delay=2s ${text4} Get Substring ${output2} 0 32 Log 获取演练机文件md5值 Should Be Equal ${text4} ${file_md5} Log 验证成功 Close Connection 校验容灾机(指定快照2) Comment 校验CPU、内存 Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=1s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName} * ${output} read delay=1s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' cores='${CPU_Core}' Log cpu设置正确 Close Connection Comment 获取生产机文件md5值 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入生产机 write cat ${drillfile_path} ${output1} read delay=2s ${text2} Get Line ${output1} 9 ${text3} Get Substring ${text2} 13 23 Log 获取演练机IP Close Connection sleep 60s Open Connection ${text3} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入演练机 write md5sum ${file_path2} ${output2} read delay=2s ${text4} Get Substring ${output2} 0 32 Log 获取演练机文件md5值 Should Be Equal ${text4} ${file2_md5} Log 文件md5值成功 write find file_path1 ${output3} read delay=2s ${text2} Get Line ${output3} 0 Run Keyword If '${text2}'>'没有那个文件或目录' Log 验证成功 ... ELSE IF '${text2}'>'No such file or directory' Log 验证成功 ... ELSE Run Keywords Log 验证失败 ... AND 关闭浏览器 Close Connection 自动接管配置 [Arguments] ${list} ${Auto_Type} 元素点击 ${Add_Policy_AutoTakeOverSwitch} 开启自动接管成功 自动接管开启按钮获取失败 sleep 10s log 设置离线时间 元素输入 ${Input_RetryTime} ${RetryTime} 设置离线时间失败 log ${Input_RetryCycle} 元素输入 ${Input_RetryNum} ${RetryCycle} 设置检测周期失败 log 异常次数 元素输入 //*[@id="addPolicyDrDetectionAlarm"] ${RetryNum} 设置异常次数失败 Run Keyword If '${Auto_Type}'=='脚本' 选择脚本文件 ... ELSE IF '${Auto_Type}'=='服务' 自动演练服务选择 ${list} 完成容灾模式配置 自动接管等待 [Arguments] ${list} Comment 获取生产机文件md5值 Open Connection ${Agent1_HostIP} 22 SSHLibrary.Login ${Agent1_User} ${Agent1_Pwd} Log 关闭服务 FOR ${element} IN @{list} log ${element} Execute Command service ${element} stop Comment ${Message} Read Command Output Comment Should Contain ${Message} SUCCESS Log ${element}服务关闭成功 Continue For Loop END Close Connection ${time} Evaluate (${RetryTime}+${RetryCycle}*(${RetryNum}-1)+4)*60 sleep ${time}s 生产机关机_win Log 打开生产机 Open Connection ${Agent_HostIP_win} 22 SSHLibrary.Login ${Agent_User_win} ${Agent_Pwd_win} Start Command shutdown /s /t 0 sleep 120s Close Connection 查看生产机状态_win_old [Arguments] ${PolicyName} ${IP} ${Select_DataTimePoint} ${snap_point}= Comment 如果online进行关机,否则执行策略 Log 查看生产机的状态_win_old Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write ping \ '${IP}' ${output} read delay=6s ${text2} Get Line ${output} 1 Close Connection Run Keyword If '${text2}'=='From ${DR_BC_IP} icmp_seq=1 Destination Host Unreachable' 执行容灾策略 ${PolicyName} ${Select_DataTimePoint} ${snap_point} ... ELSE 生产机关机_win ${PolicyName} ${IP} ${Select_DataTimePoint} ${snap_point} ${Select_DataTimePoint} ${snap_point} 创建通用容灾策略 [Arguments] ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${BC_IP} ${DR_Type} ${Source} ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' sleep 3s ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ YL ${date} Set Suite Variable ${random_strategyName} 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${random_strategyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${BC_IP} ${SourceType} comment 容灾机模式 comment 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 完成容灾模式配置 循环点击 ${Add_Policy_Finish} ${Button_AlertOK} Log 进入下一步 sleep 5s 元素点击 ${Button_AlertOK} 策略创建完成 确认按钮获取失败 Windows文件系统校验 [Arguments] ${rz_agent} ${rz_name} ${rz_pwd} ${bc_agent} ${bc_name} ${bc_pwd} # 容灾代理IP|容灾用户名|容灾密码|黑方IP|黑方密码|黑方密码 Sleep 300 Open Connection ${rz_agent} SSHLibrary.Login ${rz_name} ${rz_pwd} Execute Command chcp 437&&chkdsk C: > C:\\Users\\Administrator\\auto.txt Get File C:\\Users\\Administrator\\auto.txt . Close Connection Log 将容灾机内执行结果下载到本地 Open Connection ${bc_agent} SSHLibrary.Login ${bc_name} ${bc_pwd} PUT File ./auto.txt /opt ${Result}= Execute Command grep "found no problems" /opt/auto.txt Should Contain ${Result} found no problems Close Connection Log 将本地结果发送到黑方,并校验内容 添加容灾平台 [Arguments] ${BCIP} ${BCNAME} ${BCPWD} ${AddDRPlatformType} ${WEBNAME} ${WEBPWD} ${ESXiIP} ${ESXIUSER} ${ESXIPWD} ${CASIP} ${CASUSER} ${CASPWD} Open Connection ${BCIP} 22 SSHLibrary.Login ${BCNAME} ${BCPWD} Log 进入黑方后台 Write mysql -uunadba -p1223Bc@2008 Write use unary Write select * from tbl_drplatform; ${output1} read delay=1s Log ${output1} ${flag1} Evaluate ${BCIP} not in $output1 ${flag2} Evaluate ${ESXiIP} not in $output1 ${flag3} Evaluate ${CASIP} not in $output1 Close Connection Run Keyword If '${AddDRPlatformType}'=='UnaWare' and ${flag1} Run Keywords Log 添加内置容灾平台 ... AND 元素点击 ${DR_Manage} 点击容灾管理成功 定位容灾管理失败 30s ... AND sleep 2s ... AND 元素点击 ${Add_DRPlatform} 点击添加容灾平台成功 定位添加容灾平台失败 30s ... AND sleep 2s ... AND Select AddDRPlatformType ${AddDRPlatformType} ... AND Log 选择内置容灾平台 ... AND sleep 2s ... AND 元素输入 ${Input_AddDRPt_IP} ${BCIP} 获取IP输入元素失败 ... AND 元素输入 ${Input_AddDRPt_UserName} ${WEBNAME} 获取用户名输入元素失败 ... AND 元素输入 ${Input_AddDRPt_password} ${WEBPWD} 获取密码输入元素失败 ... AND 元素点击 ${Btn_AddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 30s ... AND sleep 20s ... AND 元素点击 ${Btn_AfterAddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 30s ... AND sleep 5s ... ELSE IF '${AddDRPlatformType}'=='ESXi' and ${flag2} Run Keywords Log 添加ESXi容灾平台 ... AND 元素点击 ${DR_Manage} 点击容灾管理成功 定位容灾管理失败 30s ... AND sleep 2s ... AND 元素点击 ${Add_DRPlatform} 点击添加容灾平台成功 定位添加容灾平台失败 30s ... AND sleep 2s ... AND Select AddDRPlatformType ${AddDRPlatformType} ... AND Log 选择ESXi容灾平台 ... AND sleep 2s ... AND 元素输入 ${Input_AddDRPt_Name} ${ESXiIP} 获取备注平台名输入元素失败 ... AND 元素输入 ${Input_AddDRPt_IP} ${ESXiIP} 获取IP输入元素失败 ... AND 元素输入 ${Input_AddDRPt_UserName} ${ESXIUSER} 获取用户名输入元素失败 ... AND 元素输入 ${Input_AddDRPt_password} ${ESXIPWD} 获取密码输入元素失败 ... AND 元素点击 ${Btn_AddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 30s ... AND sleep 20s ... AND 元素点击 ${Btn_AfterAddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 30s ... AND sleep 5s ... ELSE IF '${AddDRPlatformType}'=='H3C-CAS' and ${flag3} Run Keywords Log 添加CAS容灾平台 ... AND 元素点击 ${DR_Manage} 点击容灾管理成功 定位容灾管理失败 30s ... AND sleep 2s ... AND 元素点击 ${Add_DRPlatform} 点击添加容灾平台成功 定位添加容灾平台失败 30s ... AND sleep 2s ... AND Select AddDRPlatformType ${AddDRPlatformType} ... AND Log 选择CAS容灾平台 ... AND sleep 2s ... AND 元素输入 ${Input_AddDRPt_Name} ${CASIP} 获取备注平台名输入元素失败 ... AND 元素输入 ${Input_AddDRPt_IP} ${CASIP} 获取IP输入元素失败 ... AND 元素输入 ${Input_AddDRPt_UserName} ${CASUSER} 获取用户名输入元素失败 ... AND 元素输入 ${Input_AddDRPt_password} ${CASPWD} 获取密码输入元素失败 ... AND 元素点击 ${Btn_AddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 30s ... AND sleep 20s ... AND 元素点击 ${Btn_AfterAddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 30s ... AND sleep 5s ... ELSE Log 容灾平台已存在 Select AddDRPlatformType [Arguments] ${AddDRPlatformType} Wait Until Page Contains Element ${Select_AdddDRPt_Pt} 30s Wait Until Element Is Visible ${Select_AdddDRPt_Pt} 30s Sleep 1s Select From List By Label ${Select_AdddDRPt_Pt} ${AddDRPlatformType} 渐进式回迁方式 [Arguments] ${ip} ${user} ${pwd} ${drRelocationCdpPropertyWayList} ${drRelocationCdpDataTransferMode} ${PolicyName} #livecd ip |livecd 用户名| livecd密码 |回迁方式 |数据传输模式 Comment 获取livecd localid Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} sleep 2s Start Command grep -w 'localId' /usr/cdpagent/agent/ubackup/uagent/conf/node.properties |sed 's/localId=\(.*\)/\1/g' ${localId} Read Command Output log ${localId} Close Connection sleep 20s 元素点击 xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[9]//div//span[5] 点击更多按钮成功 定位更多元素失败 元素点击 //*[@id="app"]/ul/li[2] 点击回迁按钮成功 点击回迁按钮失败 sleep 60s 元素点击 //*[@id="drRelocationCdpTargetMachine"] 点击选择目标机成功 点击选择目标机失败 元素点击 //option[text()='livecd.${LIVECD_IP}'] 选择目标livecd成功 定位目标livecd失败 元素点击 //*[@id="drRelocationCdpPropertyWayList"] 点击选择回迁方式成功 定位选择回迁方式失败 Run Keyword If "${drRelocationCdpPropertyWayList}"=="渐进式回迁" 选择渐进式回迁 ... ELSE IF "${drRelocationCdpPropertyWayList}"=="仅恢复增量数据" 选择仅恢复增量数据回迁 元素点击 //*[@id="drRelocationCdpDataTransferMode"] 选择数据传输选择框成功 定位数据传输选择框失败 Run Keyword If "${drRelocationCdpDataTransferMode}"=="iSCSI" 选择iSCSI传输方式 ... ELSE IF "${drRelocationCdpDataTransferMode}"=="FC" 选择FC传输方式 ... ELSE 选择OSVI传输方式 1 sleep 2s 选择渐进式回迁 元素点击 ${CdpPropertyWayList_Jianjin} 点击渐进式回迁方式成功 定位渐进式回迁方式失败 选择仅恢复增量数据回迁 元素点击 ${CdpPropertyWayList_Zengliang} 点击渐进式回迁方式成功 定位渐进式回迁方式失败 选择iSCSI传输方式 元素点击 ${DR_TransferMode_iSCSI} 选择iSCSI传输方式成功 定位iSCSI传输方式失败 选择OSVI传输方式 [Arguments] ${compress} # OSVI压缩 元素点击 ${DR_TransferMode_OSVI} 选择OSVI传输方式成功 定位OSVI传输方式失败 Sleep 2s Run Keyword If ${compress}==0 Log 不勾选压缩 ... ELSE IF ${compress}==1 元素点击 ${DrRelocationCdp_Compress} 勾选压缩 定位压缩失败 选择FC传输方式 元素点击 ${DR_TransferMode_FC} 选择iSCSI传输方式成功 定位iSCSI传输方式失败 选择黑方IP1 元素点击 //option[text()='${DR_BC_IP}'] 选择黑方IP通道1成功 定位黑方IP通道1失败 选择黑方IP2 元素点击 //option[text()='${DR_BC_IP2}'] 选择黑方IP通道2成功 定位黑方IP通道2失败 选择黑方IP3 元素点击 //option[text()='${DR_BC_IP3}'] 选择黑方IP通道3成功 定位黑方IP通道3失败 回迁作业任务 comment 进入恢复作业管理界面 元素点击 //*[@id="menu"]/li[2] 成功进入恢复作业管理界面 定位恢复作业管理界面元素失败 sleep 20s 元素点击 //*[@ng-click="refreshTasks()"] 刷新按钮成功 刷新按钮失败 元素点击 //*[@class="objbox"]/table[1]//td[contains(text(),"运行中")]/../td[10]/div[1]/span[1] 点击任务详情成功 点击任务详情失败 sleep 5s FOR ${n} IN RANGE 100 ${text1} Get Text //*[@id="work_detail_list"] Run Keyword If Should Contain ${text1} 当前迁移的增量数据小于1GB, 请关闭接管以完成迁移 sleep 10s ... ELSE sleep 5s END 添加ESXi容灾平台 sleep 5s 元素点击 ${DR_Manage} 点击容灾管理成功 定位容灾管理失败 sleep 2s 元素点击 ${Add_DRPlatform} 点击添加容灾平台成功 定位添加容灾平台失败 sleep 2s 元素点击 ${Select_AdddDRPt_Pt} 选择容灾平台类型 定位容灾平台类型失败 sleep 2s 元素点击 ${Select_Dr_ESXi} 选择ESXi 定位ESXi平台类型失败 sleep 2s 元素输入 ${Input_AddDRPt_Name} 2011 获取平台备注输入元素失败 元素输入 ${Input_AddDRPt_IP} ${DRESXi_IP} 获取IP输入元素失败 元素输入 ${Input_AddDRPt_UserName} ${DRESXi_user} 获取用户名输入元素失败 元素输入 ${Input_AddDRPt_password} ${DRESXi_PWD} 获取密码输入元素失败 元素点击 ${Btn_AddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 sleep 40s 元素点击 ${Btn_AfterAddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 sleep 5s 添加内置容灾平台 元素点击 ${DR_Manage} 点击容灾管理成功 定位容灾管理失败 sleep 2s 元素点击 ${Add_DRPlatform} 点击添加容灾平台成功 定位添加容灾平台失败 sleep 2s 元素点击 ${Select_AdddDRPt_Pt} 选择容灾平台类型 定位容灾平台类型失败 sleep 2s 元素输入 ${Input_AddDRPt_IP} ${DR_BC_IP} 获取IP输入元素失败 元素输入 ${Input_AddDRPt_UserName} ${DR_BC_Name} 获取用户名输入元素失败 元素输入 ${Input_AddDRPt_password} ${DR_BC_PWD} 获取密码输入元素失败 元素点击 ${Btn_AddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 sleep 20s 元素点击 ${Btn_AfterAddDRPt_OK} 点击确定按钮成功 定位确定按钮失败 sleep 5s 删除容灾平台 [Arguments] ${DR_Name} Right Click Element //*[@id="sideTreeResource"]//span[text()="${DR_Name}"] 元素点击 //tr[contains(@id,'deleteSidetreeResource')]/td[2]/div 点击删除成功 定位删除按钮失败 元素点击 ${Delect plafrom} 点击删除确定按钮 定位删除确定按钮失败 元素点击 //*[@id="tipsPop_define_btn"] 点击删除成功确定 定位删除成功确定失败 进入应用容灾界面 元素点击 ${DR_Icon} 进入应用容灾界面成功 进入应用容灾界面失败 保持原有网络配置 元素点击 ${Network_Config} 网络配置 点击网络配置失败 元素点击 xpath=//*[@id="addPolicyDrNetworkConfigCDP"]/option[contains(text(),"保持原有网络配置")] 选择保持原有网络配置 保持原有网络配置模式失败 Comment 元素点击 //*[@id="addPolicyDrNetworkConfigCDP"]/../div[1]/span[1] 选择刷新网络网络配置 刷新网络配置失败 Run Keyword If '${SourceType}'=='实时备份数据' Run Keywords Select NetWork ${DR_Network} ... AND Select NetWorkAdapter ${DR_NetworkAdp} ... ELSE IF '${SourceType}'=='虚拟化快照数据' Run Keywords 元素点击 ${Btn_AddNetWork} 点击添加网络成功 添加网路定位失败 ... AND Select NetWork2 ${Network} ... AND Select NetWorkAdapter2 ${NetworkAdp} ... AND 元素点击 xpath=//*[@id="addPolicyDrNetworkVirtualModal"]/div[2]/button[2] 网络添加成功 网络添加失败 自定义网络配置 Wait Until Element Is Visible ${Network_Config} 60 元素点击 ${Network_Config} 网络配置 点击网络配置失败 元素点击 xpath=//*[@id="addPolicyDrNetworkConfigCDP"]/option[contains(text(),"自定义网络配置")] 选择自定义网络配置模式 自定义网络配置模式失败 元素点击 ${Network_Add} 添加网卡 添加网卡失败 元素点击 ${Select_Network} 点击网络 网络点击失败 log //select [@ng-model="addBridgeObj.network"]/option[contains(text(),"${Select_Network_Configuration}")] 元素点击 xpath=//select [@ng-model="addBridgeObj.network"]/option[contains(text(),"${Select_Network_Configuration}")] 选择网络 选择网络失败 元素点击 ${Select_Network_Adapter} 点击网络适配器 网络适配器选择失败 元素点击 xpath=//select [@ng-model="addBridgeObj.networkAdapter"]/option[contains(text(),"${Select_Network_Adapter_Configuration}")] 选择网络适配器 选择网络适配器失败 Wait Until Element Is Visible ${Add_IPV4_Address} 30 元素输入 ${Add_IPV4_Address} ${Add_IPV4_Address_Input} 定位IPV4地址输入框失败 元素输入 ${Add_IPV4_SubnetMask} ${Add_IPV4_SubnetMask_Input} 定位IPV4子网掩码输入框失败 元素输入 ${Add_IPV4_Gateway} ${Add_IPV4_Gateway_Input} 定位IPV4网关输入框失败 元素输入 ${Add_IPV6_Address} ${Add_IPV6_Address_Input} 定位IPV6地址输入框失败 元素输入 ${Add_IPV6_SubnetMask} ${Add_IPV6_SubnetMask_Input} 定位IPV6子网掩码输入框失败 元素输入 ${Add_IPV6_Gateway} ${Add_IPV6_Gateway_Input} 定位IPV6网关输入框失败 元素输入 ${Add_FirstDNS} ${Add_FirstDNS_Input} 定位首选DNS输入框失败 元素输入 ${Add_SecondDNS} ${Add_SecondDNS_Input} 定位备选DNS输入框失败 元素点击 ${Click_Sure_Button} 点击确认按钮 确认按钮点击失败 生产机关机_win_new [Arguments] ${PolicyName} ${IP} ${Select_DataTimePoint} ${snap_point}= Log 打开生产机 Open Connection ${IP} 22 SSHLibrary.Login ${Agent_User_win} ${Agent_Pwd_win} Write shutdown -p sleep 120s Close Connection 查看生产机状态_win ${PolicyName} ${IP} ${Select_DataTimePoint} ${snap_point} 查看生产机状态_win [Arguments] ${PolicyName} ${IP} ${Select_DataTimePoint} ${snap_point}= '' Comment 如果online进行关机,否则执行策略 Log 查看生产机的状态 Sleep 20s Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write ping \ '${IP}' ${output} read delay=30s Comment ${text2} Get Line ${output} 1 Close Connection ${flag} Evaluate 'Destination Host Unreachable' in $output Run Keyword If ${flag} 执行容灾策略 ${PolicyName} ${Select_DataTimePoint} ${snap_point} ... ELSE 查看生产机状态_win ${PolicyName} ${Agent_HostIP_win} 最新时间点 等待自动演练开始 [Arguments] ${PolicyName} sleep 90s ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="断开" 等待自动演练开始 ${PolicyName} ... ELSE IF '${temp}'=="连接" 等待自动演练完成 ${PolicyName} ... ELSE 关闭浏览器 回迁目标端磁盘选择 [Arguments] ${ip} ${user} ${pwd} # ip地址|用户名|密码 log 获取盘符 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Log 进入linux后台 Sleep 3s Write cd ${Linuxdisk_xml_Path} Sleep 3s Write ${Linux_Python_Path} getdisk_linux.py ${output1} Read delay=1s ${output2} Get Line ${output1} 0 Log ${output2} ${disklist_lin} Evaluate list(${output2}) Set Test Variable ${disklist_lin} Log ${disklist_lin} Close Connection log 选择恢复目标盘 FOR ${a} IN @{disklist_lin} 元素点击 //*[@id="diskRecovery-diskTable"]//td[text()="磁盘${a}" ]/../td[7] 点击目标端选择成功 定位目标端选择失败 sleep 5s Run Keyword If '${a}'=='/dev/sda' 整机恢复目标端选择第一个盘-68 ... ELSE IF '${a}'=='/dev/sdb' 整机恢复目标端选择第2个盘-68 ... ELSE 整机恢复目标端选择第3个盘-68 END 回迁磁盘选择linux [Arguments] ${ip} ${user} ${pwd} # ip地址|用户名|密码 log 获取盘符 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Log 进入linux后台 Sleep 3s Write cd ${Linuxdisk_xml_Path} Sleep 3s Write ${Linux_Python_Path} getpart_linux.py ${output1} Read delay=1s ${output2} Get Line ${output1} 0 Log ${output2} ${disklist_lin} Evaluate list(${output2}) Set Test Variable ${disklist_lin} Log ${disklist_lin} Close Connection log 选择已保护的磁盘 FOR ${diskno} IN @{disklist_lin} log ${diskno} 元素点击 xpath=//*[@id="diskRecovery-diskTable"]//td[text()='${diskno}']/../td[2] 勾选已保护的分区 定位已保护的分区失败 Continue For Loop END 元素点击 //*[@id="diskRecovery"]/div[2]/button[4] 点击确定恢复按钮成功 定位确定恢复按钮失败 元素点击 //*[@id="unaryLayer"]/div[1]/div[1]/../../../../div[3]/a[2] 点击确认清除磁盘成功 定位确认清除磁盘成功 Wait Until Element Is Visible //*[@id="unaryLayer"]/div[1]/div[1]/i 60 元素点击 //*[@id="unaryLayer"]/div[1]/div[1]/../../../../div[3]/a 点击提示确认成功 点击提示确认失败 选择容灾数据源_win [Arguments] ${DataSource} Wait Until Element Is Visible ${Select_DataSource} 30 Comment log ${Select_DataSource} Comment Wait Until Element Is Visible ${Select_DataSource} 30s Comment Sleep 1s Comment Select From List By Label ${Select_DataSource} ${DataSource} sleep 2s 元素点击 ${Select_DataSource} 点击数据源下拉框 定位数据源下拉框失败 元素点击 xpath=//*[@id="addPolicyDrSelectDataSourceRealTime"]/../div/dl/dd[contains(text(),"${Agent_HostIP_win}")] 选中数据源 选中数据源失败 sleep 5s 选择数据源_win [Arguments] ${SourceType} ${DataSource} ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' Select DataSourceType ${SourceType} sleep 5s Log 选择容灾数据源类型 Run Keyword If '${Source_Type}'=='实时备份数据' Run Keywords 选择容灾数据源_win ${DataSource} ... AND Log 选择容灾数据源_win ... ELSE IF '${Source_Type}'=='虚拟化快照数据' Run Keywords Select DrPlatformType ${DrPlatformType} ... AND Select DrVirtualHostInCDR ${DrVirtualHostInCDR} ... AND sleep 5s ... AND 元素点击 xpath=//div[text()='Centos6.5 64bit_10.10.8.20']/../../td[1] 选择数据源成功 数据源获取失败 元素点击 ${Add_Policy_step2} 点击下一步按钮成功 下一步获取失败 创建容灾策略_win [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源_win ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} ${Network_Configuration_custom} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} 校验容灾机_win Comment 校验CPU、内存 Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=5s Should Contain ${output} ${PolicyName_win} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName_win} * ${output} read delay=5s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' Log cpu设置正确 Close Connection Comment 获取生产机文件md5值 sleep 5 comment winsows生产机校验todo Open Connection ${Agent_HostIP_win} 22 SSHLibrary.Login ${Agent_User_win} ${Agent_Pwd_win} 20s Log 进入生产机 write md5sum ${file_path1} ${output} read delay=5s ${text1} Get Substring ${output} 0 32 Log 获取生产机文件md5值 Close Connection Open Connection ${Agent_HostIP_win} 22 SSHLibrary.Login ${Agent_User_win} ${Agent_Pwd_win} 20s Log 进入演练机 write md5sum ${file_path1} ${output2} read delay=10s ${text4} Get Substring ${output2} 0 32 Log 获取演练机文件md5值 Should Be Equal ${text4} ${text1} Log 验证成功 Close Connection 自动演练配置win [Arguments] ${list} ${Auto_Type} 元素点击 ${Add_Policy_AutoSwitch} 开启自动演练成功 自动演练开启按钮获取失败 sleep 10s Run Keyword If '${Auto_Type}'=='脚本' 选择脚本文件_win ... ELSE IF '${Auto_Type}'=='服务' 自动演练服务选择 ${list} Comment 自动演练配置_自动循环模式win 完成容灾模式配置 选择脚本文件_win 元素点击 xpath=//*[@ng-click="addPolicyDrimportScript()"] 点击选择脚本文件按钮成功 选择脚本按钮元素获取失败 元素点击 xpath=//div[text()="UnaEDRDrillServiceReport"]/../../td[1] 选择windows脚本文件成功 选择winsowds脚本文件元素获取失败 元素点击 xpath=//*[@id="addPolicyDrSelectScriptFile"]/div[2]/button[2] 脚本选择导入成功 获取导入按钮元素失败 接管机配置 [Arguments] ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${ChannelIP} ${SourceType} Run Keyword If '${SourceType}'=='实时备份数据' Run Keywords Select PolicyDrMachineType ${PDM_Type} ... AND Log 选择容灾机类型 log 是否手动创建容灾机 sleep 5s 元素点击 ${Btn_Init} 自动创建容灾机 手动创建容灾机按钮定位失败 sleep 5s Select DrPlatform ${Plafrom} Log 选择容灾平台 元素输入 ${Input_Policy_CoreNumberCPU} ${coreCPU} CPU核心数元素获取失败 元素输入 ${Input_Policy_NumberCPU} ${numberCPU} CPU个数定位失败 元素输入 ${Input_Policy_Memory} ${Memory} 内存容量定位失败 Run Keyword If '${Network_Configuration_default}'=='保持原有网络配置' 保持原有网络配置 ... ELSE IF '${Network_Configuration_custom}'=='自定义网络配置' 自定义网络配置 Select ServerChannelIP ${ChannelIP} Log 设置服务端通道IP 元素点击 ${Add_Policy_step3} 容灾机配置下一步点击成功 下一步获取失败 创建接管策略_win [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源_win ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 Comment 接管机配置 ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} ${Network_Configuration_default} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} 渐进式回迁方式_win [Arguments] ${ip} ${user} ${pwd} ${drRelocationCdpPropertyWayList} ${drRelocationCdpDataTransferMode} ${PolicyName} #livecd ip |livecd 用户名| livecd密码 |回迁方式 |数据传输模式|分区名称|磁盘名称 sleep 20s Comment 元素点击 ${Click_More} 点击更多按钮成功 定位更多元素失败 Comment 元素点击 xpath=//td[text()='${PolicyName}']/../td[9]//span[text()='更多'] 点击更多按钮成功 定位更多元素失败 元素点击 //td[text()="${PolicyName_win}"]/../td[9]/div/span[5] 点击更多按钮成功 定位更多元素失败 元素点击 //*[@id="app"]/ul/li[2] 点击回迁按钮成功 点击回迁按钮失败 sleep 10s 元素点击 //*[@id="drRelocationCdpTargetMachine"] 点击选择目标机成功 点击选择目标机失败 元素点击 //option[text()='livecd.${LIVECD_IP_win}'] 选择目标livecd成功 定位目标livecd失败 元素点击 //*[@id="drRelocationCdpPropertyWayList"] 点击选择回迁方式成功 定位选择回迁方式失败 Run Keyword If "${drRelocationCdpPropertyWayList}"=="渐进式回迁" 选择渐进式回迁 ... ELSE IF "${drRelocationCdpPropertyWayList}"=="仅恢复增量数据" 选择仅恢复增量数据回迁 元素点击 //*[@id="drRelocationCdpDataTransferMode"] 选择数据传输选择框成功 定位数据传输选择框失败 Run Keyword If "${drRelocationCdpDataTransferMode}"=="iSCSI" 选择iSCSI传输方式 ... ELSE IF "${drRelocationCdpDataTransferMode}"=="FC" 选择FC传输方式 ... ELSE IF "${drRelocationCdpDataTransferMode}"=="OSVI" 选择OSVI传输方式 0 ... ELSE 关闭浏览器 sleep 2s 回迁源磁盘选择_win ${test1} Get Element Count xpath=//*[@id="drRelocationCdpId"]/div[1]/div[6]/div/div/div/div/div/div[2]/table/tbody/tr ${row_num} Evaluate ${test1}+1 Set Test Variable ${row_num} log 选择已保护的磁盘 FOR ${diskno} IN RANGE 1 ${row_num} log ${diskno} 元素点击 xpath=//*[@id="drRelocationCdpId"]/div[1]/div[6]/div/div/div/div/div/div[2]/table/tbody/tr[${diskno}]//td[1] 勾选已保护的分区 定位已保护的分区失败 Continue For Loop END 回迁目标端磁盘选择_win log 选择恢复目标盘 FOR ${a} IN @{disklist_win} 元素点击 //div[text()='磁盘${a}']/../../td[6] 点击目标端选择成功 定位目标端选择失败 sleep 5s Run Keyword If '${a}'=='0' 回迁目标盘选择第一个盘 ... ELSE IF '${a}'=='1' 回迁目标盘选择第二个盘 ... ELSE 回迁目标盘选择第三个盘 END 回迁目标盘选择第一个盘 元素点击 //*[@id="drRelocationCdpTargetDisk"]/option[1] 选择livecd第一个盘成功 选择livecd第一个盘失败 元素点击 //*[@id="drTargetModalId"]/div[2]/button[2] 点击确定按钮成功 定位确定按钮失败 回迁目标盘选择第二个盘 元素点击 //*[@id="drRelocationCdpTargetDisk"]/option[2] 选择livecd第二个盘成功 选择livecd第二个盘失败 元素点击 //*[@id="drTargetModalId"]/div[2]/button[2] 点击确定按钮成功 定位确定按钮失败 回迁目标盘选择第三个盘 元素点击 //*[@id="drRelocationCdpTargetDisk"]/option[2] 选择livecd第一个盘成功 选择livecd第一个盘失败 元素点击 //*[@id="drTargetModalId"]/div[2]/button[2] 点击确定按钮成功 定位确定按钮失败 点击确定回迁按钮 元素点击 //*[@id="drRelocationCdpId"]/div[2]/button[2] 点击确定回迁按钮成功 定位确定回迁按钮失败 元素点击 //a[text()='确定'] 点击确认数据覆盖成功 定位数据覆盖却按钮失败 Wait Until Element Is Visible //*[@id="tipsPop_define_btn"] 60 元素点击 //*[@id="tipsPop_define_btn"] 点击回迁提示却按钮成功 定位回迁提示却按钮失败 自动演练获取list comment 服务列表 ${list} Create List netprofm comment Set Test Variable ${list} 自动演练获取list_lin comment 服务列表 ${list} Create List NetworkManager.service comment Set Test Variable ${list} 回迁作业完成 log 获取作业状态 FOR ${n} IN RANGE 100 ${job_status} Get Text //*[@id="childInfoTableTask"]/div/table/tbody/tr[1]/td[7] log ${job_status} Run Keyword If '${job_status}'=='完成' Exit For Loop ... ELSE IF '${job_status}'=='异常' Exit For Loop ... ELSE IF '${job_status}'=='运行' 回迁作业完成 ... ELSE Exit For Loop sleep 20s END Run Keyword If '${job_status}'=='完成' 回迁作业完成 ... ELSE IF '${job_status}'=='异常' 作业异常 ... ELSE log 其他情况 校验容灾机(外置) [Arguments] ${v_name} ${mem} ${core} ${num} # 容灾机名 | 内存 | CPU核数 | CPU个数 Comment 校验CPU、内存 Open Connection ${DRESXi_IP} 22 SSHLibrary.Login ${DRESXi_user} ${DRESXi_PWD} Log 进入ESXi后台 Write vim-cmd vmsvc/getallvms |grep drvm_${v_name} |awk '{print $1}' | xargs vim-cmd vmsvc/power.getstate | grep Powered |awk '{print $2}' ${output} read delay=5s Should Contain ${output} on Log 容灾机开启成功 Write cat /vmfs/volumes/data3*/drvm_${v_name}*/drvm_${v_name}*.vmx ${output} read delay=5s ${Memery_total} Evaluate ${mem}*1024 Should Contain ${output} memSize = "${Memery_total}" Log 内存设置正确 Should Contain ${output} cpuid.coresPerSocket = "${core}" Log cpu设置正确 Close Connection sleep 5 log 登录容灾机开始校验 sleep 200s Open Connection ${DR_IP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入演练机 Sleep 5s ${recor_content} Execute Command cat /test/A.txt Log 演练机的校验文件内容为:${recor_content} ${compare_result} Run Keyword And Return Status Should Contain ${origin_content} ${recor_content} Run Keyword If ${compare_result}==True Log 校验成功,文本内容一致 ... ELSE Fail 校验失败,文本内容不一致 Log 验证成功 Log 容灾机数据校验成功 Close Connection 校验接管容灾机(外置) [Arguments] ${v_name} ${mem} ${core} ${num} # 容灾机名 | 内存 | CPU核数 | CPU个数 Comment 校验CPU、内存 Open Connection ${DRESXi_IP} 22 SSHLibrary.Login ${DRESXi_user} ${DRESXi_PWD} Log 进入ESXi后台 Write vim-cmd vmsvc/getallvms |grep drvm_${v_name} |awk '{print $1}' | xargs vim-cmd vmsvc/power.getstate | grep Powered |awk '{print $2}' ${output} read delay=5s Should Contain ${output} on Log 容灾机开启成功 Write cat /vmfs/volumes/data3*/drvm_${v_name}*/drvm_${v_name}*.vmx ${output} read delay=5s ${Memery_total} Evaluate ${mem}*1024 Should Contain ${output} memSize = "${Memery_total}" Log 内存设置正确 ${cpu_total} Evaluate ${num} * ${core} Should Contain ${output} numvcpus = "${cpu_total}" Log cpu设置正确 Close Connection sleep 40s Comment 获取接管容灾机文件md5值 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入接管容灾机 sleep 5s ${recor_content} Execute Command cat /test/A.txt Log 演练机的校验文件内容为:${recor_content} ${compare_result} Run Keyword And Return Status Should Contain ${origin_content} ${recor_content} Run Keyword If ${compare_result}==True Log 校验成功,文本内容一致 ... ELSE Fail 校验失败,文本内容不一致 Log 验证成功 Log 容灾机数据校验成功 Close Connection 校验容灾机(异地) log 校验CPU、内存 Open Connection ${Target_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=5s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName} * ${output} read delay=5s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' Log cpu设置正确 Close Connection log 获取生产机文件md5值 sleep 5 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入生产机 write md5sum ${file_path1} ${output} read delay=5s ${text1} Get Substring ${output} 0 32 Log 获取生产机文件md5值 Comment write cat ${drillfile_path} Comment ${output1} read delay=2s Comment ${text2} ${output1} Get Line 9 Comment ${text3} ${text2} Get Substring 13 23 Comment Log 获取演练机IP Close Connection sleep 60s Open Connection ${Add_IPV4_Address_Input} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入演练机 write md5sum ${file_path1} ${output2} read delay=10s ${text4} Get Substring ${output2} 0 32 Log 获取演练机文件md5值 Should Be Equal ${text4} ${text1} Log 验证成功 Close Connection 校验接管容灾机(异地) log w32 Comment 校验CPU、内存 Open Connection ${Target_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=1s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName}* ${output} read delay=1s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' Should Contain ${output} cores='${CPU_Core}' Log cpu设置正确 Close Connection sleep 40s Comment 获取接管容灾机文件md5值 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入接管容灾机 sleep 5s Write md5sum ${file_path1} ${output} read delay=3s ${text1} Get Substring ${output} 0 32 Log 获取接管容灾机文件md5值 Should Be Equal ${text1} ${file_md5} Close Connection Log 容灾机数据校验成功 判断是否驱动注入成功 sleep 20s 元素点击 //span[text()="作业管理"] 作业管理点击成功 作业管理点击失败 元素点击 //*[@id="workManageTableDr"]/div[2]/table/tbody/tr[2]/td[7] 作业详情点击成功 作业详情点击失败 Comment ${status1} Run Keyword And Return Status Wait Until Page Contains Element xpath=//*[@id="drWorkDetails"]//span[contains(text(),"正在进行兼容性处理")] 5s 详情页面获取失败 ${status2} Run Keyword And Return Status Wait Until Page Contains Element xpath=//*[@id="drWorkDetails"]//span[contains(text(),"兼容性处理结束")] 5s 详情页面获取失败 Run Keyword If '${status2}' == 'True' log 驱动1注入成功 ... ELSE log 驱动注入失败 ... AND 关闭浏览器 sleep 2s 元素点击 //*[@id="drWorkManageChildId"]/div[2]/button 关闭详情页成功 关闭详情页失败 sleep 2s 元素点击 //span[text()="策略管理"] 策略管理点击成功 策略管理点击失败 创建容灾策略(异地) [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Target_BC_IP} ${SourceType} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} 创建容灾策略_异地 [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${Network_Configuration} ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 sleep 3s 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Target_BC_IP} ${SourceType} ${Network_Configuration} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Target_BC_IP} ${DR_Type} ${Source} 校验接管容灾机_win(异地) log w32 Comment 校验CPU、内存 Open Connection ${Target_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 sleep 5s Write virsh list --name ${output} read delay=1s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName}* ${output} read delay=1s ${Memery_total} Evaluate ${Memory}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${CPU_Num}' Should Contain ${output} cores='${CPU_Core}' Log cpu设置正确 Close Connection sleep 40s Comment 获取接管容灾机文件md5值 Open Connection ${Agent_HostIP_win} 22 SSHLibrary.Login ${Agent_User_win} ${Agent_Pwd_win} Log 进入接管容灾机 Start Command ${Windows_Python_Path} MD5.py Sleep 3s ${recor_content} Read Command Output Log 恢复机的校验文件内容为:${recor_content} ${compare_result} Run Keyword And Return Status Should Contain ${origin_content} ${recor_content} Run Keyword If ${compare_result}==True Log 校验成功,文本内容一致 ... ELSE Fail 校验失败,文本内容不一致 Log 验证成功 Close Connection Log 容灾机数据校验成功 回迁源磁盘选择_lin [Arguments] ${ip} ${user} ${pwd} ${disklist_lin} # ip地址 | 用户名 | 密码 Comment Open Connection ${ip} Comment SSHLibrary.Login ${user} ${pwd} Comment Log 进入linux后台 Comment Sleep 3s Comment Write cd ${Linuxdisk_xml_Path} Comment Sleep 3s Comment Write ${Linux_Python_Path} getdisk_linux.py Comment ${output1} Read delay=5s Comment ${output2} Get Line ${output1} 0 Comment Log ${output2} Comment ${disklist_lin} Evaluate list(${output2}) Comment Set Test Variable ${disklist_lin} Log ${disklist_lin} Comment Close Connection log 选择已保护的磁盘 FOR ${diskno} IN @{disklist_lin} log ${diskno} 元素点击 xpath=//td[@data-content="${diskno}"]/../td[1]/div/div/i 勾选已保护的分区 定位已保护的分区失败 Continue For Loop END [Teardown] 回迁目标端磁盘选择_lin [Arguments] ${ip} ${user} ${pwd} ${disklist_lin} # ip地址 | 用户名 | 密码 Comment log 获取盘符 Comment Open Connection ${ip} Comment SSHLibrary.Login ${user} ${pwd} Comment Log 进入linux后台 Comment Sleep 3s Comment Write cd ${Linuxdisk_xml_Path} Comment Sleep 3s Comment Write ${Linux_Python_Path} getdisk_linux.py Comment ${output1} Read delay=5s Comment ${output2} Get Line ${output1} 0 Comment Log ${output2} Comment ${disklist_lin} Evaluate list(${output2}) Comment Set Test Variable ${disklist_lin} Log ${disklist_lin} log 选择恢复目标盘 FOR ${a} IN @{disklist_lin} 元素点击 //div[text()='${a}']/../../td[6]/div/a 点击目标端选择成功 定位目标端选择失败 sleep 5s log ${a} 元素点击 //*[@id="drRelocationCdpTargetDisk"] 选择目标磁盘列表成功 选择目标磁盘列表失败 Run Keyword If '${a}'=='/dev/sda' 回迁目标盘选择第一个盘 ... ELSE IF '${a}'=='/dev/sdb' 回迁目标盘选择第二个盘 ... ELSE 回迁目标盘选择第三个盘 END 自定义网络配置_esxi Wait Until Element Is Visible ${Network_Config} 60 元素点击 ${Network_Config} 网络配置 点击网络配置失败 元素点击 xpath=//*[@id="addPolicyDrNetworkConfigCDP"]/option[contains(text(),"自定义网络配置")] 选择自定义网络配置模式 自定义网络配置模式失败 元素点击 ${Network_Add} 添加网卡 添加网卡失败 元素点击 ${Select_Network} 点击网络 网络点击失败 log //select [@ng-model="addBridgeObj.network"]/option[contains(text(),"${Select_Network_Configuration_esxi}")] 元素点击 xpath=//select [@ng-model="addBridgeObj.network"]/option[contains(text(),"${Select_Network_Configuration_esxi}")] 选择网络 选择网络失败 元素点击 ${Select_Network_Adapter} 点击网络适配器 网络适配器选择失败 元素点击 xpath=//select [@ng-model="addBridgeObj.networkAdapter"]/option[contains(text(),"${Select_Network_Adapter_Configuration_esxi}")] 选择网络适配器 选择网络适配器失败 Wait Until Element Is Visible ${Add_IPV4_Address} 30 元素输入 ${Add_IPV4_Address} ${Add_IPV4_Address_Input} 定位IPV4地址输入框失败 元素输入 ${Add_IPV4_SubnetMask} ${Add_IPV4_SubnetMask_Input} 定位IPV4子网掩码输入框失败 元素输入 ${Add_IPV4_Gateway} ${Add_IPV4_Gateway_Input} 定位IPV4网关输入框失败 元素输入 ${Add_IPV6_Address} ${Add_IPV6_Address_Input} 定位IPV6地址输入框失败 元素输入 ${Add_IPV6_SubnetMask} ${Add_IPV6_SubnetMask_Input} 定位IPV6子网掩码输入框失败 元素输入 ${Add_IPV6_Gateway} ${Add_IPV6_Gateway_Input} 定位IPV6网关输入框失败 元素输入 ${Add_FirstDNS} ${Add_FirstDNS_Input} 定位首选DNS输入框失败 元素输入 ${Add_SecondDNS} ${Add_SecondDNS_Input} 定位备选DNS输入框失败 元素点击 ${Click_Sure_Button} 点击确认按钮 确认按钮点击失败 容灾机配置_外置 [Arguments] ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${ChannelIP} ${SourceType} Run Keyword If '${SourceType}'=='实时备份数据' Run Keywords Select PolicyDrMachineType ${PDM_Type} ... AND Log 选择容灾机类型 log 是否手动创建容灾机 sleep 5s 元素点击 ${Btn_Init} 自动创建容灾机 手动创建容灾机按钮定位失败 sleep 5s Select DrPlatform ${Plafrom} Log 选择容灾平台 元素输入 ${Input_Policy_CoreNumberCPU} ${coreCPU} CPU核心数元素获取失败 元素输入 ${Input_Policy_NumberCPU} ${numberCPU} CPU个数定位失败 元素输入 ${Input_Policy_Memory} ${Memory} 内存容量定位失败 Comment Run Keyword If '${Network_Configuration_default}'=='保持原有网络配置' 保持原有网络配置_esxi ... ELSE IF '${Network_Configuration_default}'=='自定义网络配置' 自定义网络配置_esxi Select ServerChannelIP ${ChannelIP} Log 设置服务端通道IP Run Keyword If "${Plafrom}"=="10.10.15.229" 修改容灾机高级选项_外置 ${Agent_name} 元素点击 ${Add_Policy_step3} 容灾机配置下一步点击成功 下一步获取失败 保持原有网络配置_esxi 元素点击 ${Network_Config} 网络配置 点击网络配置失败 元素点击 xpath=//*[@id="addPolicyDrNetworkConfigCDP"]/option[contains(text(),"${Network_Configuration_default}")] 选择保持原有网络配置 保持原有网络配置模式失败 Comment 元素点击 //*[@id="addPolicyDrNetworkConfigCDP"]/../div[1]/span[1] 选择刷新网络网络配置 刷新网络配置失败 Run Keyword If '${SourceType}'=='实时备份数据' Run Keywords Select NetWork ${Select_Network_Configuration_esxi} ... AND Select NetWorkAdapter ${Select_Network_Adapter_Configuration_esxi} ... ELSE IF '${SourceType}'=='虚拟化快照数据' Run Keywords 元素点击 ${Btn_AddNetWork} 点击添加网络成功 添加网路定位失败 ... AND Select NetWork2 ${Network} ... AND Select NetWorkAdapter2 ${NetworkAdp} ... AND 元素点击 xpath=//*[@id="addPolicyDrNetworkVirtualModal"]/div[2]/button[2] 网络添加成功 网络添加失败 校验容灾机(外置)_md5 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入生产机 write md5sum ${file_path1} ${output} read delay=5s ${text1} Get Substring ${output} 0 32 Close Connection Log 获取生产机文件md5值 Open Connection ${Add_IPV4_Address_Input} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入演练机 write md5sum ${file_path1} ${output2} read delay=10s ${text4} Get Substring ${output2} 0 32 Log 获取演练机文件md5值 Should Be Equal ${text4} ${text1} Log 验证成功 Close Connection 指定时间点 Comment Open Connection ${DR_BC_IP} Comment SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Comment Log 获取服务器时间 Comment Write date +"%Y-%m-%d %H:%M:%S" Comment ${time1} Read delay=2s Comment ${time} Get Line ${time1} 0 Comment Close Connection 元素点击 ${Click_DrPolicy_LatestTimePoint} 选择最近时间点 选择最近时间点失败 ${time1} Get Text //*[@id="drTakeOverRehearseId"]/div[1]/div[9]/div ${time2} Add Time To Date ${time1} -00:01:00 ${time} Get Substring ${time2} 0 19 Comment ${time} Convert Date ${time2} exclude_millis=yes date_format=%m.%d.%Y %H:%M:%S 元素点击 ${Click_DrPolicy_TimePoint} 选择容灾数据时间点 容灾数据时间点定位失败 sleep 2s 元素点击 ${Click_DrPolicy_ChoiceTime} 选择时间点成功 选择时间点定位失败 sleep 2s 元素输入 xpath=//*[@id="takeOverRehearseSelectTime"] ${time} 输入时间 元素点击 ${Click_DrPolicy_ChoiceTime} 选择时间点成功 选择时间点定位失败 元素点击 //span[text()='清空']/../span[text()="确定"] 点击确定成功 定位确定失败 Sleep 2s 元素点击 ${Click_DrPolicy_ChoiceTime} 选择时间点1成功 选择时间点1定位失败 sleep 2s Clear Element Text xpath=//*[@id="takeOverRehearseSelectTime"] sleep 60s Comment 等待60s模拟指定1分钟前的时间点 元素输入 xpath=//*[@id="takeOverRehearseSelectTime"] ${time} 输入时间 sleep 2s 元素输入 xpath=//*[@id="takeOverRehearseSelectTime"] ${time} 输入时间 sleep 2s 自动接管获取list comment 服务列表 ${list} Create List netprofm comment Set Test Variable ${list} 自动接管策略创建完成状态 [Arguments] ${PolicyName} sleep 10s ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="创建中" 自动接管策略创建完成状态 ${PolicyName} ... ELSE IF '${temp}'=="断开" log 自动接管策略创建完成 ... ELSE 关闭浏览器 生产机关闭服务_win [Arguments] ${ip} ${user} ${pwd} # ip地址|用户名|密码 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Log 生产机关闭主题服务 Start Command chcp 65001 sleep 3s Execute Command net stop netprofm sleep 5s Close Connection 等待生产机关机_win [Arguments] ${IP} Comment 如果online进行关机,否则执行策略 Log 查看生产机的状态 Open Connection ${DR_BC_IP} 22 SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 进入黑方后台 Write ping \ '${IP}' ${output} read delay=30s ${text2} Get Line ${output} 1 Close Connection ${flag} Evaluate 'Destination Host Unreachable' in $text2 Run Keyword If ${flag} log 生产机已关机 ... ELSE 等待生产机关机_win ${IP} 自动接管开始_win [Arguments] ${PolicyName} FOR ${n} IN RANGE 20 Sleep 150s Wait Until Element Is Visible xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] 10s 定位状态失败 ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="连接" EXIT FOR LOOP END Sleep 180s 创建接管策略_win_异地 [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源_win ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 Comment 接管机配置 ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${SourceType} ${Network_Configuration_default} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${DR_Type} ${Source} 校验容灾机_win(外置) [Arguments] ${v_name} ${mem} ${core} ${num} # 容灾机名 | 内存 | CPU核数 | CPU个数 Comment 校验CPU、内存 Open Connection ${DRESXi_IP} 22 SSHLibrary.Login ${DRESXi_user} ${DRESXi_PWD} Log 进入ESXi后台 Write vim-cmd vmsvc/getallvms |grep drvm_${v_name} |awk '{print $1}' | xargs vim-cmd vmsvc/power.getstate | grep Powered |awk '{print $2}' ${output} read delay=5s Should Contain ${output} on Log 容灾机开启成功 Write cat /vmfs/volumes/data3/drvm_${v_name}*/drvm_${v_name}*.vmx ${output} read delay=5s ${Memery_total} Evaluate ${mem}*1024 Should Contain ${output} memSize = "${Memery_total}" Log 内存设置正确 ${cpu_total} Evaluate ${num} * ${core} Should Contain ${output} numvcpus = "${cpu_total}" Log cpu设置正确 Close Connection Comment 获取容灾机文件md5值 Open Connection ${Add_IPV4_Address_Input} 22 SSHLibrary.Login ${Agent_User_win} ${Agent_Pwd_win} Log 进入接管容灾机 Start Command ${Windows_Python_Path} MD5.py Sleep 3s ${recor_content} Read Command Output Log 恢复机的校验文件内容为:${recor_content} ${compare_result} Run Keyword And Return Status Should Contain ${origin_content} ${recor_content} Run Keyword If ${compare_result}==True Log 校验成功,文本内容一致 ... ELSE Fail 校验失败,文本内容不一致 Log 验证成功 Close Connection Log 容灾机数据校验成功 校验接管容灾机_win(外置) [Arguments] ${v_name} ${mem} ${core} ${num} # 容灾机名 | 内存 | CPU核数 | CPU个数 Comment 校验CPU、内存 Open Connection ${DRESXi_IP} 22 SSHLibrary.Login ${DRESXi_user} ${DRESXi_PWD} Log 进入ESXi后台 Write vim-cmd vmsvc/getallvms |grep drvm_${v_name} |awk '{print $1}' | xargs vim-cmd vmsvc/power.getstate | grep Powered |awk '{print $2}' ${output} read delay=5s Should Contain ${output} on Log 容灾机开启成功 Write cat /vmfs/volumes/data3/drvm_${v_name}*/drvm_${v_name}*.vmx ${output} read delay=5s ${Memery_total} Evaluate ${mem}*1024 Should Contain ${output} memSize = "${Memery_total}" Log 内存设置正确 ${cpu_total} Evaluate ${num} * ${core} Should Contain ${output} numvcpus = "${cpu_total}" Log cpu设置正确 Close Connection sleep 40s Comment 获取接管容灾机文件md5值 Open Connection ${Agent_HostIP_win} 22 SSHLibrary.Login ${Agent_User_win} ${Agent_Pwd_win} Log 进入接管容灾机 Start Command C:\\Agent\\ubackup\\uagent\\bin\\Python27\\python MD5.py Sleep 3s ${recor_content} Read Command Output Log 恢复机的校验文件内容为:${recor_content} ${compare_result} Run Keyword And Return Status Should Contain ${origin_content} ${recor_content} Run Keyword If ${compare_result}==True Log 校验成功,文本内容一致 ... ELSE Fail 校验失败,文本内容不一致 Log 验证成功 Close Connection Log 容灾机数据校验成功 创建容灾策略_win(default) [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源_win ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} ${Network_Configuration_default} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} 创建容灾策略_lin(default) [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置_外置 ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} comment 容灾机模式 容灾机模式配置_Lin ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} Sleep 100s 自动接管开始_lin [Arguments] ${PolicyName} FOR ${n} IN RANGE 20 Sleep 150s Wait Until Element Is Visible xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] 10s 定位状态失败 ${temp} Get Text xpath=//*[@id="disasterTable"]//tr[td[text()="${PolicyName}"]]//td[4] Run Keyword If '${temp}'=="连接" EXIT FOR LOOP END Sleep 180s 自动接管获取list_lin comment 服务列表 ${list} Create List NetworkManager.service comment Set Test Variable ${list} 生产机关闭服务_lin [Arguments] ${ip} ${user} ${pwd} # ip地址|用户名|密码 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Log 生产机关闭NetworkManager服务 Execute Command service NetworkManager.service stop sleep 5s Close Connection 创建容灾策略_win(default异地) [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源_win ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${SourceType} ${Network_Configuration_default} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${DR_Type} ${Source} sleep 360s 创建容灾策略_lin(default异地) [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置_外置 ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${SourceType} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${DR_Type} ${Source} 创建容灾策略_default [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${DR_BC_IP} ${SourceType} ${Network_Configuration_default} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} 创建接管策略_lin_异地 [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} 鉴权 comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 Comment 接管机配置 ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${SourceType} ${Network_Configuration_default} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer_dest} ${DR_Type} ${Source} 渐进式回迁方式_lin [Arguments] ${ip} ${user} ${pwd} ${drRelocationCdpPropertyWayList} ${drRelocationCdpDataTransferMode} ${PolicyName} #livecd ip |livecd 用户名| livecd密码 |回迁方式 |数据传输模式|分区名称|磁盘名称 sleep 20s Comment 元素点击 ${Click_More} 点击更多按钮成功 定位更多元素失败 元素点击 xpath=//td[text()='${PolicyName}']/../td[9]//span[text()='更多'] 点击更多按钮成功 定位更多元素失败 元素点击 //*[@id="app"]/ul/li[2] 点击回迁按钮成功 点击回迁按钮失败 sleep 10s 元素点击 //*[@id="drRelocationCdpTargetMachine"] 点击选择目标机成功 点击选择目标机失败 元素点击 //option[text()='livecd.${LIVECD_IP}'] 选择目标livecd成功 定位目标livecd失败 元素点击 //*[@id="drRelocationCdpPropertyWayList"] 点击选择回迁方式成功 定位选择回迁方式失败 Run Keyword If "${drRelocationCdpPropertyWayList}"=="渐进式回迁" 选择渐进式回迁 ... ELSE IF "${drRelocationCdpPropertyWayList}"=="仅恢复增量数据" 选择仅恢复增量数据回迁 元素点击 //*[@id="drRelocationCdpDataTransferMode"] 选择数据传输选择框成功 定位数据传输选择框失败 Run Keyword If "${drRelocationCdpDataTransferMode}"=="iSCSI" 选择iSCSI传输方式 ... ELSE IF "${drRelocationCdpDataTransferMode}"=="FC" 选择FC传输方式 ... ELSE IF "${drRelocationCdpDataTransferMode}"=="OSVI" 选择OSVI传输方式 0 ... ELSE 关闭浏览器 sleep 2s 创建接管策略_lin [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置(正确) ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${DR_BC_IP} ${SourceType} ${Network_Configuration_default} comment 容灾机模式 容灾机模式配置_win ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} 自动演练配置_自动循环模式win 元素点击 ${Auto_Drill_Time_Hour} 点击小时成功 自动演练定位小时失败 元素输入 ${Auto_Drill_Time_Hour_Input1} 1 输入1小时成功 自动演练配置_自动循环模式_设置时间_win 自动演练配置_自动循环模式_设置时间_win Open Connection ${DR_BC_IP} SSHLibrary.Login ${DR_BC_Name} ${DR_BC_PWD} Log 获取服务器时间 Write date \ -d "5 minutes" +"%Y-%m-%d %H:%M:%S"\n ${time1} Read delay=2s ${time} Get Line ${time1} 0 Close Connection Clear Element Text ${Auto_Drill_Time_Hour_StartTime} sleep 2s 元素输入 ${Auto_Drill_Time_Hour_StartTime} ${time} 输入时间 容灾机模式配置_Lin [Arguments] ${Mode} ${Auto_Switch} ${list} ${Auto_Type} Select DRMode ${Mode} log ${Mode} Log 设置容灾机模式 Run Keyword If '${Auto_Switch}'=="是" and '${Mode}'=="演练模式" 自动演练配置lin_仅一次 ${list} ${Auto_Type} ... ELSE IF '${Auto_Switch}'=="是" and '${Mode}'=="接管模式" 自动接管配置 ${list} ${Auto_Type} ... ELSE 完成容灾模式配置 自动演练配置lin_仅一次 [Arguments] ${list} ${Auto_Type} 元素点击 ${Add_Policy_AutoSwitch} 开启自动演练成功 自动演练开启按钮获取失败 sleep 10s Run Keyword If '${Auto_Type}'=='脚本' 选择脚本文件_lin ... ELSE IF '${Auto_Type}'=='服务' 自动演练服务选择 ${list} 完成容灾模式配置 选择脚本文件_lin 元素点击 ${DR_AutoDrill_ChooseScript} 点击选择脚本文件按钮成功 选择脚本按钮元素获取失败 元素点击 ${DR_AutoDrill_ChooseScript_7sh} 选择linux脚本文件成功 选择linux脚本文件元素获取失败 元素点击 ${Button_DR_AutoDrill_ChooseScript_Comfirm} 脚本选择导入成功 获取导入按钮元素失败 自动演练配置lin_小时 [Arguments] ${list} ${Auto_Type} 元素点击 ${Add_Policy_AutoSwitch} 开启自动演练成功 自动演练开启按钮获取失败 sleep 10s Run Keyword If '${Auto_Type}'=='脚本' 选择脚本文件_lin ... ELSE IF '${Auto_Type}'=='服务' 自动演练服务选择 ${list} 自动演练配置_自动循环模式win 完成容灾模式配置 容灾机模式配置_Lin_小时 [Arguments] ${Mode} ${Auto_Switch} ${list} ${Auto_Type} Select DRMode ${Mode} log ${Mode} Log 设置容灾机模式 Run Keyword If '${Auto_Switch}'=="是" and '${Mode}'=="演练模式" 自动演练配置lin_小时 ${list} ${Auto_Type} ... ELSE IF '${Auto_Switch}'=="是" and '${Mode}'=="接管模式" 自动接管配置 ${list} ${Auto_Type} ... ELSE 完成容灾模式配置 创建容灾策略_lin(default)_按小时 [Arguments] ${PolicyName} ${SourceType} ${DataSource} ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${list} ${Auto_Switch} ${DrMode} ${DR_Type} ${Source} ${Auto_Type} ... ${DrPlatformType}='' ${DrVirtualHostInCDR}='' ${AgentTiming}='' #数据源类型|数据源|容灾平台类型|容灾平台|cpu内核|cpu数|内存|网络|网络适配器|服务列表|是否自动演练/接管|容灾模式|容灾类型 sleep 3s 元素点击 ${Btn_Add_Drpolicy} 点击创建容灾策略成功 创建容灾策略点击失败 元素输入 ${Input_DrPolicyName} ${PolicyName} 获取容灾策略名输入元素失败 comment 数据源类型 数据源 选择数据源 ${SourceType} ${DataSource} ${DrPlatformType} ${DrVirtualHostInCDR} ${AgentTiming} comment 容灾机类型 容灾平台 cpu核心数 cpu个数 内存 网络 网络适配器 服务端通道 容灾机配置_外置 ${PDM_Type} ${Plafrom} ${coreCPU} ${numberCPU} ${Memory} ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${SourceType} comment 容灾机模式 容灾机模式配置_Lin_小时 ${DrMode} ${Auto_Switch} ${list} ${Auto_Type} 容灾策略预览 ${PolicyName} ${Plafrom} ${coreCPU} ${numberCPU} 服务列表 ${Network} ${NetworkAdp} ${Data_Address_Transfer} ${DR_Type} ${Source} Sleep 300s 验证容灾机配置与高级选项_内置 [Arguments] ${IP} ${USER} ${PWD} ${PName} ${C_Num} ${C_Core} ${Mem} ${CPU_Model} ${GC} # 黑方IP|黑方用户名|黑方密码|容灾策略名|CPU个数|CPU核数|内存大小|CPU型号|显卡型号 Open Connection ${IP} 22 SSHLibrary.Login ${USER} ${PWD} Log 进入黑方后台 Write virsh list --name ${output} read delay=5s Should Contain ${output} ${PName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PName}* ${output} read delay=5s ${Memery_total} Evaluate ${Mem}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 Should Contain ${output} sockets='${C_Num}' Log cpu设置正确 Should Contain ${output} cpu mode='${CPU_Model}' Log cpu型号正确 Should Contain ${output} model type='${GC}' Log 显卡型号正确 Close Connection 容灾机内校验配置_win [Arguments] ${IP} ${USER} ${PWD} ${C_Num} ${C_Core} ${Mem} # IP|用户名|密码|CPU个数|CPU核数|内存大小 Sleep 30s Open Connection ${IP} 22 SSHLibrary.Login ${USER} ${PWD} Log 进入容灾机后台 Start Command chcp 65001 Start Command Systeminfo Sleep 10s Comment Start Command PowerShell -Command "type tmp.txt | Out-File -Encoding "utf8" sysinfo.txt" Comment Start Command findstr /c:"${C_Num} 个处理器" sysinfo.txt ${output} Read Command Output Log 校验CPU数是否正确 ${result} Run Keyword And Return Status Should Contain ${output} ${C_Num} Processor Run Keyword If ${result}==True log CPU数正确 ... ELSE fail CPU数错误 ${tmp1} Evaluate ${Mem}*1024 ${tmp} Evaluate str(${tmp1}) ${text1} Get Substring ${tmp} 0 1 ${text2} Get Substring ${tmp} 1 ${Memory_total} Catenate SEPARATOR= ${text1} , ${text2} Log 校验内存大小是否正确 ${result} Run Keyword And Return Status Should Contain ${output} Total Physical Memory: \ \ \ \ ${Memory_total} MB Run Keyword If ${result}==True log 内存正确 ... ELSE fail 内存错误 Close Connection 修改容灾机配置和高级选项 [Arguments] ${Name} ${C_Num} ${C_Core} ${Mem} ${GC} # 代理名|CPU个数|CPU核数|内存大小|显卡型号 元素点击 xpath=//*[@id="disasterTable"]//td[text()="${Name}"]/../td[9]/div/span[3] 点击策略更多成功 定位策略更多失败 元素点击 xpath=//*[@id="app"]//li[text()="容灾机配置"] 点击容灾机配置成功 定位容灾机配置失败 元素点击 xpath=//*[@id="senior_edit"]/i 点击高级选项成功 定位高级选项失败 元素输入 ${Edit_CPU_Core} ${C_Core} CPU核心数元素获取失败 元素输入 ${Edit_CPU_Num} ${C_Num} CPU个数定位失败 元素输入 ${Edit_Memery} ${Mem} 内存容量定位失败 Select From List By Label xpath=//*[@id="editPolicyDrId"]/div[1]/div[3]/div[3]/div[2]/div[5]/div/select ${GC} 元素点击 xpath=//*[@id="editPolicyDrId"]/div[2]/button[2] 点击确定成功 定位确定失败 元素点击 xpath=//*[@id="tipsPop_define_btn"] 点击确定成功 定位确定失败 验证容灾机配置与高级选项_外置 [Arguments] ${IP} ${USER} ${PWD} ${v_Name} ${num} ${core} ${mem} ${v_hw_v} # 黑方IP|黑方用户名|黑方密码|容灾策略名|CPU个数|CPU核数|内存大小|虚拟机硬件版本 Open Connection ${IP} 22 SSHLibrary.Login ${USER} ${PWD} Log 进入ESXi后台 Write vim-cmd vmsvc/getallvms |grep drvm_${v_name} |awk '{print $1}' | xargs vim-cmd vmsvc/power.getstate | grep Powered |awk '{print $2}' ${output} read delay=5s Should Contain ${output} on Log 容灾机开启成功 Write cat /vmfs/volumes/data/drvm_${v_name}*/drvm_${v_name}*.vmx ${output} read delay=5s ${Memery_total} Evaluate ${mem}*1024 Should Contain ${output} memSize = "${Memery_total}" Log 内存设置正确 ${cpu_total} Evaluate ${num} * ${core} Should Contain ${output} vcpu.maxPerVirtualNode = "${cpu_total}" Log cpu设置正确 Should Contain ${output} virtualHW.version = "${v_hw_v}" Log 虚拟机硬件类型正确 Close Connection 容灾机内校验配置_lin [Arguments] ${IP} ${USER} ${PWD} ${C_Num} ${C_Core} ${Mem} # IP|用户名|密码|CPU个数|CPU核数|内存大小 Sleep 30s Open Connection ${IP} 22 SSHLibrary.Login ${USER} ${PWD} Log 进入容灾机后台 Write lscpu ${output} Read delay=2s Log 校验CPU数是否正确 ${result} Run Keyword And Return Status Should Contain ${output} CPU(s): ${C_Num} Run Keyword If ${result}==True log CPU数正确 ... ELSE fail CPU数错误 ${tmp1} Evaluate ${Mem}*1024 ${Memory_total} Evaluate str(${tmp1}) Log 校验内存大小是否正确 Write dmidecode|grep -P -A5 "Memory\\s+Device"|grep Size|grep -v Range |grep -v "No Module Installed" ${output} Read delay=5s ${result} Run Keyword And Return Status Should Contain ${output} Size: ${Memory_total} MB Run Keyword If ${result}==True log 内存正确 ... ELSE fail 内存错误 Close Connection 修改容灾机配置和高级选项_外置 [Arguments] ${Name} ${C_Num} ${C_Core} ${Mem} ${v_hw_v} # 代理名|CPU个数|CPU核数|内存大小|虚拟机硬件版本 元素点击 xpath=//*[@id="disasterTable"]//td[text()="${Name}"]/../td[9]/div/span[3] 点击策略更多成功 定位策略更多失败 元素点击 xpath=//*[@id="app"]//li[text()="容灾机配置"] 点击容灾机配置成功 定位容灾机配置失败 元素点击 xpath=//*[@id="senior_edit"]/i 点击高级选项成功 定位高级选项失败 元素输入 ${Edit_CPU_Core} ${C_Core} CPU核心数元素获取失败 元素输入 ${Edit_CPU_Num} ${C_Num} CPU个数定位失败 元素输入 ${Edit_Memery} ${Mem} 内存容量定位失败 Select From List By Label xpath=//*[@id="editPolicyDrId"]/div[1]/div[3]/div[3]/div[3]/div[1]/div/select vmx-${v_hw_v} 元素点击 xpath=//*[@id="editPolicyDrId"]/div[2]/button[2] 点击确定成功 定位确定失败 Sleep 5s 元素点击 xpath=//*[@id="tipsPop_define_btn"] 点击确定成功 定位确定失败 自动演练获取list_ubuntu comment 服务列表 ${list} Create List ufw comment Set Test Variable ${list} 自动接管获取list_ubuntu comment 服务列表 ${list} Create List ufw comment Set Test Variable ${list} 生产机关闭服务_ubuntu [Arguments] ${ip} ${user} ${pwd} # ip地址|用户名|密码 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Log 生产机关闭ufw服务 Execute Command service ufw stop sleep 5s Close Connection 登录CAS [Arguments] ${IPaddress} ${login_name} ${login_pwd} # 黑方服务器IP地址 \| 登录名称 \| 登录密码 Open Browser ${IPaddress} ff Sleep 2s Set Window Size 1920 1080 Log 切换浏览器窗口 1920*1080 Wait Until Element Is Visible //div[contains(text(),"新华三")] 60s 浏览器打开失败 Sleep 5s 元素输入 //label[text()='用户名']/../div/div/input ${login_name} 定位用户名输入框失败 元素输入 //label[text()='密码']/../div/div/input ${login_pwd} 定位用户密码输入框失败 元素点击 //span[text()='登 录']/.. 点击登录成功 定位登录失败 Sleep 2s ${flag} Run Keyword And Return Status Wait Until Element Is Visible //span[contains(text(),"以后再说")] Run Keyword If "${flag}"=="True" Run Keywords 元素点击 //span[contains(text(),"以后再说")] 点击以后再说成功 定位以后再说失败 ... AND 元素点击 //span[contains(text(),"以后再说")] 点击以后再说成功 定位以后再说失败 Wait Until Page Contains Element //p[text()='${login_name}'] 60s 用户登录失败 Log ${login_name}登录成功 Sleep 5s 修改CAS虚拟机内存优先级 [Arguments] ${pname} 元素点击 //div[contains(text(),"云资源")] 点击云资源成功 定位云资源失败 元素点击 //span[contains(text(),"${pname}")] 点击容灾机成功 定位容灾机失败 元素点击 //span[contains(text(),"快照管理")]/../../button[4] 点击修改成功 定位修改失败 Sleep 5s 元素点击 //*[@id="tab-memory"] 点击内存成功 定位内存失败 元素点击 //label[text()='限制']/../../../div[3]/div/div/div/i 展开高级设置成功 定位展开高级设置失败 元素点击 //label[text()='资源优先级']/../div/div/div/input 点击资源优先级下拉框成功 定位资源优先级下拉框失败 元素点击 //span[text()='高'] 选择高优先级成功 定位高优先级失败 元素点击 //span[text()='应用'] 点击应用成功 定位应用失败 Sleep 3s 修改容灾机高级选项_外置 [Arguments] ${Name} # 代理名 元素点击 xpath=//*[@id="senior"]/i 点击高级选项成功 定位高级选项失败 Select From List By Label xpath=//*[@id="dr_addPolicy_addPolicyDr_diskController_sel"] pvscsi 校验容灾机_CAS [Arguments] ${v_name} ${mem} ${core} ${num} # 容灾机名 | 内存 | CPU核数 | CPU个数 Comment 校验CPU、内存 sleep 300s Open Connection ${H3C_CAS_IP} 22 timeout=30 SSHLibrary.Login ${H3C_CAS_ROOT} ${H3C_CAS_ROOTPWD} Log 进入CAS后台 Write virsh list --name ${output} read delay=5s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName}* ${output} read delay=5s ${Memery_total} Evaluate ${mem}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 ${cpu_total} Evaluate ${num} * ${core} Should Contain ${output} cores='${core}' Log cpu设置正确 Close Connection sleep 5s log 登录容灾机开始校验 Open Connection ${DR_IP} 22 timeout=30 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} 20s Log 进入演练机 Sleep 5s ${recor_content} Execute Command cat /test/A.txt Log 演练机的校验文件内容为:${recor_content} ${compare_result} Run Keyword And Return Status Should Contain ${origin_content} ${recor_content} Run Keyword If ${compare_result}==True Log 校验成功,文本内容一致 ... ELSE Fail 校验失败,文本内容不一致 Log 验证成功 Log 容灾机数据校验成功 Close Connection 校验接管容灾机_CAS [Arguments] ${v_name} ${mem} ${core} ${num} # 容灾机名 | 内存 | CPU核数 | CPU个数 Comment 校验CPU、内存 Open Connection ${H3C_CAS_IP} 22 SSHLibrary.Login ${H3C_CAS_ROOT} ${H3C_CAS_ROOTPWD} Log 进入CAS后台 Write virsh list --name ${output} read delay=5s Should Contain ${output} ${PolicyName} Log 容灾机开启成功 Write cd /etc/libvirt/qemu Write cat *${PolicyName}* ${output} read delay=5s ${Memery_total} Evaluate ${mem}*1024*1024 Should Contain ${output} ${Memery_total} Log 内存设置正确 ${cpu_total} Evaluate ${num} * ${core} Should Contain ${output} cores='${core}' Log cpu设置正确 Close Connection sleep 40s Comment 获取接管容灾机文件md5值 Open Connection ${Agent_HostIP} 22 SSHLibrary.Login ${Agent_User} ${Agent_Pwd} Log 进入接管容灾机 sleep 5s ${recor_content} Execute Command cat /test/A.txt Log 演练机的校验文件内容为:${recor_content} ${compare_result} Run Keyword And Return Status Should Contain ${origin_content} ${recor_content} Run Keyword If ${compare_result}==True Log 校验成功,文本内容一致 ... ELSE Fail 校验失败,文本内容不一致 Log 验证成功 Log 容灾机数据校验成功 Close Connection