robotframework-demo/Project/task4/Resource/RE5_DR/KeyWords.robot

2202 lines
124 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

*** Settings ***
Library 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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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} <memory unit='KiB'>${Memery_total}</memory>
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