*** Settings *** Library Selenium2Library Resource ElementPath.robot Resource ../RE0_Common/KeyWord.robot Library SSHLibrary Library ../../Script/SC0_Common/00_Initial/Vsphere.py Library String Library BuiltIn Resource ../RE7_Storage/KeyWord.robot Resource ../RE3_DPM/File_KeyWord.robot Library DatabaseLibrary Resource ../RE7_Storage/KeyWord.robot *** Variables *** *** Keywords *** 关闭防火墙 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} # 黑方IP|黑方后台登录名|黑方后台登录密码 Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 Execute Command service iptables stop Log 黑方防火墙关闭 Close Connection 设置密码永久有效 [Arguments] ${bc_ip} # 黑方ip地址 change_expiretime ${bc_ip} 编辑信息 [Arguments] ${UserEmail} ${UserTel} # 用户邮箱|用户电话号码 [Documentation] 功能:点击用户信息,编辑用户邮箱和手机号码 ... ... 使用方法:编辑信息 \ 用户邮箱 \ 用户电话号码 ... ... 变量:${UserEmail} \ ${UserTel} 元素点击 ${A_UserName} 点击用户信息按钮 定位用户信息按钮失败 元素点击 ${User_Info} 点击个人信息 定位个人信息按钮失败 元素输入 ${UserDetailModel_UserEmail} ${UserEmail} 定位用户邮件输入框失败 元素输入 ${UserDetailModel_UserTel} ${UserTel} 定位用户电话输入框失败 元素点击 ${UserDetailModel_ConFirm} 点击确定按钮 定位确定按钮失败 元素点击 ${UserDetailModel_ConFirm_OK} 点击信息修改成功确定按钮 定位信息修改成功确定按钮失败 登录验证(正确) [Arguments] ${name} ${password} Sleep 5s 元素输入 ${Input_UserName} ${name} 定位用户名输入框失败 元素输入 ${Input_UserPWD} ${password} 定位用户密码输入框失败 元素点击 ${Button_Login} 点击登录按钮 定位登录按钮失败 log 校验登录用户 sleep 10s Wait Until Page Contains Element ${A_UserName} 10s Wait Until Element Is Visible ${A_UserName} ${cur_loginuser_name_org}= Get Text ${A_UserName} ${cur_loginuser_name}= Strip String ${cur_loginuser_name_org} Should Be Equal ${cur_loginuser_name} ${name} log login success 修改密码(正确) [Arguments] ${oldpsd} ${newpsd} 元素点击 ${A_UserName} 点击用户信息按钮 定位用户信息按钮失败 元素点击 ${NG_ChangePWD_ABS} 进入修改密码页面 定位修改密码按钮失败 Wait Until Page Contains Element ${Title_SetPWD} 元素输入 ${Input_old_pwd} ${oldpsd} 定位旧密码输入框失败 元素输入 ${Input_new_pwd} ${newpsd} 定位新密码输入框失败 元素输入 ${Input_verify_pwd} ${newpsd} 定位确认密码输入框失败 元素点击 ${Change_success_confirm} 点击修改密码确定按钮 定位修改密码确定按钮失败 log 等待跳转 Wait Until Page Contains Element ${Tipstop_Text} 10s log 校验正确信息 sleep 3s ${info} Get Text ${Tipstop_Text} should contain ${info} 密码修改成功 Wait Until Page Contains Element ${Button_PrimaryOK_ChangePWD} 20s Wait Until Element Is Visible ${Button_PrimaryOK_ChangePWD} 10s Wait Until Element Is Enabled ${Button_PrimaryOK_ChangePWD} 20s 元素点击 ${Button_PrimaryOK_ChangePWD} 点击修改密码成功确定按钮 定位修改密码成功确定按钮失败 退出登录 元素点击 ${A_UserName} 点击用户信息按钮 定位用户信息按钮失败 元素点击 ${Bc_Logout} 点击退出登录按钮 定位退出登录按钮失败 Log 退出成功! sleep 2s 修改密码(错误) [Arguments] ${oldpsd} ${newpsd} ${errorinfo} ${pwd} 元素点击 ${A_UserName} 点击用户信息按钮 定位用户信息按钮失败 元素点击 ${NG_ChangePWD_ABS} 点击修改密码按钮 定位修改密码按钮失败 Wait Until Page Contains Element ${Title_SetPWD} 元素输入 ${Input_old_pwd} ${oldpsd} 定位旧密码输入框失败 元素输入 ${Input_new_pwd} ${newpsd} 定位新密码输入框失败 元素输入 ${Input_verify_pwd} ${newpsd} 定位确认密码输入框失败 Click Element ${Input_new_pwd} log 校验错误信息 Wait Until Element Is Visible ${pwd} 30s ${info} Get Text ${pwd} should contain ${info} ${errorinfo} sleep 2s 元素点击 ${Button_Default_ChangePWD} 点击修改密码取消按钮 定位修改密码取消按钮失败 验证文字 [Arguments] ${location} ${textcontent} # 实际大小定位路径|预估大小 ${text}= Get Text ${location} Should contain ${text} ${textcontent} 登入黑方 [Arguments] ${WEB_BC_Url} Log 登入黑方 Log Open Firefox Open Browser ${WEB_BC_Url} ${browser} Log Open Firefox successfully! sleep 3s 校验信息 [Arguments] ${userName_info} ${userRole_info} ${userEmail_info} ${userTel_info} # 用户名称|用户角色|邮箱地址|手机地址 [Documentation] 功能:点击用户信息,查看用户姓名,角色,邮箱,手机 ... ... 使用方法:校验信息 \ 用户名信息 \ 角色信息 \ 邮箱信息 \ 用户手机信息 ... ... 变量:${userName_info} \ \ ${userRole_info} \ ${userEmail_info} \ ${userTel_info} 元素点击 ${A_UserName} 点击用户信息按钮 定位用户信息按钮失败 元素点击 ${User_Info} 点击个人信息 定位个人信息按钮失败 sleep 2s ${username}= Execute Javascript return $("#showUserDetailModel #userName").val() log ${userName_info} Run Keyword IF "${username}"=="${userName_info}" log 用户名称信息验证正确 ... ELSE Run Keywords log 用户名称信息验证错误 ... AND fail sleep 2s ${userrole}= Execute Javascript return $("#showUserDetailModel #userRole").val() log ${userRole_info} Run Keyword IF "${userrole}"=="${userRole_info}" log 用户角色信息验证正确 ... ELSE Run Keywords log 用户角色信息验证错误 ... AND fail sleep 2s ${useremail}= Execute Javascript return $("#showUserDetailModel #userEmail").val() log ${userEmail_info} Run Keyword IF "${useremail}"=="${userEmail_info}" log 用户邮箱信息验证正确 ... ELSE Run Keywords log 用户邮箱信息验证错误 ... AND fail sleep 2s ${usertel}= Execute Javascript return $("#showUserDetailModel #userTel").val() log ${userTel_info} Run Keyword IF "${usertel}"=="${userTel_info}" log 用户手机信息验证正确 ... ELSE Run Keywords log 用户手机信息验证错误 ... AND fail 登录验证(错误) [Arguments] ${name} ${password} ${logintimes} log 开始进行无效用户名密码的登录测试 FOR ${i} IN RANGE ${logintimes} LoginOperation ${name} ${password} log 等待错误提示信息可见 元素点击 ${Button_Tipspop_OK} 点击确定按钮 定位确定按钮失败 END 登录验证(超限) [Arguments] ${name} ${password} 元素输入 ${Input_UserName} ${name} 定位用户名输入框失败 元素输入 ${Input_UserPWD} ${password} 定位用户密码输入框失败 元素点击 ${Button_Login} 点击登录按钮 定位登录按钮失败 log 等待提示信息 Wait Until Page Contains Element ${Button_Tipspop_OK} log 校验提示信息内容 Wait Until Element Is Visible ${Tipspop_Body} ${info} Get Text ${Tipspop_Body} should contain ${info} ${Login_False_Overlogin} 元素点击 ${Button_Tipspop_OK} 点击提示信息确定按钮 定位提示信息确定按钮失败 sleep 605s LoginOperation [Arguments] ${name} ${password} Wait Until Element Is Visible ${Button_Login} 元素输入 ${Input_UserName} ${name} 定位用户名输入框失败 元素输入 ${Input_UserPWD} ${password} 定位用户密码输入框失败 元素点击 ${Button_Login} 点击登录按钮 定位登录按钮失败 创建文件备份策略 [Arguments] ${agent_name} ${bk_target} ${bk_type} ${mds_name} ${encryption_attr} ${compress_attr} ${dedup_attr} ${check_attr}=0 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${bk_type} ${date} ${createpolicy} Catenate SEPARATOR= 新建策略[ ${random_strategyName} ] Set Suite Variable ${random_strategyName} Set Suite Variable ${createpolicy} Sleep 5s 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Add_Policy} 点击添加策略按钮 定位添加策略按钮失败 元素点击 ${File_Module} 点击文件组件 定位文件组件失败 元素输入 ${Set_File_PolicyName} ${random_strategyName} 定位策略名输入框失败 元素点击 xpath=//span[contains(text(),"${bk_target}")]/../../td[2]/div 勾选需要备份的文件 定位需要备份的文件失败 元素点击 ${Bk_File_NextStep} 点击下一步进入文件选项 定位下一步按钮失败 元素点击 ${File_More_NextStep} 点击下一步进入任务周期选项 定位下一步按钮失败 元素点击 ${Add_taskcycle} 点击添加任务周期 定位添加任务周期按钮失败 Run Keyword If "${bk_type}"=="完全" File_KeyWord.完全备份 ... ELSE IF "${bk_type}"=="差量" File_KeyWord.差量备份 ... ELSE IF "${bk_type}"=="累积增量_扫描" 累积增量备份_扫描 ... ELSE IF "${bk_type}"=="累积增量_驱动" 累积增量备份_驱动 ... ELSE Fail 定位备份类型失败 元素点击 ${Cycle_Once} 设置任务仅执行一次 定位仅执行一次失败 元素点击 ${Cycle_Confirm} 确定任务周期设置完毕 定位任务周期设置失败 元素点击 ${Cycle_NextStep} 点击下一步进入备份集存储设置界面 定位下一步失败 元素点击 ${Manual_ChooseMDS} 点击勾选手动选择介质 定位选择介质失败 元素点击 ${Select_MDS} 点击介质选择按钮 定位介质选择按钮失败 元素点击 xpath=//option[@label="${mds_name}"] 点击选择指定介质 定位指定介质失败 元素点击 ${Storage_NextStep} 点击下一步进入到备份高级选项 定位下一步失败 Run Keyword If ${encryption_attr}==1 加密 Run Keyword If ${compress_attr}==1 压缩 ... ELSE 取消压缩 Run Keyword If ${dedup_attr}==1 重删 Run Keyword If ${check_attr}==1 校验 sleep 6s Comment 元素点击 ${File_Senior_NextStep} 点击下一步进入到备份信息确认栏 定位下一步失败 循环点击 ${Complete_Policy_Create_No_Info} ${Success_Confirm} sleep 6s 元素点击 ${Success_Confirm} 确定策略创建成功 策略创建失败 根据内容查询日志 [Arguments] ${content} log 根据内容查询日志 元素输入 ${ELE_ContentFilter} ${content} 定位内容输入框失败 Press Keys ${ELE_ContentFilter} ENTER sleep 2s 获取指定行数的系统日志的内容 [Arguments] ${linenum} Wait Until Page Contains Element ${ELE_FirstLogContent} 30s Wait Until Element Is Visible ${ELE_FirstLogContent} 30s ${logpos} Run Keyword if ${linenum} == 1 set variable ${ELE_FirstLogContent} ... ELSE IF ${linenum} == 2 set variable ${ELE_SecondLogContent} ... ELSE IF ${linenum} == 3 set variable ${ELE_ThirdLogContent} ... ELSE set variable null ${logcontent}= Get Text ${logpos} Return From Keyword ${logcontent} 系统日志内容验证 [Arguments] ${logsrc} ${logdest} Should Contain ${logsrc} ${logdest} log 策略日志验证成功 编辑文件备份策略 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${new_strategyName}= Evaluate random.randint(211,996) random Log 生成新策略的名称 Log 将创建策略的日志设置为全局变量 Sleep 2s 元素点击 Xpath=//span[text()="${Plantform_BC_Agent}"] 点击主机按钮 定位主机按钮失败 ${filepolicyname} Get Text xpath=//div[@id="policy"]/div[2]/table/tbody/tr[2]/td[3] ${editpolicy} Catenate SEPARATOR= 修改代理[${Plantform_BC_Agent}]策略[ ${filepolicyname} ] Set Global Variable ${editpolicy} 元素点击 id=dpm_policy_editDialog_${filepolicyname}_btn 点击策略编辑按钮 定位策略编辑失败 元素输入 ${Edit_file_Name} ${new_strategyName} 策略名输入框定位失败 元素点击 ${File_Finish_Edit} 点击完成策略编辑 定位完成策略编辑失败 元素点击 ${Auth_Confirm} 确认编辑策略完成 定位策略编辑确认框失败 Log 策略编辑完毕 删除文件备份策略 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 Xpath=//span[text()="${Plantform_BC_Agent}"] 点击主机按钮 定位主机按钮失败 ${filepolicyname} Get Text xpath=//div[@id="policy"]/div[2]/table/tbody/tr[2]/td[3] ${deletepolicy} Catenate SEPARATOR= 删除策略[ ${filepolicyname} ] Set Global Variable ${deletepolicy} 元素点击 id=dpm_policy_edletePanel_${filepolicyname}_btn 点击策略删除按钮 定位策略编辑失败 元素点击 ${Del_Policy_Confirm} 点击删除策略弹窗按钮 定位删除策略弹窗失败 元素点击 ${confirmagain} 点击确定按钮 定位确定按钮失败 Log 删除策略成功 获取当前页面筛选的记录数目 元素点击 ${ELE_TotalRecords} 获取记录数目 定位获取记录数目失败 ${Text_TotalRecords}= Get Text ${ELE_TotalRecords} ${tmp}= Strip String ${Text_TotalRecords} characters=共条记录 ${Num_TotalRecords}= Strip String ${tmp} Return From Keyword ${Num_TotalRecords} Log 数目获取成功 获取所有日志记录数 Log 获取当前数据库中日志 @{logtabnames}= 获取当前数据库中所有日志表表名 ${totalrecords} Set Variable 0 FOR ${DB2_TableName1} IN @{logtabnames} log ${DB2_TableName1[0]} ${sql} Set Variable select count(*) from ${DB2_TableName1[0]} ${records}= 获取指定表的记录数 ${sql} ${totalrecords}= Evaluate ${totalrecords}+${records} END Return From Keyword ${totalrecords} 日志数量校验 [Arguments] ${Num_TotalRecords} ${Num_TotalRecords_unary} ${status}= Evaluate ${Num_TotalRecords}<=${Num_TotalRecords_unary} Should Be True ${status} log 日志数量校验正确 sleep 2s 获取当前数据库中所有日志表表名 @{logtbl_names} Get Values From DB select table_name from information_schema.tables where table_schema='unary' and table_name like 'tbl_log%' and table_name != 'tbl_login_log' ${Plantform_BC_IP_Excep} Return From Keyword @{logtbl_names} 获取指定表的记录数 [Arguments] ${sql} ${Num_Records}= Get Single Value From DB ${sql} Return From Keyword ${Num_Records} Get Values From DB [Arguments] ${sql_statement} ${ip} Log ${sql_statement} ${host}= Get IP From URL ${ip} Connect To Database Using Custom Params pymysql host='${host}', port=${BCPort}, user='${BCUser}', passwd='${BCPwd}', db='${BCDB}' @{queryResults} Query ${sql_statement} Log Many @{queryResults} Return From Keyword @{queryResults} Disconnect From Database Get IP From URL [Arguments] ${URL} ${ret_string}= Replace String Using RegExp ${URL} :(\\d)+|[a-zA-Z]|\\:|\\/ ${EMPTY} Return From Keyword ${ret_string} Get Single Value From DB [Arguments] ${sql_statement} ${ip} Log ${sql_statement} ${host}= Get IP From URL ${ip} Connect To Database Using Custom Params pymysql host='${host}', port=${BCPort}, user='${BCUser}', passwd='${BCPwd}', db='${BCDB}',charset="utf8" Execute Sql String SET NAMES UTF8 ${queryResult} Query ${sql_statement} log ${queryResult[0][0]} ${result} Set Variable ${queryResult[0][0]} Disconnect From Database Return From Keyword ${result} 系统日志显示当前用户登录成功 [Arguments] ${loginusername} Wait Until Element Is Visible xpath=//td[text()="[${loginusername}]登录成功"] 10s 用户登录成功日志未找到 用户登录登出日志检验 [Arguments] ${loginusername} ${logcontent} log 对当前用户的登录日志进行检验 log 内容登录失败,0;登录成功,1. log 检查用户名 ${ret}= If String Contain ${logcontent} ${Text_loginfailed} Run Keyword if ${ret} == ${True_WEB} Return From Keyword 0 ${ret}= If String Contain ${logcontent} ${Text_loginsuccess} Run Keyword if ${ret} == ${True_WEB} Return From Keyword 1 ${ret}= If String Contain ${logcontent} ${Text_logoutsuccess} Run Keyword if ${ret} == ${True_WEB} Return From Keyword 2 log 不包含“登录成功”“登录失败” Return From Keyword -1 系统日志显示当前用户登录失败 [Arguments] ${loginusername} ${logcontent} ${result}= 用户登录登出日志检验 ${loginusername} ${logcontent} Should Be Equal ${result} 0 系统日志显示当前用户登出成功 [Arguments] ${loginusername} Wait Until Element Is Visible xpath=//td[text()="[${loginusername}]登出成功"] 10s 用户登出失败日志未找到 登录验证(验证) [Arguments] ${name} ${password} Wait Until Element Is Visible ${Input_UserName} log 输入登录用户名 Set Focus To Element ${Input_UserName} input text ${Input_UserName} ${name} Wait Until Element Is Visible ${Input_UserPWD} log 输入登录密码 Set Focus To Element ${Input_UserPWD} input text ${Input_UserPWD} ${password} log 点击登录 Wait Until Element Is Visible ${Button_Login} Set Focus To Element ${Button_Login} click button ${Button_Login} log 等待错误提示信息可见 Sleep 2s Wait Until Element Is Visible ${Button_Tipspop_OK} 10s 定位错误弹窗失败 If String Contain [Arguments] ${parentString} ${subString} log 判断父串${parentString}是否包含子串${subString} ${find}= Evaluate '${parentString}'.find('${subString}') ${result} Run Keyword if ${find} < 0 set variable ${False_WEB} ... ELSE set variable ${True_WEB} Return From Keyword ${result} 选择系统日志级别 [Arguments] ${infolevel} log 选择系统日志级别 Select From List By Label xpath=//*[@id="level_select"] ${infolevel} 根据日志级别获取所有日志记录数 [Arguments] ${loglevel} @{logtabnames}= 获取当前数据库中所有日志表表名 ${totalrecords} Set Variable 0 ${level} Run Keyword If '${loglevel}' == '信息' Set Variable 1 ... ELSE IF '${loglevel}' == '警告' Set Variable 2 ... ELSE IF '${loglevel}' == '错误' Set Variable 3 ... ELSE Set Variable 0 FOR ${tablename} IN @{logtabnames} log ${tablename[0]} ${sql} Set Variable SELECT count(*) FROM ${tablename[0]} WHERE level = '${level}' ${records}= 获取指定表的记录数 ${sql} ${totalrecords}= Evaluate ${totalrecords}+${records} END Return From Keyword ${totalrecords} 根据用户查询日志 [Arguments] ${username} log 根据用户查询日志 根据日志用户获取所有日志记录数 [Arguments] ${username} @{logtabnames}= 获取当前数据库中所有日志表表名 ${totalrecords} Set Variable 0 FOR ${tablename} IN @{logtabnames} log ${tablename[0]} ${sql} Set Variable SELECT count(*) FROM ${tablename[0]} WHERE user = '${username}' ${records}= 获取指定表的记录数 ${sql} ${totalrecords}= Evaluate ${totalrecords}+${records} END Return From Keyword ${totalrecords} 根据IP查询日志 [Arguments] ${ip} log 根据IP查询日志 元素输入 ${ELE_IPFilter} ${ip} 定位IP输入框失败 Press Keys ${ELE_IPFilter} ENTER 根据日志IP获取所有日志记录数 [Arguments] ${IP} @{logtabnames}= 获取当前数据库中所有日志表表名 ${totalrecords} Set Variable 0 FOR ${tablename} IN @{logtabnames} log ${tablename[0]} ${sql} Set Variable SELECT count(*) FROM ${tablename[0]} WHERE ip = '${IP}' ${records}= 获取指定表的记录数 ${sql} ${totalrecords}= Evaluate ${totalrecords}+${records} END Return From Keyword ${totalrecords} 根据日志内容获取所有日志记录数 [Arguments] ${content} @{logtabnames}= 获取当前数据库中所有日志表表名 ${totalrecords} Set Variable 0 FOR ${tablename} IN @{logtabnames} log ${tablename[0]} ${sql} Set Variable SELECT count(*) FROM ${tablename[0]} WHERE \ operdesc like \ '%${content}%' ${records}= 获取指定表的记录数 ${sql} ${totalrecords}= Evaluate ${totalrecords}+${records} END Return From Keyword ${totalrecords} 添加用户 [Arguments] ${username} ${email} ${phone} 元素点击 ${System_Config} 进入系统设置界面 定位系统设置失败 元素点击 ${Path_Icon_Second_User} 进入到用户管理界面 定位用户管理失败 循环点击 ${Path_Tab_User} ${Path_Button_AddUserGuide} 元素点击 ${Path_Button_AddUserGuide} 进入添加用户信息窗口 定位添加用户按钮失败 Wait Until Page Contains Element ${Path_Title_NewUser} 30s 定位添加用户标题失败 Sleep 2s ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ ${username} ${date} Set Suite Variable ${random_strategyName} 元素输入 ${Path_Input_AddUser_UserName} ${random_strategyName} 定位用户名输入框失败 元素输入 ${Path_Input_AddUser_Email} ${email} 定位用户邮箱输入框失败 元素输入 ${Path_Input_AddUser_Phone} ${phone} 定位用户手机号输入框失败 元素点击 ${Confirm_Create_User} 点击确认创建用户 定位确认创建用户按钮失败 Log 新用户信息添加成功 ${pwd_info}= Get text ${Random_Pwd_Info} ${info_list} BuiltIn.Evaluate re.split(':','${pwd_info}') re ${info_list} BuiltIn.Evaluate re.split(':','${pwd_info}') re ${random_pwd} BuiltIn.Evaluate '${info_list}[1]'.replace(' ','') BuiltIn.Set Suite Variable ${random_pwd} 元素点击 ${Random_Pwd_confirm} 点击确认随机密码 定位随机密码确认按钮失败 首次登陆强制修改密码 [Arguments] ${emailAddress} ${Oldpwd} ${Newpwd} log 用户首次登陆,强制修改密码 Wait Until Page Contains Element Xpath=//*[@id="changePwdModal"] 20s 元素输入 Xpath=//*[@id="emailAddress"] ${emailAddress} 定位绑定邮箱输入框失败 元素输入 ${Input_old_pwd} ${Oldpwd} 定位当前密码输入框失败 元素输入 ${Input_new_pwd} ${Newpwd} 定位新密码输入框失败 元素输入 ${Input_verify_pwd} ${Newpwd} 定位确认新密码输入框失败 元素点击 ${Change_success_confirm} 点击修改确认按钮 定位修改确认按钮失败 元素点击 ${Button_PrimaryOK_ChangePWD} 点击修改成功确定按钮 定位修改成功确定按钮失败 删除用户 [Arguments] ${username} 元素点击 ${System_Config} 进入系统设置界面 定位系统设置失败 元素点击 ${Path_Icon_Second_User} 进入到用户管理界面 定位用户管理失败 循环点击 ${Path_Tab_User} xpath=//tbody/tr/td[text()='${username}']/parent::*/td/div/span/span[text()='删除'] ${path_del_user} set variable xpath=//tbody/tr/td[text()='${username}']/parent::*/td/div/span/span[text()='删除'] 元素点击 ${path_del_user} 点击删除按钮 定位删除按钮失败 Wait Until Page Contains Element ${Path_Title_DelUser} Wait Until Element Is Visible ${Path_Title_DelUser} 元素点击 ${Path_Button_DelUser} 删除用户成功 定位删除按钮失败 代理日志校验 [Arguments] ${username} # 用户名 元素输入 ${ELE_UserFilter} ${username} 定位用户输入框失败 Press Keys ${ELE_UserFilter} ENTER Sleep 2s Wait Until Element Is Visible xpath=//td[text()="sys_admin"]/..//td[contains(text(),"集成代理启动")] 10s 定位集成代理启动成功日志失败 Wait Until Element Is Visible xpath=//td[text()="sys_admin"]/..//td[contains(text(),"集成代理停止")] 10s 定位集成代理启动成功日志失败 获取数据库中最近一条记录的内容 ${sql} Set Variable SELECT operdesc FROM tbl_log order by tm desc limit 0,1 ${Records}= Get Single Value From DB ${sql} ${Plantform_BC_IP_Excep} Return From Keyword ${Records} 获取页面上最早的一条日志的内容 元素点击 ${ELE_FirstPage} 点击跳转第一页按钮 定位跳转第一页按钮失败 Sleep 5s ${first_old}= 获取指定行数的系统日志的内容 1 Log 获取当前页面上第一行的日志 FOR ${n} IN RANGE 10 元素点击 ${ELE_Title_Time} 点击日志标题时间按钮 定位日志标题时间按钮失败 ${first_now}= 获取指定行数的系统日志的内容 1 BuiltIn.Run Keyword If "${first_now}"=="${first_old}" Log ${n}次点击无效 ... ELSE BuiltIn.Exit For Loop END sleep 5s ${logcontent}= 获取指定行数的系统日志的内容 1 Return From Keyword ${logcontent} 获取数据库中最早的一条日志的内容 @{logtabnames}= 获取当前数据库中所有日志表表名 ${totalrecords} Set Variable 0 ${sqltotal} set variable (SELECT * FROM tbl_log ORDER BY tm asc limit 0,1) FOR ${tablename} IN @{logtabnames} log ${tablename[0]} ${sqltmp} Set Variable (SELECT * FROM ${tablename[0]} ORDER BY tm asc limit 0,1) ${sqltotal} set variable ${sqltmp} UNION ${sqltotal} END log ${sqltotal} ${sql} set variable select operdesc from (${sqltotal}) as logs order by tm asc limit 0,1 log ${sql} ${logcontent}= Get Single Value From DB ${sql} ${Plantform_BC_IP_Excep} Return From Keyword ${logcontent} Log 获取数据库日志内容完毕 系统管理员界面校验 元素点击 ${Path_Icon_DataReport} 进入工作面板页面 定位工作面板失败 元素点击 ${Path_Icon_CDM} 进入副本数据管理页面 定位副本数据管理失败 元素点击 ${Path_Icon_DPM} 进入定时数据保护页面 定位定时数据保护失败 元素点击 ${Path_Icon_CDP} 进入持续数据保护页面 定位持续数据保护失败 元素点击 ${Path_Icon_DR} 进入应用容灾页面 定位应用容灾失败 元素点击 ${Path_Icon_Sync} 进入异地灾备页面 定位异地灾备失败 元素点击 ${Storage} 进入存储管理页面 定位存储管理失败 元素点击 ${Media_Server} 展开内置介质服务器页面 定位内置介质服务器失败 元素点击 ${Path_Icon_Report} 进入报表管理页面 定位报表管理失败 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 元素点击 ${Path_Icon_AboutHelp} 进入信息和帮助页面 定位信息和帮助页面失败 安全管理员界面校验 元素点击 ${Path_Icon_Second_SysLog} 进入日志信息页面 定位日志信息失败 审计管理员界面校验 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理失败 元素点击 ${Path_Tab_Role} 进入角色页面 定位角色失败 元素点击 ${Path_Tab_User} 进入用户页面 定位用户失败 副本数据管理页面校验 元素点击 ${Path_Icon_CDM} 进入副本数据管理页面 定位副本数据管理失败 元素点击 ${Path_Icon_Second_DpmAgent} 进入定时保护策略页面 定位定时保护策略失败 元素点击 ${Path_Icon_Second_Task} 进入作业页面 定位作业失败 元素点击 ${Path_Icon_Second_CdmData} 进入副本数据页面 定位副本数据失败 存储管理页面校验 元素点击 ${Storage} 进入存储管理页面 定位存储管理失败 元素点击 ${Media_Manage} 进入介质管理页面 定位介质管理失败 元素点击 ${dedupManage} 进入重删库管理页面 定位重删库管理失败 元素点击 ${Cloud_Manage} 进入云存储资源管理页面 定位云存储资源管理页面失败 元素点击 ${Node_Manage} 展开介质节点管理页面 定位介质节点管理页面失败 sleep 10s 系统设置页面检验 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理页面失败 元素点击 ${Path_Icon_Second_Auth} 进入产品授权管理页面 定位产品授权管理失败 用户管理页面检验 [Arguments] ${Username} 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理页面失败 元素点击 ${Path_Tab_Role} 进入角色页面 定位角色失败 元素点击 ${Path_Tab_User} 进入用户页面 定位用户失败 元素点击 ${Path_Button_AddUserGuide} 点击添加用户按钮 定位添加用户按钮失败 Log 检验用户信息输入框 Wait Until Element Is Visible ${Path_Input_AddUser_UserName} Wait Until Element Is Visible ${Path_Input_AddUser_Email} Wait Until Element Is Visible ${Path_Input_AddUser_Phone} 元素点击 ${Path_Button_CreateUser_Close} 点击关闭按钮 定位关闭按钮失败 ${Path_Edit_User} set variable xpath=.//tr[td='${Username}']//span[text()='编辑'] 元素点击 ${Path_Edit_User} 点击编辑按钮 定位编辑按钮失败 Log 检验用户信息输入框 Wait Until Element Is Visible ${Path_Input_EditUser_Email} Wait Until Element Is Visible ${Path_Input_EditUser_Phone} 元素点击 ${Path_Button_UpdateUser_Close} 点击关闭按钮 定位关闭按钮失败 ${Path_Del_User} set variable xpath=//tbody/tr/td[text()='${Username}']/parent::*/td/div/span/span[text()='删除'] 元素点击 ${Path_Del_User} 点击删除按钮 定位删除按钮失败 Wait Until Page Contains Element ${Path_Title_DelUser} 元素点击 ${Path_Button_DelUser_Close} 点击关闭按钮 定位关闭按钮失败 用户授权检验 [Arguments] ${Username} 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理页面失败 元素点击 ${Path_Tab_User} 进入用户页面 定位用户失败 ${Path_Auth_User} set variable xpath=.//tr[td='${Username}']//span[text()='分配权限'] 元素点击 ${Path_Auth_User} 点击授权按钮 定位授权按钮失败 Wait Until Page Contains Element ${Path_Title_UserAuth} Wait Until Element Is Visible ${Path_Title_UserAuth} 元素点击 ${Path_Button_CloseUserAuth} 点击关闭按钮 定位关闭按钮失败 系统日志页面检验 元素点击 ${Path_Icon_Second_SysLog} 进入系统日志信息页面 定位日志信息失败 Log 检验导出按钮 Wait Until Page Contains Element ${Path_Button_OutLog} 30s Wait Until Element Is Visible ${Path_Button_OutLog} 30s 编辑用户 [Arguments] ${Username} ${Email} ${Phone} ${Path_Edit_User} set variable xpath=.//tr[td='${Username}']//span[text()='编辑'] 元素点击 ${Path_Edit_User} 点击编辑按钮 定位编辑按钮失败 Wait Until Page Contains Element ${Path_Title_EditUser} 30s 元素输入 ${Path_Input_EditUser_Email} ${Email} 定位邮箱输入框失败 元素输入 ${Path_Input_EditUser_Phone} ${Phone} 定位电话号码输入框失败 元素点击 ${Path_Button_UpdateUser} 点击保存按钮 定位保存按钮失败 添加角色 [Arguments] ${Rolename} @{Roleauth} 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理页面失败 元素点击 ${Path_Button_AddRoleGuide} 点击添加角色按钮 定位添加角色按钮失败 Wait Until Page Contains Element ${Path_Title_AddNewRole} 10s ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_role}= Catenate SEPARATOR=_ ${Rolename} ${date} Set Suite Variable ${random_role} 元素输入 ${Path_Input_RoleName} ${random_role} 定位角色名输入框失败 元素点击 ${Auth_Dpm} 点击勾选权限 定位权限失败 元素点击 ${Auth_Confirm} 确认连带权限勾选 定位连带权限失败 元素点击 ${Path_Button_CreateRole} 点击添加按钮 定位添加按钮失败 Get Auth Create Path [Arguments] ${RoleName} ${RoleIndex}= Run Keyword If '${RoleName}' == '定时保护' Set variable 4 ... ELSE IF '${RoleName}' == '保护策略' Set Variable 7 ... ELSE IF '${RoleName}' == '作业管理' Set Variable 5 ... ELSE IF '${RoleName}' == '备份集管理' Set Variable 3 ... ELSE IF '${RoleName}' == '异地灾备' Set Variable 8 ... ELSE IF '${RoleName}' == '存储管理' Set Variable 11 ... ELSE IF '${RoleName}' == '产品授权管理' Set Variable 6 ... ELSE IF '${RoleName}' == '用户管理' Set Variable 14 ... ELSE IF '${RoleName}' == '系统设置' Set Variable 12 ... ELSE IF '${RoleName}' == '系统日志审计' Set Variable 13 ... ELSE Set Variable 0 ${pathpre} Set Variable XPath=.//*[@id='newRole']//div[@class="containerTableStyle"]/table/tbody/tr[ ${pathsuf} Set Variable ]/td[2]/table/tbody/tr/td[2]/div ${EditPath}= Catenate SEPARATOR= ${pathpre} ${RoleIndex} ${pathsuf} Return From Keyword ${EditPath} 修改用户角色 [Arguments] ${Username} ${Rolename} 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理页面失败 元素点击 ${Path_Tab_User} 进入用户页面 定位用户失败 ${Path_Auth_User} set variable xpath=.//tr[td='${Username}']//span[text()='分配权限'] 元素点击 ${Path_Auth_User} 点击授权按钮 定位授权按钮失败 Wait Until Page Contains Element ${Path_Title_UserAuth} Wait Until Element Is Visible ${Path_Title_UserAuth} Wait Until Page Contains Element ${Path_Select_Role} 30s Wait Until Element Is Visible ${Path_Select_Role} 30s Sleep 1s Select From List By Label ${Path_Select_Role} ${Rolename} ${CheckStatus}= Get CheckBox AllHost Status Run Keyword If '${CheckStatus}' == 'check' log all host is checked ... ELSE IF '${CheckStatus}' == 'uncheck' Click Element ${Attr_AuthUser_AllHost} ... ELSE IF '${CheckStatus}' == 'checkgray' Click Element ${Attr_AuthUser_AllHost} ... ELSE IF '${CheckStatus}' == 'unknown' Log error status 元素点击 ${Path_Button_SaveUserAuth} 点击保存按钮 定位保存按钮失败 Get CheckBox AllHost Status log 获取授权页面中复选框所有主机的选中状态 ${attr}= Get Element Attribute ${Attr_AuthUser_AllHost} style ${ret}= If String Contain ${attr} ${GIF_CheckAll} Run Keyword if ${ret} == ${True_WEB} Return From Keyword check ${ret}= If String Contain ${attr} ${GIF_UnCheckAll} Run Keyword if ${ret} == ${True_WEB} Return From Keyword uncheck ${ret}= If String Contain ${attr} ${GIF_CheckGray} Run Keyword if ${ret} == ${True_WEB} Return From Keyword checkgray Return From Keyword unknown 编辑角色 [Arguments] ${Rolename} @{Roleauth} 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理页面失败 元素点击 ${Path_Tab_Role} 进入角色页面 定位角色失败 ${Path_Edit_Role} set variable XPath=.//tr[td='${Rolename}']/td[3]/div/span[1] 元素点击 ${Path_Edit_Role} 点击编辑按钮 定位编辑按钮失败 Wait Until Page Contains Element ${Path_Title_EditRole} 10s 元素输入 ${Path_Input_EditRole_RoleName} ${Rolename} 定位角色名输入框失败 FOR ${TmpAuth} IN @{Roleauth} ${Path_Auth} Get Auth Edit Path ${TmpAuth} Log ${Path_Auth} Click Element ${Path_Auth} END 元素点击 ${Path_Button_UpdateRole} 点击保存按钮 定位保存按钮失败 Get Auth Edit Path [Arguments] ${RoleName} ${RoleIndex}= Run Keyword If '${RoleName}' == '主机管理' Set variable 4 ... ELSE IF '${RoleName}' == '保护策略' Set Variable 7 ... ELSE IF '${RoleName}' == '作业管理' Set Variable 5 ... ELSE IF '${RoleName}' == '备份集管理' Set Variable 3 ... ELSE IF '${RoleName}' == '异地灾备' Set Variable 8 ... ELSE IF '${RoleName}' == '存储管理' Set Variable 11 ... ELSE IF '${RoleName}' == '产品授权管理' Set Variable 6 ... ELSE IF '${RoleName}' == '用户管理' Set Variable 14 ... ELSE IF '${RoleName}' == '系统设置' Set Variable 12 ... ELSE IF '${RoleName}' == '系统日志审计' Set Variable 13 ... ELSE Set Variable 0 ${pathpre} Set Variable XPath=//*[@id="edtRole"]/div/div/div[2]/div[2]/dhx-tree/div/table/tbody/tr[ ${pathsuf} Set Variable ]/td[2]/table/tbody/tr/td[2]/div[@class='dhx_bg_img_fix'] ${EditPath}= Catenate SEPARATOR= ${pathpre} ${RoleIndex} ${pathsuf} Return From Keyword ${EditPath} 删除角色 [Arguments] ${Rolename} ${Result} 元素点击 ${Path_Icon_Second_User} 进入用户管理页面 定位用户管理页面失败 元素点击 ${Path_Tab_Role} 进入角色页面 定位角色失败 ${Path_Del_Role} set variable xpath=.//tr[td='${Rolename}']/td[3]/div/span[2] 元素点击 ${Path_Del_Role} 点击删除按钮 定位删除按钮失败 Wait Until Page Contains Element ${Path_Title_DelRole} 10s Wait Until Element Is Visible ${Path_Title_DelRole} 10s 元素点击 ${Path_Button_DelRole} 点击删除按钮 定位删除按钮失败 Run Keyword If '${Result}' == '成功' Log 删除角色${Rolename}成功 ... ELSE IF '${Result}' == '失败' Click Alert Window ${Res_Text_RoleDeleted} 重置密码(错误) [Arguments] ${UserName} ${Sec_Name} ${Sec_Pwd} 元素点击 ${System_Config} 进入系统设置界面 定位系统设置失败 元素点击 ${Path_Icon_Second_User} 进入到用户管理界面 定位用户管理失败 循环点击 ${Path_Tab_User} ${Path_Button_AddUserGuide} 元素点击 Xpath=.//tr[td='${UserName}']//span[text()='重置密码'] 点击重置密码按钮 定位重置密码按钮失败 元素输入 ${Check_Sec_Name} ${Sec_Name} 定位输入sec账户名失败 元素输入 ${Check_Sec_Pwd} ${Sec_Pwd} 定位密码输入框失败 元素点击 ${Update_User_Pwd} 点击确定更新密码 定位确定更新密码的按钮失败 Wait Until Element Is Visible ${Check_Sec_Fail} 10s 校验密码输入错误消息失败 元素点击 ${Button_Check_Fail} 确认sec账号密码错误 定位账号密码输入错误提示按钮失败 元素点击 ${Res_Button_Close} 点击关闭按钮 定位关闭按钮失败 重置密码(正确) [Arguments] ${UserName} ${Sec_Name} ${Sec_Pwd} 元素点击 ${System_Config} 进入系统设置界面 定位系统设置失败 元素点击 ${Path_Icon_Second_User} 进入到用户管理界面 定位用户管理失败 循环点击 ${Path_Tab_User} ${Path_Button_AddUserGuide} 元素点击 Xpath=.//tr[td='${UserName}']//span[text()='重置密码'] 点击重置密码按钮 定位重置密码按钮失败 元素输入 ${Check_Sec_Name} ${Sec_Name} 定位输入sec账户名失败 元素输入 ${Check_Sec_Pwd} ${Sec_Pwd} 定位密码输入框失败 元素点击 ${Update_User_Pwd} 点击确定更新密码 定位确定更新密码的按钮失败 ${pwd_info}= Get text ${Update_Random_Pwd_Info} ${info_list} BuiltIn.Evaluate re.split(':','${pwd_info}') re ${info_list} BuiltIn.Evaluate re.split(':','${pwd_info}') re ${new_random_pwd} BuiltIn.Evaluate '${info_list}[1]'.replace(' ','') BuiltIn.Set Suite Variable ${new_random_pwd} Click Alert Window [Arguments] ${AlertInfo} Wait Until Page Contains Element ${Path_AlertInfo} 15s Wait Until Element Is Visible ${Path_AlertInfo} 15s ${CurAlertinfo}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${CurAlertinfo} ${AlertInfo} 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 修改服务器名称 [Arguments] ${NewServerName} 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Node_More_Operate} 点击展开节点操作 定位节点操作下拉失败 元素点击 ${Path_Button_SetName} 点击更改按钮 定位更改按钮失败 元素输入 ${Path_Input_ServerName} ${NewServerName} 定位服务器名称输入框失败 元素点击 ${Path_Button_SetNameOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 Wait Until Element Is Visible xpath=//td[text()="${NewServerName}"] 5s 修改黑方名称失败 设置超时时间 [Arguments] ${TimeOut} 元素输入 ${Path_Input_ServerExpireTime} ${TimeOut} 定位会话锁定时间输入框失败 元素点击 ${Path_Button_SetExpireTimeOK} 点击更改按钮 定位更改按钮失败 Comment 元素点击 ${confirmagain} 点击确认更改超时时间 定位超时时间确定更改按钮失败 超时设置失败 Wait Until Element Is Visible ${Wrong_ExpireTime} ${TextInfo}= Get Text ${Wrong_ExpireTime} Should Be Equal ${TextInfo} 请输入0-30的整数,0表示不锁定 sleep 1s 元素点击 ${Close_Warning} 点击关闭错误提示弹窗 定位错误提示弹窗失败 超时设置成功 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 修改服务器系统时间 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${Node_Setting} 点击切换到节点设置页面 定位节点设置页面失败 ${SetTime}= Get Value ${Path_Input_ServerTime} Sleep 20s 元素点击 ${Path_Button_SetTime} 点击更改按钮 定位更改按钮失败 元素点击 ${Path_Input_ServerTime} 点击服务器时间输入框 定位服务器时间输入框失败 元素点击 ${Date_15} 点击勾选时间为15号 定位服务器时间输入框失败 ${status}= BuiltIn.Run Keyword And Return Status Wait Until Element Is Visible ${Laydate-btns-Confirm} 2s BuiltIn.Run Keyword If '${status}'== 'true' Click Element ${Laydate-btns-Confirm} 元素点击 ${Path_Button_SetTimeOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 设置https端口号 [Arguments] ${HttpSport} 元素点击 ${System_Config} 进入系统管理页面 定位系统管理失败 元素点击 ${Path_Title_ServerSetting} 进入系统设置页面 定位系统设置页面失败 元素点击 ${Path_Button_SetHttps} 点击更改按钮 定位更改按钮失败 元素输入 ${Path_Input_ServerHttps} ${HttpSport} 定位服务器https端口输入框失败 元素点击 ${Path_Button_SetHttpsOK} 点击确定完成端口号编辑 定位端口号编辑确定按钮失败 https端口号设置失败 Wait Until Element Is Visible ${Wrong_Port} ${TextInfo}= Get Text ${Wrong_Port} Should Be Equal ${TextInfo} 请输入1-65535之间的整数 元素点击 ${Close_WrongWarning} 点击关闭错误端口提示 定位错误端口提示弹窗内的确定按钮 元素点击 ${Path_Button_SetHttpsCancel} 点击取消按钮 定位取消按钮失败 https端口号已被占用 Wait Until Element Is Visible ${Warning_Port_Used} 300s 定位端口被占用提示失败 元素点击 ${Path_Button_SetHttpsFaileOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_SetHttpsCancel} 点击取消按钮 定位取消按钮失败 https端口号设置成功 log 关闭当前打开的浏览器 Sleep 30s Close Browser Open Connection ${Plantform_BC_IP} SSHLibrary.Login root 2008Bc1223!@# log 开放https端口号 Execute Command service iptables stop sleep 1s Close Connection Sleep 60s https端口登录黑方 Sleep 30s Log 登入黑方 Open Browser ${Plantform_BC_UrlPort1024} ${browser} Log Open Firefox successfully! sleep 3s Set Window Size 1920 1080 Log 登录网站 登录验证(正确) ${Sys_Admin} ${WebPWD} sleep 10s Page Should Contain ${Sys_Admin} Log 登录成功! 校验版本信息 元素点击 ${Path_Icon_AboutHelp} 进入信息和帮助页面 定位信息和帮助页面失败 FOR ${Element} IN @{Component_List} ${Temp} Run Keyword And Return Status Page Should Contain ${Element} Run Keyword If '${Temp}'=='True' Continue For Loop ... ELSE fail ${Element}组件不存在 Continue For Loop END Log 组件校验完毕 进入备份集校验设置页面 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 循环点击 ${Business_Assistant} ${BackUpSetCheck} 元素点击 ${BackUpSetCheck} 进入备份集校验页面 定位备份集校验失败 设置非法备份集校验周期 [Arguments] ${Interval} 元素点击 ${Path_Button_SetInterval} 点击设置按钮 定位设置按钮失败 元素输入 ${Path_Input_SetInterval} ${Interval} 定位周期内容输入框失败 元素点击 ${Path_Button_SetIntervalOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_SetIntervalCancle} 点击取消按钮 定位取消按钮失败 设置合法备份集校验周期 [Arguments] ${Interval} 元素点击 ${Path_Button_SetInterval} 点击设置按钮 定位设置按钮失败 元素输入 ${Path_Input_SetInterval} ${Interval} 定位周期内容输入框失败 元素点击 ${Path_Button_SetIntervalOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 设置非法备份集校验速度 [Arguments] ${Speed} 元素点击 ${Path_Button_SetSpeed} 点击设置按钮 定位设置按钮失败 元素输入 ${Path_Input_SetSpeed} ${Speed} 定位速度内容输入框失败 元素点击 ${Path_Button_SetSpeedOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_SetSpeedCancle} 点击取消按钮 定位取消按钮失败 设置合法备份集校验速度 [Arguments] ${Speed} 元素点击 ${Path_Button_SetSpeed} 点击设置按钮 定位设置按钮失败 元素输入 ${Path_Input_SetSpeed} ${Speed} 定位速度内容输入框失败 元素点击 ${Path_Button_SetSpeedOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 设置非法备份集校验时间 [Arguments] ${Time} 元素点击 ${Path_Button_SetBackupTime} 点击设置按钮 定位设置按钮失败 元素输入 ${Path_Input_SetTime} ${Time} 定位时间内容输入框失败 元素点击 ${Path_Button_SetBackupTimeOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_SetTimeCancle} 点击取消按钮 定位取消按钮失败 设置合法备份集校验时间 [Arguments] ${Time} 元素点击 ${Path_Button_SetBackupTime} 点击设置按钮 定位设置按钮失败 元素输入 ${Path_Input_SetTime} ${Time} 定位时间内容输入框失败 元素点击 ${Path_Button_SetBackupTimeOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 进入网络设置页面 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${Path_Title_NetworkSetting} 进入网络设置页面 定位网络设置失败 编辑无效的网卡信息 [Arguments] ${NetworkCardEdit} 元素点击 ${Edit_Network} 点击编辑按钮 定位编辑按钮失败 元素输入 ${Path_Input_EditNetworkCard_IP} 110.1110.11110 定位IP输入框失败 元素点击 ${Path_Button_EditNetworkCard_AddBond} 点击确定按钮 定位确定按钮失败 Wait Until Page Contains Element ${Path_Info_InvalidURL} 30s 元素点击 ${Path_Button_NetWork_AlertOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_EditNetworkCard_Close} 点击关闭按钮 定位关闭按钮失败 元素点击 ${Edit_Network} 点击编辑按钮 定位编辑按钮失败 元素输入 ${Path_Input_EditNetworkCard_Mask} ${EMPTY} 定位子网掩码输入框失败 元素点击 ${Path_Button_EditNetworkCard_AddBond} 点击确定按钮 定位确定按钮失败 Wait Until Page Contains Element ${Path_Info_LackCompleteInfo} 30s 元素点击 ${Path_Button_NetWork_AlertOK} 点击确定按钮 定位确定按钮失败 元素点击 ${Path_Button_EditNetworkCard_Close} 点击关闭按钮 定位关闭按钮失败 元素点击 ${Edit_Network} 点击编辑按钮 定位编辑按钮失败 元素输入 ${Path_Input_EditNetworkCard_Mask} 255.255.0.0 定位子网掩码输入框失败 Comment 元素输入 ${Path_Input_EditNetworkCard_DNS1} *?// 定位DNS1输入框失败 元素点击 ${Path_Button_EditNetworkCard_AddBond} 点击确定修改按钮 定位确定按钮失败 元素点击 ${Edit_Network_Confirm} 点击二次确认修改按钮 定位二次确认修改按钮失败 进入报警邮箱设置页面 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 元素点击 ${Path_Title_ServerSetting} 进入系统设置页面 定位系统设置页面失败 设置报警邮箱_STMP启用 [Arguments] ${OutBox} ${User} ${Port} ${Password} 元素点击 ${Email_Config} 点击修改发送邮箱配置 定位发送邮箱配置立即修改按钮失败 Wait Until Element Is Visible ${Path_Input_SentEmailServer} 10s 元素点击 ${Enable_SMTP} 点击启用SMTP 定位启用SMTP失败 Run Keyword If '${OutBox}'=='' Log 发件箱保持原数值 ... ELSE Input Text ${Path_Input_SentEmailServer} ${OutBox} Run Keyword If '${User}'=='' Log 发件人保持原数值 ... ELSE Input Text ${Path_Input_SentEmailUser} ${User} Run Keyword If '${Port}'=='' Log 端口保持原数值 ... ELSE Input Text ${Path_Input_SentEmailPort} ${Port} Run Keyword If '${Password}'=='' Log 密码保持原数值 ... ELSE Input Password ${Path_Input_SentEmailPassword_Password} ${Password} 元素点击 ${Confirm_Change_Email} 点击确定按钮 定位确定按钮失败 Wait Until Page Contains Element ${Path_AlertInfo} 30s ${AlertMessage}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${AlertMessage} ${Res_Text_SetSuccess} 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 Log 报警邮箱-发件服务器设置完毕 测试报警邮箱 [Arguments] ${InBox} 元素点击 ${Path_Button_TestEmailDialog} 点击测试邮箱按钮 定位测试邮箱按钮失败 Wait Until Element Is Visible ${Path_Title_Inbox} 10s 元素输入 ${Path_Input_ReceiveEmail} ${InBox} 定位接收邮箱输入框失败 元素点击 ${Path_Button_TestEmail} 点击确定按钮 定位确定按钮失败 log wait for alerm sleep 5s Wait Until Page Contains Element ${Path_AlertInfo} 60s Sleep 5s Wait Until Element Is Visible ${Path_Button_Alert_OK} 60s ${AlertMessage}= Get Text ${Path_AlertInfo} ${result} Run Keyword If '${AlertMessage}'=='${Res_TextInvalidInbox}' Set Variable 发送失败,${InBox} 无效的收件箱! ... ELSE IF '${AlertMessage}' == '${Res_Text_CheckSuccess}' Set Variable 收件箱${InBox}验证成功! ... ELSE IF '${AlertMessage}' == '${Res_Text_TestEmailFailed}' Set Variable 发送失败,收件箱${InBox}格式有效! ... ELSE Set Variable 发送失败,提示信息${AlertMessage}未知! Sleep 2s 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 Run Keyword If '${AlertMessage}'=='${Res_TextInvalidInbox}' Click Element ${Path_Button_CancelTestEmail} Return From Keyword ${result} 报警邮箱测试失败 [Arguments] ${Message} ${Result} If String Contain ${Message} 失败 Should Be True ${Result} 报警邮箱非法值设置 元素点击 ${Email_Config} 点击修改发送邮箱配置 定位发送邮箱配置立即修改按钮失败 Log 输入非法的报警邮件发送服务器 元素输入 ${Path_Input_SentEmailServer} invalidemailserver 定位邮件发送服务器输入框失败 Click Element ${Confirm_Change_Email} ${Prompt}= Get Text ${Path_PromptMessage_ErrorServer} Should Be Equal As Strings ${Prompt} ${Res_Text_EmailServerFormat} 元素点击 ${Cancel_ConfigEmail} 点击取消关闭邮箱配置弹窗 定位告警邮箱弹窗内的取消按钮失败 元素点击 ${Email_Config} 点击修改发送邮箱配置 定位发送邮箱配置立即修改按钮失败 Log 输入非法的报警邮件发送端口 元素输入 ${Path_Input_SentEmailPort} ABVCDE 定位邮件发送端口输入框失败 Click Element ${Confirm_Change_Email} ${Prompt}= Get Text ${Path_PromptMessage_ErrorPort} Should Be Equal As Strings ${Prompt} ${Res_Text_PortRange} 元素点击 ${Cancel_ConfigEmail} 点击取消关闭邮箱配置弹窗 定位告警邮箱弹窗内的取消按钮失败 元素点击 ${Email_Config} 点击修改发送邮箱配置 定位发送邮箱配置立即修改按钮失败 Log 输入非法的报警邮件用户 元素输入 ${Path_Input_SentEmailUser} invaliduser 定位邮件发送用户输入框失败 Click Element ${Confirm_Change_Email} ${Prompt}= Get Text ${Path_PromptMessage_ErrorUser} Should Be Equal As Strings ${Prompt} ${Res_Text_EmailUserFormat} 元素点击 ${Cancel_ConfigEmail} 点击取消关闭邮箱配置弹窗 定位告警邮箱弹窗内的取消按钮失败 元素点击 ${Email_Config} 点击修改发送邮箱配置 定位发送邮箱配置立即修改按钮失败 Log 用户密码为空 元素输入 ${Path_Input_SentEmailPassword_Password} ${EMPTY} 定位邮件发送密码输入框失败 Click Element ${Confirm_Change_Email} ${Prompt}= Get Text ${Path_PromptMessage_EmptyPassword} Should Be Equal As Strings ${Prompt} ${Res_Text_EmptyPassword} 元素点击 ${Cancel_ConfigEmail} 点击取消关闭邮箱配置弹窗 定位告警邮箱弹窗内的取消按钮失败 进入报警规则设置页面 循环点击 ${System_Config} ${Path_Label_Danger} 循环点击 ${Path_Label_Danger} ${Path_Lable_AlarmRulesSetting} 元素点击 ${Path_Lable_AlarmRulesSetting} 进入报警规则设置页面 定位报警规则设置失败 进入添加规则页面 元素点击 ${Path_Button_AddRule} 点击添加规则按钮 定位添加规则按钮失败 Wait Until Page Contains Element ${Path_Title_AddRules} 30s Wait Until Element Is Visible ${Path_Button_AddAlarmRule} 30s 规则名称为空检验 Click Element ${Path_Button_AddAlarmRule} ${Info}= Get Text ${Path_PromptMessage_ErrorAlarmRuleName} Should Be Equal As Strings ${Info} ${Res_Text_ErrorAlarmRuleName} 设置规则名称 [Arguments] ${Rulename} 元素输入 ${Path_Input_RuleName} ${Rulename} 定位规则名输入框失败 确认添加报警规则失败 元素点击 ${Path_Button_AddAlarmRule} 点击添加规则按钮 定位添加规则按钮失败 Wait Until Page Contains Element ${Path_AlertInfo} 30s Sleep 2s ${Info}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${Info} ${Res_Text_CheckEmailorPhone} 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 #下面注释部分为验证规则名为空时的提示 Comment Click Element ${Path_Button_AddAlarmRule} Comment ${Info}= Get Text ${Path_PromptMessage_ErrorAlarmRuleName} Comment Should Be Equal As Strings ${Info} ${Res_Text_ErrorAlarmRuleName} 设置过滤规则级别 [Arguments] ${Rulelevel} Select From List By Label ${Path_Select_FilterRules_Level} ${Rulelevel} 设置接收邮箱 [Arguments] ${InboxString} 元素输入 ${Path_InputArea_InboxSetting} ${InboxString} 定位接收邮箱输入框失败 确认添加报警规则成功 元素点击 ${Path_Button_AddAlarmRule} 点击添加规则按钮 定位添加规则按钮失败 log create new rule Wait Until Page Contains Element ${Path_AlertInfo} 10s log get return info Sleep 2s ${Info}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${Info} ${Res_Text_AddRulesSuccess} 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 删除报警规则 [Arguments] ${RuleName} sleep 2s ${button_del_rule} set variable xpath=//tbody/tr/td[text()="${RuleName}"]/parent::*/td/div/button[text()="删除"] 元素点击 ${button_del_rule} 点击删除按钮 定位删除按钮失败 wait until page contains element ${Path_Title_DelRule} 元素点击 ${Path_Button_DelRule} 点击删除确定按钮 定位删除确定按钮失败 Wait Until Page Contains Element ${Path_AlertInfo} 10s ${AlertMessage}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${AlertMessage} ${Res_Text_DelAlarmRuleOK} Sleep 1s 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 设置过滤规则类型 [Arguments] ${Type} ${Subtype} Select From List By Label xpath=//select[@ng-model="alarmRule.alarmType"] ${Type} Select From List By Label xpath=//select[@ng-model="alarmRule.alarmSubType"] ${Subtype} 设置过滤规则抑制规则 [Arguments] ${Sendrule} Log 选择抑制规则:逐条发送、不再重复发送 Run Keyword If '${Sendrule}' == '逐条发送' Click Element ${Path_Radio_FilterRules_SendOneByOne} ... ELSE IF '${Sendrule}' == '不再重复发送' Click Element ${Path_Radio_FilterRules_SendNoRepeat} ... ELSE Log 未知的抑制规则 编辑报警规则 [Arguments] ${RuleName} ${button_edit_rule} set variable xpath=//tbody/tr/td[text()="${RuleName}"]/parent::*/td/div/button[text()="编辑"] 元素点击 ${button_edit_rule} 进入编辑页面 定位规则编辑按钮失败 确认编辑报警规则成功 元素点击 ${Path_Button_AddAlarmRule} 点击添加规则按钮 定位添加规则按钮失败 Wait Until Page Contains Element ${Path_AlertInfo} 10s Wait Until Element Is Visible ${Path_AlertInfo} 10s Sleep 2s ${Info}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${Info} ${Res_Text_EditRulesSuccess} 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 查看告警待处理数量 ${Danger} Get Text ${path_danger} Log 告警数量为${Danger} Return From Keyword ${Danger} [Return] ${Danger} 处理告警信息 Log 进入告警信息处理界面 元素点击 ${Path_Button_Danger} 点击告警处理按钮 定位告警处理按钮失败 元素点击 ${Alarm_System} 点击切换到系统告警 定位系统告警栏失败 元素点击 ${Path_Select_AlterStats} 选择告警选择框 定位告警选择框失败 元素点击 ${Path_Option_OffDanger} 选择告警未处理 定位告警未处理选择项失败 元素点击 ${Search_Alarm} 点击搜索按钮进行搜索 定位高级搜索按钮失败 ${Time}= Get Text ${Warning_Time} 元素点击 xpath=//td[text()="${Time}"]/..//span[text()="处理"] 点击未处理按钮 定位告警未处理按钮失败 元素点击 ${Path_Button_DangerOK} 点击告警未处理成功确定按钮 定位告警处理成功确定按钮失败 元素点击 ${Path_Select_AlterStats} 选择告警选择框 定位告警选择框失败 元素点击 ${Option_Warning_Handled} 切换到告警已经处理选项 定位告警已经处理选项失败 元素点击 ${Search_Alarm} 点击搜索按钮进行搜索 定位高级搜索按钮失败 ${Result_1} Run Keyword And Return Status Wait Until Element Is Visible xpath=//td[text()="${Time}"] 10s 定位已处理告警失败 Run Keyword If ${Result_1}==True Log 告警处理成功 ... ELSE Fail 告警处理失败 校验告警信息待处理数量 [Arguments] ${DangerNew1} ${path_Danger} Set Variable xpath=//span[@class="label label-danger ng-binding"] Wait Until Page Contains Element ${path_Danger} 30s Wait Until Element Is Visible ${path_Danger} 30s ${DangerAffirm} Get Text ${path_Danger} Log 告警数量为${DangerAffirm} ${Add_Danger}= Evaluate eval('${DangerNew1} -1') ${Danger_Read} Run Keyword And Return Status Should Be Equal As strings ${DangerAffirm} ${Add_Danger} Run Keyword If ${Danger_Read}==True Log 告警信息数量显示正确 ... ELSE Fail 告警信息数量校验失败 已处理告警信息 Log 进入告警信息处理界面 元素点击 ${Path_Button_Danger} 点击告警处理按钮 定位告警处理按钮失败 Log 选择已处理的信息 元素点击 ${Path_Select_AlterStats} 选择告警选择框 定位告警选择框失败 元素点击 ${Path_Option_OnDanger} 选择告警未处理 定位告警未处理选择项失败 Log 告警信息处理一条 元素点击 ${Path_Button_Act} 点击已处理按钮 定位告警已处理按钮失败 元素点击 ${Path_Button_OnDangerOK} 点击告警已处理成功确定按钮 定位告警已处理成功确定按钮失败 元素点击 ${Path_Button_OffDanger} 点击×退出按钮 定位×退出按钮失败 校验告警信息已处理数量 [Arguments] ${DangerNew2} ${path_Danger} Set Variable xpath=//span[@class="label label-danger ng-binding"] Wait Until Page Contains Element ${path_Danger} 30s Wait Until Element Is Visible ${path_Danger} 30s ${DangerAffirm} Get Text ${path_Danger} Log 告警数量为${DangerAffirm} ${Subtract_Danger}= Evaluate ${DangerNew2}+1 ${Danger_Read} Run Keyword And Return Status Should Be Equal As Integers ${DangerAffirm} ${Subtract_Danger} Run Keyword If ${Danger_Read}==True Log 告警信息数量显示正确 ... ELSE Fail 告警信息数量校验失败 修改网卡信息 [Arguments] ${new_ip} 元素点击 ${Path_Button_Eth0_Modify} 点击第一块网卡的编辑按钮 第一块网卡编辑按钮定位失败 元素输入 ${Path_Input_EditNetworkCard_IP} ${new_ip} ip输入框定位失败 元素点击 ${Path_Button_EditNetworkCard_AddBond} 点击确认修改按钮 确认修改按钮定位失败 元素点击 ${Edit_Network_Confirm} 点击二次确认修改按钮 定位二次确认修改按钮失败 sleep 360s 等待ip修改 关闭浏览器 修改服务器时间 [Arguments] ${time} ${delay_day} 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${Node_Setting} 点击切换到节点设置页面 定位节点设置页面失败 ${Year} Evaluate time.strftime('%Y',time.localtime()) time ${Mon} Evaluate time.strftime('%m',time.localtime()) time ${Day} Evaluate time.strftime('%#d',time.localtime()) time ${Day} Evaluate ${Day}+${delay_day} ${Time_1} Catenate SEPARATOR=- ${Year} ${Mon} ${Time_2} Catenate SEPARATOR=- ${Time_1} ${Day} ${Time} Catenate ${Time_2} ${time} 元素点击 ${Path_Button_SetTime} 点击更改按钮 定位更改按钮失败 Assign Id To Element ${Path_Input_ServerTime} dateInput Execute Javascript window.document.getElementById('dateInput').removeAttribute('readonly') 元素输入 dateInput ${Time} 定位服务器时间输入框失败 循环点击 ${Path_Button_SetTimeOK} ${Path_Button_ServerAlertOK} 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 校验定时容量_使用前 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 循环点击 ${Auth_Manage} ${Storage_Used} ${stor_used} Get Text ${Storage_Used} ${stor_used_origin}= Remove String ${stor_used} GB ${stor_used_origin}= Remove String ${stor_used_origin} MB Set Suite Variable ${stor_used_origin} Log 获取定时授权使用前的容量 Sleep 2s 校验定时容量_使用后 [Arguments] ${result} # 容量变化结果(yes表示已使用容量变小,即备份集被清理,no表示已使用容量未变化) Sleep 60s Log 等待过期备份集被清理 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 循环点击 ${Auth_Manage} ${Storage_Used} ${stor_used} Get Text ${Storage_Used} ${stor_used_after} Remove String ${stor_used} GB ${stor_used_after} Remove String ${stor_used_after} MB ${stor_used_after} Remove String ${stor_used_after} KB Set Suite Variable ${stor_used_after} Log 获取定时授权使用后的容量 Run Keyword if ${result}==1 and ${stor_used_after}<${stor_used_origin} Log 备份集清理成功 ... ELSE IF ${result}==0 and ${stor_used_after}==${stor_used_origin} Log 备份集未清理 ... ELSE Fail 备份集清理失败 Sleep 2s 关机重启恢复出厂设置 [Arguments] ${do} [Documentation] 功能:根据传入的值点击重启,关机,恢复出厂设置,重启黑方服务 ... ... 使用方法:关机重启恢复出厂设置 \ 操作参数 ... ... 变量:${do} ... ${do}==1 \ \ 为关机 ... ${do}==2 \ \ 为重启 ... ${do}==3 \ \ 恢复出厂设置 ... ${do}==4 \ \ 重启黑方服务 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 BuiltIn.Run Keyword If ${do}==1 页面关机操作 ... ELSE Log 不关机 BuiltIn.Run Keyword If ${do}==2 页面重启操作 ... ELSE Log 不重启 BuiltIn.Run Keyword If ${do}==3 页面恢复出厂设置操作 ... ELSE Log 不恢复出厂设置 BuiltIn.Run Keyword If ${do}==4 页面重启服务操作 ... ELSE Log 不重启服务操作 校验告警数量为0 ${path_Danger} Set Variable xpath=//span[@class="label label-danger ng-binding"] Wait Until Element Is Visible ${path_Danger} 30s ${DangerAffirm} Get Text ${path_Danger} ${Danger_Read} Run Keyword And Return Status Should Be Equal As strings ${DangerAffirm} 0 Run Keyword If ${Danger_Read}==True Log 告警信息数量显示为0 ... ELSE Fail 告警信息数量校验不为0 校验页面无代理 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 ${status}= Run Keyword And Return Status Element Should Be Visible ${Plantform_BC_Agent} Run Keyword If '${status}'=='False' log 页面无代理信息 恢复出厂设置后登录 打开黑方登录页面 ${Plantform_BC_Url} 登录验证(正确) ${Sys_Admin} ${DefaultPWD} Wait Until Element Is Visible ${Input_Email} Set Focus To Element ${Input_Email} Input Text ${Input_Email} ${Email} log 绑定邮箱 Wait Until Element Is Visible ${Input_old_pwd} Set Focus To Element ${Input_old_pwd} Input Text ${Input_old_pwd} ${DefaultPWD} log 老密码输入成功 Wait Until Element Is Visible ${Input_new_pwd} Set Focus To Element ${Input_new_pwd} Input Text ${Input_new_pwd} ${WebPWD} log 新密码输入成功 Wait Until Element Is Visible ${Input_verify_pwd} Set Focus To Element ${Input_verify_pwd} Input Text ${Input_verify_pwd} ${WebPWD} log 确认新密码 元素点击 ${Change_success_confirm} 确认修改点击成功 确认按钮定位失败 元素点击 ${Button_PrimaryOK_ChangePWD} 确认密码修改成功 确认密码修改成功按钮定位失败 登录验证(正确) ${Sys_Admin} ${WebPWD} 校验无老日志信息 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 元素点击 ${Path_Icon_Second_SysLog} 点击进入日志信息页面 定位日志信息页面失败 ${status}= Run Keyword And Return Status Page Should Contain 新建了策略 Run Keyword If '${status}'=='False' log 页面无老日志信息 判断服务器开关机 [Arguments] ${status} ${BC_IP} ${BC_Name} ${BC_PWD} [Documentation] 功能描述:判断黑方服务器是否已开机/关机 ... ... 参数:status|黑方IP|黑方后台账号|黑方后台密码 ... ... ${status}==True为开机 ... ${status}==False为关机 sleep 30s FOR ${n} IN RANGE 20 Open Connection ${BC_IP} ${passed}= Run Keyword And Return Status SSHLibrary.Login ${BC_Name} ${BC_PWD} Run Keyword If ${status}==${passed} EXit For loop sleep 60s END sleep 60s log 等待机器完全开机&关机 页面关机操作 元素点击 ${Node_More_Operate} 点击展开节点操作 定位节点操作下拉失败 元素点击 ${Path_Title_ServerSetting_Shutdown} 点击关机按钮成功 定位关机按钮失败 元素点击 ${Path_Title_ServerSetting_Reboot_OK} 点击关机确认按钮成功 定位关机确认按钮失败 Sleep 300s 页面重启操作 元素点击 ${Path_Title_ServerSetting_Reboot} 点击重启按钮成功 定位重启按钮失败 元素点击 ${Path_Title_ServerSetting_Reboot_OK} 点击重启确认按钮成功 定位重启确认按钮失败 页面重启服务操作 [Documentation] 功能:点击重启服务操作 ... ... 使用方法:页面重启服务操作 ... ... 变量:无 元素点击 ${Node_More_Operate} 点击展开节点操作 定位节点操作下拉失败 元素点击 ${Path_ServerSetting_RestartServ} 点击重启黑方服务 定位黑方服务重启按钮失败 元素点击 ${Path_Title_ServerSetting_Reboot_OK} 点击重启确认按钮成功 定位重启确认按钮失败 黑方服务器开机 [Arguments] ${BC_Name} ${Esxi_IP} ${Esxi_User} ${Esxi_PWD} Vsphere.Sphere Login ${Esxi_IP} ${Esxi_User} ${Esxi_PWD} log 登录esxi vm_poweron_name ${BC_Name} Sleep 5s vm_poweron_name ${BC_Name} log 开机成功 判断黑方服务是否启动 [Arguments] ${BC_IP} ${BC_Name} ${BC_PWD} [Documentation] 功能:循环判断黑方服务是否正常启动 ... ... 使用方法:判断黑方服务是否启动 ... ... 变量:无 Open Connection ${BC_IP} SSHLibrary.Login ${BC_Name} ${BC_PWD} log 黑方ssh连接成功 FOR ${n} IN RANGE 10 Execute Command systemctl status unabackup > /bc_status.txt ${bc_status} Execute Command grep "active (running)" /bc_status.txt ${BC_status_length} Get Length ${bc_status} Run Keyword If ${BC_status_length}>0 Exit For Loop ... ELSE log 黑方服务还未启动成功 sleep 60S END Run Keyword If ${BC_status_length}==0 Fail ... ELSE log 黑方服务启动成功 Close Connection sleep 60s 页面恢复出厂设置操作 元素点击 ${Path_Title_ServerSetting_FactoryReset} 点击恢复出厂设置成功 定位恢复出厂设置失败 Wait Until Element Is Visible ${Path_Title_ServerSetting_FactoryReset_User} 60s 定位用户名输入框失败 Set Focus To Element ${Path_Title_ServerSetting_FactoryReset_User} Input Text ${Path_Title_ServerSetting_FactoryReset_User} ${Sys_Admin} Wait Until Element Is Visible ${Path_Title_ServerSetting_FactoryReset_Password} 60s 定位密码输入框失败 Set Focus To Element ${Path_Title_ServerSetting_FactoryReset_Password} Input Text ${Path_Title_ServerSetting_FactoryReset_Password} ${WebPWD} 元素点击 ${Path_Title_ServerSetting_FactoryReset_Sure} 点击恢复出厂设置确认按钮成功 定位恢复出厂设置确认按钮失败 元素点击 ${Path_Title_ServerSetting_FactoryReset_Confirm_Sure} 点击恢复出厂设置再次确认按钮成功 定位恢复出厂设置再次确认按钮失败 设置报警邮箱_STMP不启用 [Arguments] ${OutBox} ${User} ${Port} 元素点击 ${Email_Config} 点击修改发送邮箱配置 定位发送邮箱配置立即修改按钮失败 Wait Until Element Is Visible ${Path_Input_SentEmailServer} 10s Run Keyword If '${OutBox}'=='' Log 发件箱保持原数值 ... ELSE Input Text ${Path_Input_SentEmailServer} ${OutBox} Run Keyword If '${User}'=='' Log 发件人保持原数值 ... ELSE Input Text ${Path_Input_SentEmailUser} ${User} Run Keyword If '${Port}'=='' Log 端口保持原数值 ... ELSE Input Text ${Path_Input_SentEmailPort} ${Port} 元素点击 ${Confirm_Change_Email} 点击确定按钮 定位确定按钮失败 Wait Until Page Contains Element ${Path_AlertInfo} 30s ${AlertMessage}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${AlertMessage} ${Res_Text_SetSuccess} 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 Log 报警邮箱-发件服务器设置完毕 进入防火墙设置页面 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${Path_Title_FireWallSettings} 进入防火墙设置页面 定位防火墙设置失败 新建防火墙策略 [Arguments] ${FWPanelname} ${FWDesIP} ${FWDesPort} ${FWStatus} 元素点击 ${Path_Button_AddFireWall} 点击新建防火墙策略按钮 定位新建防火墙策略按钮失败 Wait Until Page Contains Element ${Path_Title_AddFireWall} 30s 元素输入 ${Path_Input_FireWallPanelName} ${FWPanelname} 定位防火墙策略名称输入框失败 元素输入 ${Path_Input_FireWallPanelIP} ${FWDesIP} 定位防火墙策略名称输入框失败 元素输入 ${Path_Input_FireWallPanelPort} ${FWDesPort} 定位防火墙策略名称输入框失败 元素点击 ${Path_Select_FireWallPanelStrategy} 点击策略状态选择框 定位策略状态选择框失败 Run Keyword If "${FWStatus}"=="1" Click Element ${Path_Select_FireWallPanelStrategy_Start} ... ELSE IF "${FWStatus}"=="0" Click Element ${Path_Select_FireWallPanelStrategy_Stop} ... ELSE Fail 定位策略状态失败 元素点击 ${Path_Select_FireWallPanelFinish} 点击确认按钮 定位确认按钮失败 元素点击 ${Button_FireWallPanel_add_Ok_Confirm} 点击弹窗确认按钮 定位弹窗确认按钮失败 sleep 2s 编辑防火墙策略 [Arguments] ${FWPanelname} ${FWDesIP} ${FWDesPort} ${FWStatus} 元素点击 //td[@data-field="name"]/div[text()="${FWPanelname}"]/../../td/div/span[text()="编辑"] 点击防火墙策略编辑按钮 定位防火墙策略编辑失败 Wait Until Page Contains Element ${Path_Title_EditFireWall} 30s 元素输入 ${Path_Input_FireWallPanelIP} ${FWDesIP} 定位防火墙策略对端IP输入框失败 Run Keyword If "${FWDesPort}"!="null" 元素输入 ${Path_Input_FireWallPanelPort} ${FWDesPort} 定位防火墙策略对端端口输入框失败 ... ELSE IF "${FWDesPort}"=="null" Log 不需要修改防火墙端口 ... ELSE Fail 定位防火墙策略名称输入框失败 元素点击 ${Path_Select_FireWallPanelStrategy} 点击策略状态选择框 定位策略状态选择框失败 Run Keyword If "${FWStatus}"=="1" Click Element ${Path_Select_FireWallPanelStrategy_Start} ... ELSE IF "${FWStatus}"=="0" Click Element ${Path_Select_FireWallPanelStrategy_Stop} ... ELSE Fail 定位策略状态失败 元素点击 ${Path_Select_FireWallPanelFinish} 点击确认按钮 定位确认按钮失败 元素点击 ${Button_FireWallPanel_add_Ok_Confirm} 点击弹窗确认按钮 定位弹窗确认按钮失败 sleep 2s 停用或启用防火墙策略 [Arguments] ${FWPanelname} ${FWStatus} Run Keyword If "${FWStatus}"=="1" 元素点击 //td[@data-field="name"]/div[text()="${FWPanelname}"]/../../td/div/span[text()="启用"] 点击启用按钮 定位启用按钮失败 ... ELSE IF "${FWStatus}"=="0" 元素点击 //td[@data-field="name"]/div[text()="${FWPanelname}"]/../../td/div/span[text()="停用"] 点击停用按钮 定位停用按钮失败 ... ELSE Fail 定位停用或启用按钮失败 sleep 2s Run Keyword If "${FWStatus}"=="1" 元素点击 ${Button_FireWall_on_Confirm} 点击确认按钮 定位确认按钮失败 ... ELSE IF "${FWStatus}"=="0" 元素点击 ${Button_FireWall_off_Confirm} 点击确认按钮 定位确认按钮失败 ... ELSE Fail 定位停用或启用按钮失败 sleep 2s Wait Until Page Contains Element ${Button_FireWallPanel_add_Ok_Confirm} 30s 元素点击 ${Button_FireWallPanel_add_Ok_Confirm} 点击弹窗确认按钮 定位弹窗确认按钮失败 黑方启动微服务 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} ${FWDesPort} Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 Execute Command nohup python -m SimpleHTTPServer ${FWDesPort} > /dev/null 2>&1 & Log 启动微服务 Sleep 10s ${py_status} Execute Command ps -ef | grep SimpleHTTPServer | grep -v grep | wc -l Run Keyword If ${py_status}>0 Log 微服务开启 ... ELSE Fail 微服务未启动 Close Connection Sleep 5s 黑方停止微服务 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 Execute Command ps -ef | grep SimpleHTTPServer | grep -v grep | awk '{print $2}' | xargs kill -9 Log 停止微服务进程 Sleep 10s ${py_status} Execute Command ps -ef | grep SimpleHTTPServer | grep -v grep | wc -l Run Keyword If ${py_status}==0 Log 微服务停止 ... ELSE Fail 微服务未停止 Close Connection Sleep 5s 防火墙端口验证通过 [Arguments] ${AG_IP} ${AG_ROOT} ${AG_PWD} ${ChkFWDesIP} ${ChkFWDesPort} Open Connection ${AG_IP} SSHLibrary.Login ${AG_ROOT} ${AG_PWD} Log 登录黑方后台成功 Execute Command wget -t 1 --spider --timeout=10 -o /testFW.txt ${ChkFWDesIP}:${ChkFWDesPort} Log 验证防火墙端口是否开启 Sleep 15s ${py_status} Execute Command grep "connected." /testFW.txt | wc -l Run Keyword If ${py_status}>0 Log 防火墙策略IP与端口配置一致,验证通过 ... ELSE Fail 防火墙策略验证失败 Comment Execute Command rm -rf /testFW.txt Close Connection Sleep 5s 防火墙端口验证失败 [Arguments] ${AG_IP} ${AG_ROOT} ${AG_PWD} ${ChkFWDesIP} ${ChkFWDesPort} Open Connection ${AG_IP} SSHLibrary.Login ${AG_ROOT} ${AG_PWD} Log 登录黑方后台成功 Execute Command wget -t 1 --spider --timeout=10 -o /testFW.txt ${ChkFWDesIP}:${ChkFWDesPort} Log 验证防火墙端口是否开启 Sleep 15s ${py_status} Execute Command grep "failed: Connection timed out." /testFW.txt | wc -l Run Keyword If ${py_status}>0 Log 防火墙策略IP与端口连接超时 ... ELSE Fail 防火墙策略验证失败 Comment Execute Command rm -rf /testFW.txt Close Connection Sleep 5s 删除防火墙策略 [Arguments] ${FWPanelname} 元素点击 //td[@data-field="name"]/div[text()="${FWPanelname}"]/../../td/div/span[text()="删除"] 点击防火墙策略删除按钮 定位防火墙策略删除失败 sleep 2s 元素点击 ${Button_FireWall_Del_Can} 点击防火墙策略删除确认框取消按钮 定位防火墙策略删除确认框取消按钮失败 元素点击 //td[@data-field="name"]/div[text()="${FWPanelname}"]/../../td/div/span[text()="删除"] 点击防火墙策略删除按钮 定位防火墙策略删除失败 sleep 2s 元素点击 ${Button_FireWall_Del_Fin} 点击防火墙策略删除确认框确认按钮 定位防火墙策略删除确认框确认按钮失败 元素点击 ${Button_FireWallPanel_add_Ok_Confirm} 点击弹窗确认按钮 定位弹窗确认按钮失败 设置ntp服务器 [Arguments] ${NTP_IP} 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${Node_Setting} 点击切换到节点设置页面 定位节点设置页面失败 元素点击 ${Path_Button_SetNTP} 点击更改按钮 定位更改按钮失败 元素输入 ${Path_Input_NTPServer} ${NTP_IP} 定位服务器时间输入框失败 元素点击 ${Path_Button_SetNTPOK} 点击确定更改按钮 定位确定更改按钮失败 元素点击 ${Confirm_Twice} 点击确定完成重启 定位二次确定弹窗失败 sleep 2s 关闭浏览器 sleep 300s Open Connection ${Plantform_BC_IP_Excep} SSHLibrary.Login ${Plantform_BC_Name} ${Plantform_BC_PWD} Log 黑方连接成功 FOR ${n} IN RANGE 10 Execute Command systemctl status unabackup > /bc_status.txt ${bc_status} Execute Command grep "unabackup start success" /bc_status.txt ${bc_status_length} Get Length ${bc_status} Run Keyword If ${bc_status_length}>0 Exit For Loop ... ELSE Log 黑方服务还未启动 Sleep 30s END Run Keyword If ${bc_status_length}==0 Fail ... ELSE Log 黑方服务已启动 Close Connection sleep 2s 时间比对 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} ${NTP_IP} ${NTP_ROOT} ${NTP_PWD} Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 ${BC_TIME} Execute Command date +%s Log 黑方当前时间戳为:${BC_TIME} Close Connection Open Connection ${NTP_IP} SSHLibrary.Login ${NTP_ROOT} ${NTP_PWD} Log 登录黑方后台成功 ${NTP_TIME} Execute Command date +%s Log 时间同步服务器当前时间戳为:${BC_TIME} ${TIME_DIF} Evaluate ${NTP_TIME}-${BC_TIME} Run Keyword If ${TIME_DIF}<=3 Log 时间同步服务器与黑方时间同步正常,测试通过 ... ELSE Fail 时间同步服务器与黑方时间误差超过3秒 Close Connection sleep 2s 修改服务器时间为当前时间 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${Node_Setting} 点击切换到节点设置页面 定位节点设置页面失败 元素点击 ${Path_Button_SetTime} 点击更改按钮 定位更改按钮失败 元素点击 ${Path_Input_ServerTime} 点击服务器时间输入框 定位服务器时间输入框失败 元素点击 ${Laydate-btns-now} 点击服务器时间输入框现在按钮 定位服务器时间输入框现在按钮失败 ${status}= BuiltIn.Run Keyword And Return Status Wait Until Element Is Visible ${Laydate-btns-Confirm} 2s BuiltIn.Run Keyword If '${status}'== 'True' 元素点击 ${Laydate-btns-Confirm} 点击关闭提示信息框 定位修改时间影响提示框失败 元素点击 ${Path_Button_SetTimeOK} 点击确定按钮 定位确定修改按钮失败 元素点击 ${Path_Button_ServerAlertOK} 点击确定按钮 定位确定按钮失败 清理NTP服务器 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 Execute Command /unary/unabackup/bin/ntpset.sh -d Log 清理时间同步服务器 sleep 10s Close Connection 根据作业ID获取storageid [Arguments] ${ip} ${user} ${pwd} Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} ${storageidAll} Execute Command mysql -uunadba -p1223Bc@2008 -e "select storageid from unary.tbl_backupset where bktaskid='${taskID}'"; Set Suite Variable ${storageidAll} ${storageid} Set Variable ${storageidAll[10:42]} Set Global Variable ${storageid} Comment Return From Keyword ${storageid} Log storageid信息获取完毕 Close Connection 根据storageid获取guid前5位 [Arguments] ${ip} ${user} ${pwd} Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Execute Command /unary/unabackup/bin/mongo -uunary -pmonGo1223 mydb --eval 'db.objdb.find({"parentid":"${storageid}"})' > /test.txt log 输出结果放入test.txt文件 ${guidbig} Execute Command awk 'NR==5{print}' /test.txt |cut -c 59-63 log 获取guid前5位 ${guid} Evaluate "${guidbig}".lower() log guid字母改为小写 Set Global Variable ${guid} Execute Command rm -rf test.txt log 删除文件test.txt Comment Return From Keyword ${guid} Log guid信息获取完毕 Close Connection 获取备份作业taskID [Arguments] ${agent_name} 元素点击 ${Timed_DataProtect} 点击进入定时数据保护页面 定位定时数据保护失败 元素点击 xpath=//span[text()="${agent_name}"] 点击选择代理 定位代理所在位置失败 元素点击 ${Task} 点击进入作业页面 定位作业页面失败 元素点击 ${taskAction} 点击作业操作按钮 定位作业操作按钮失败 元素点击 ${taskActionDetail} 点击作业详情按钮 定位作业详情按钮失败 ${taskID}= Get Text ${taskIDweizhi} Set Global Variable ${taskID} 元素点击 ${closeDetail} 点击关闭详情页面按钮 定位关闭详情页面按钮失败 Comment Return From Keyword ${taskID} Log taskID获取成功 开关存储保护 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方控制台 定位默认黑方节点控制台失败 元素点击 ${securityConfiguration} 点击安全配置按钮 安全配置按钮定位失败 sleep 3s 元素点击 ${StoreProtect} 点击存储保护按钮 存储保护按钮定位失败 sleep 5s 根据storageid获取deviceid [Arguments] ${ip} ${user} ${pwd} Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Execute Command /unary/unabackup/bin/mongo -uunary -pmonGo1223 mydb --eval 'db.objdb.find({"parentid":"${storageid}"})' >> test.txt log 输出结果放入test.txt文件 ${deviceid} Execute Command awk 'NR==5{print}' test.txt |cut -c 180-187 log 获取deviceid Set Global Variable ${deviceid} Execute Command rm -rf test.txt log 删除文件test.txt Comment Return From Keyword ${deviceid} Log guid信息获取完毕 Close Connection 删除指定备份集 [Arguments] ${ip} ${user} ${pwd} Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} run keyword and return status 执行删除命令 ${deviceid} ${guid} 判断备份集删除成功 ${status} Execute Command find /mdstools/${deviceid}/ -name ${guid} ${length}= Get Length ${status} Should Be Equal As Strings ${length} 0 log 备份集删除成功 执行删除命令 [Arguments] ${deviceid} ${guid} Execute Command rm -rf /mdstools/${deviceid}/${guid} 判断备份集删除失败 ${status} Execute Command find /mdstools/${deviceid}/ -name ${guid} ${length}= Get Length ${status} Should not Be Equal As Strings ${length} 0 log 备份集删除失败 判断备份集删除结果 [Arguments] ${deleteStatus} Run Keyword If "${deleteStatus}"=="1" 判断备份集删除成功 ... ELSE IF "${deleteStatus}"=="0" 判断备份集删除失败 备份集立即清理 sleep 5s 元素点击 ${nowcheck} 点击立即执行成功 点击立即执行失败 元素点击 ${confirm} 点击确定成功 点击确定失败 元素点击 ${confirmagain} 点击确认成功 点击确认失败 筛选日志 [Arguments] ${level} ${ip} ${user} ${content} # 日志级别|IP|用户|日志内容 [Documentation] 功能:以日志等级,ip,用户,内容为筛选条件进行筛选 ... ... 使用方法:筛选日志 \ 日志等级 \ ip \ 用户 \ 内容 ... ... 变量:${level} ${ip} \ ${user} \ ${content} 元素点击 ${Log_Operate} 点击进入到操作日志界面 定位操作日志界面失败 Log 校验日志级别 Run Keyword If '${level}'=='${Log_InfoLevel}' Select From List By Label ${Log_Level_Select} ${level} ... ELSE IF '${level}'=='${Log_AlarmLevel}' Select From List By Label ${Log_Level_Select} ${level} ... ELSE IF '${level}'=='${Log_FaultLevel}' Select From List By Label ${Log_Level_Select} ${level} ... ELSE IF '${level}'=='全部级别' Select From List By Label ${Log_Level_Select} ${level} Run Keyword If '${level}'=='${Log_InfoLevel}' Wait Until Element Is Visible xpath=//td[text()="${Log_InfoLevel}"] 5s ... ELSE IF '${level}'=='${Log_AlarmLevel}' Wait Until Element Is Visible xpath=//td[text()="${Log_AlarmLevel}"] 5s ... ELSE IF '${level}'=='${Log_FaultLevel}' Wait Until Element Is Visible xpath=//td[text()="${Log_FaultLevel}"] 5s ... ELSE IF '${level}'=='全部级别' Log 不校验日志级别 Log 校验IP地址 Run Keyword If '${ip}'!='0' Run Keywords 元素输入 ${ELE_IPFilter} ${ip} 定位IP输入框失败 ... AND Press Keys ${ELE_IPFilter} ENTER ... ELSE IF '${ip}'=='0' Clear Element Text ${ELE_IPFilter} Run Keyword If '${ip}'!='0' Run Keywords Wait Until Element Is Visible xpath=//td[text()="${ip}"] 5s ... AND Log IP校验完毕 ... ELSE IF '${ip}'=='0' Log 不校验IP地址 Log 校验日志来源 Run Keyword If '${user}'!='0' Run Keywords 元素输入 ${ELE_UserFilter} ${user} 定位用户输入框失败 ... AND Press Keys ${ELE_UserFilter} ENTER ... ELSE IF '${user}'=='0' Clear Element Text ${ELE_UserFilter} Run Keyword If '${user}'!='0' Run Keywords Wait Until Element Is Visible xpath=//td[text()="${user}"] 5s ... AND Log 用户校验完毕 ... ELSE IF '${user}'=='0' Log 不校验产生日志的用户 Log 校验日志内容 Run Keyword If '${content}'!='0' Run Keywords 元素输入 ${ELE_ContentFilter} ${content} 定位内容输入框失败 ... AND Press Keys ${ELE_ContentFilter} ENTER ... ELSE IF '${content}'=='0' Clear Element Text ${ELE_ContentFilter} Run Keyword If '${content}'!='0' Run Keywords Wait Until Element Is Visible xpath=//td[contains(text(),"${content}")] 5s ... AND Log 内容校验完毕 ... ELSE IF '${content}'=='0' Log 不校验日志内容 Log 日志功能校验完毕 筛选日志_级别 [Arguments] ${level}=‘全部级别’ # 日志级别 [Documentation] 功能:以日志级别为筛选条件进行筛选 ... ... 使用方法:筛选日志_级别 \ 日志级别 ... ... 变量:${level} 元素点击 ${Log_Operate} 点击进入到操作日志界面 定位操作日志界面失败 Log 校验日志级别 Run Keyword If '${level}'=='${Log_InfoLevel}' Select From List By Label ${Log_Level_Select} ${level} ... ELSE IF '${level}'=='${Log_AlarmLevel}' Select From List By Label ${Log_Level_Select} ${level} ... ELSE IF '${level}'=='${Log_FaultLevel}' Select From List By Label ${Log_Level_Select} ${level} ... ELSE IF '${level}'=='全部级别' Select From List By Label ${Log_Level_Select} ${level} Run Keyword If '${level}'=='${Log_InfoLevel}' Wait Until Element Is Visible xpath=//td[text()="${Log_InfoLevel}"] 5s ... ELSE IF '${level}'=='${Log_AlarmLevel}' Wait Until Element Is Visible xpath=//td[text()="${Log_AlarmLevel}"] 5s ... ELSE IF '${level}'=='${Log_FaultLevel}' Wait Until Element Is Visible xpath=//td[text()="${Log_FaultLevel}"] 5s ... ELSE IF '${level}'=='全部级别' Log 不校验日志级别 筛选日志_用户 [Arguments] ${user}=0 # 用户 [Documentation] 功能:以用户名为筛选条件进行筛选 ... ... 使用方法:筛选日志_用户 \ 用户名 ... ... 变量:${user} 元素点击 ${Log_Operate} 点击进入到操作日志界面 定位操作日志界面失败 Log 校验用户日志 Run Keyword If '${user}'!='0' Run Keywords 元素输入 ${ELE_UserFilter} ${user} 定位用户输入框失败 ... AND Press Keys ${ELE_UserFilter} ENTER ... ELSE IF '${user}'=='0' Clear Element Text ${ELE_UserFilter} Run Keyword If '${user}'!='0' Run Keywords Wait Until Element Is Visible xpath=//td[text()="${user}"] 5s ... AND Log 用户校验完毕 ... ELSE IF '${user}'=='0' Log 不校验产生日志的用户 筛选日志_内容 [Arguments] ${content}=0 # 日志内容 [Documentation] 功能:以日志内容为筛选条件进行筛选 ... ... 使用方法:筛选日志_内容 \ 日志内容 ... ... 变量:${content} 元素点击 ${Log_Operate} 点击进入到操作日志界面 定位操作日志界面失败 Log 校验日志内容 Run Keyword If '${content}'!='0' Run Keywords 元素输入 ${ELE_ContentFilter} ${content} 定位内容输入框失败 ... AND Press Keys ${ELE_ContentFilter} ENTER ... ELSE IF '${content}'=='0' Clear Element Text ${ELE_ContentFilter} Run Keyword If '${content}'!='0' Run Keywords Wait Until Element Is Visible xpath=//td[contains(text(),"${content}")] 5s ... AND Log 内容校验完毕 ... ELSE IF '${content}'=='0' Log 不校验日志内容 筛选日志_IP [Arguments] ${ip}=0 # IP [Documentation] 功能:以ip为筛选条件进行筛选 ... ... 使用方法:筛选日志_ip \ ip地址 ... ... 变量:${ip} 元素点击 ${Log_Operate} 点击进入到操作日志界面 定位操作日志界面失败 Log 校验IP地址 Run Keyword If '${ip}'!='0' Run Keywords 元素输入 ${ELE_IPFilter} ${ip} 定位IP输入框失败 ... AND Press Keys ${ELE_IPFilter} ENTER ... ELSE IF '${ip}'=='0' Clear Element Text ${ELE_IPFilter} Run Keyword If '${ip}'!='0' Run Keywords Wait Until Element Is Visible xpath=//td[text()="${ip}"] 5s ... AND Log IP校验完毕 ... ELSE IF '${ip}'=='0' Log 不校验IP地址 锁定编辑框合法校验 [Documentation] 功能:校验锁定时间设置输入框合法性 ... ... 使用方法: 锁定编辑框合法性校验 ... ... 变量:无 元素点击 ${Sec_Policy} 进入sec管理员的安全配置 定位安全策略配置栏失败 Sleep 5s 设置超时时间 ABC 超时设置失败 设置超时时间 测试 超时设置失败 设置超时时间 @@ 超时设置失败 设置超时时间 1.1 超时设置失败 页面锁定设置 [Arguments] ${Lock_Time} # 锁定时间 [Documentation] 功能:页面锁定时间设置 ... ... 使用方法:页面锁定设置 \ 锁定时间(分钟) ... ... 变量:${Lock_Time} 设置超时时间 ${Lock_Time} 超时设置成功 Log 设置超时时间为${Lock_Time}分钟 ${Sleep_Time}= BuiltIn.Evaluate ${Lock_Time}*60 Sleep ${Sleep_Time}s Wait Until Element Is Visible ${Input_Lock_Name} 5s 页面锁定失败 元素输入 ${Input_Lock_Pwd} ${WebPWD} 定位解锁密码输入框失败 元素点击 ${Unlock_Button} 点击解锁页面 定位页面解锁按钮失败 设置超时时间 0 超时设置成功 Log 解除页面锁定限制 启动集成代理 元素点击 ${Active_Agent} 点击启用定时备份代理按钮 定位启用定时备份代理失败 元素点击 ${Choice_Vm} 点击勾选VM组件 定位VM组件失败 元素点击 ${Add_Agent} 点击添加VM组件 定位添加按钮失败 元素点击 ${Finish_Add_Agent} 点击确定完成组件选择 定位确定启用集成代理失败 Sleep 120s 元素点击 ${Auth_Confirm} 确认开启代理成功 定位二次确认按钮失败 元素点击 ${Close_Log} 关闭日志弹窗 定位日志弹窗失败 Sleep 5s Reload Page Wait Until Element Is Visible ${BC_Agent_Online} 5s 代理启动失败 Log 集成代理启动成功 关闭集成代理 元素点击 ${Stop_Agent} 点击关闭集成代理按钮 定位关闭集成代理失败 Sleep 60s 元素点击 ${Auth_Confirm} 确认开启代理成功 定位二次确认按钮失败 元素点击 ${Close_Log} 关闭日志弹窗 定位日志弹窗失败 Sleep 5s Reload Page Wait Until Element Is Visible ${BC_Agent_Offline} 5s 代理关闭失败 Log 集成代理关闭成功 集成代理操作 [Arguments] ${do} # 操作值 [Documentation] 功能:开启或关闭集成代理 ... ... 使用方法:集成代理操作 \ 开启/关闭 ... ... 变量:${do} ==0 \ 启动集成代理 ... ${do}==1 关闭集成代理 元素点击 ${System_Config} 进入系统设置栏 定位系统设置栏失败 循环点击 ${Business_Assistant} ${Integrate_Agent_Manage} 元素点击 ${Integrate_Agent_Manage} 进入集成代理管理栏 定位集成代理管理栏失败 Run Keyword If ${do}==0 启动集成代理 ... ELSE IF ${do}==1 关闭集成代理 SSH服务开启关闭 [Arguments] ${ip} ${user} ${pwd} # 黑方ip|用户名|用户密码 [Documentation] 功能:开启关闭SSH服务,并验证服务开启关闭后的状态是否正确 ... ... 使用方法:SSH服务开启关闭(默认SSH服务需要开启) ... ... 变量:无 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Execute Command service iptables start Close Connection 元素点击 ${Storage} 进入存储管理页面 定位存储管理栏失败 元素点击 ${Node_Manage} 点击进入到介质节点管理页面 定位介质节点管理页面失败 元素点击 ${Default_BC_Node} 点击介质节点管理下的默认黑方卡片 定位默认黑方节点卡片失败 元素点击 ${securityConfiguration} 点击安全配置按钮 安全配置按钮定位失败 元素点击 ${SSH_Switch} 点击关闭SSH服务 定位SSH开关失败 Sleep 10s SSH服务连接验证 ${N} 元素点击 ${SSH_Switch} 点击开启SSH服务 定位SSH开关失败 Sleep 10s SSH服务连接验证 ${Y} SSH服务超时设置 [Arguments] ${ip} ${user} ${pwd} ${ssh_time} # 黑方IP|黑方用户名|黑方密码|SSH超时时间 [Documentation] 功能:设置SSH超时连接,验证超时后是否无法执行远程命令 ... ... 使用方法:SSH服务超时设置 ... ... 变量:无 元素点击 ${securityConfiguration} 进入安全配置页面 定位安全配置页面失败 元素点击 ${Button_Change_Time} 点击更改开始编辑SSH连接超时时间 定位更改SSH连接时间失败 元素输入 ${Input_SSH_Time} ${ssh_time} 定位SSH超时时间输入框失败 Set Suite Variable ${ssh_time} 元素点击 ${Change_SSH_Confirm} 点击确定更改SSH超时连接时间 定位SSH超时连接时间失败 Comment 元素点击 ${confirmagain} SSH时间配置成功 定位SSH超时配置时间弹窗失败 SSH服务超时验证 Open Connection ${ip} SSHLibrary.Login ${user} ${pwd} Execute Command service iptables stop Close Connection SSH服务连接验证 [Arguments] ${status} # 连接结果判断 [Documentation] 功能:判断当前SSH是否可以连接 ... ... 使用方法:SSH服务连接验证 ... ... 变量:${status} ... 状态为1表示ssh可连接,${result}表示连接结果,True表示连接成功,False表示连接失败 Open Connection ${Plantform_BC_IP} ${result}= BuiltIn.Run Keyword And Return Status SSHLibrary.Login ${Plantform_BC_Name} ${Plantform_BC_PWD} BuiltIn.Run Keyword If ${status}==1 and ${result}==True Log SSH当前服务开启中 ... ELSE IF ${status}==0 and ${result}==False Log SSH当前服务关闭中 ... ELSE Fail SSH服务当前异常! SSH服务超时验证 [Documentation] 功能:验证超时后无法执行远程命令 ... ... 使用方法:SSH服务超时验证 ... ... 变量:无 Open Connection ${Plantform_BC_IP} SSHLibrary.Login root 2008Bc1223!@# ${ssh_time} Evaluate ${ssh_time}+5 Sleep ${ssh_time}s ${result}= BuiltIn.Run Keyword And Return Status write ifconfig BuiltIn.Run Keyword If ${result}==False Log ssh超时设置成功 ... ELSE Fail SSH超时设置失败 新建路由_网络 [Arguments] ${Input_IP} ${Input_Netmask} ${Input_Gateway} ${Input_inter} # 目的地IP|子网掩码|网关|网卡接口 [Documentation] 功能:创建路由时校验输入为空会报错;输入合法的IP、子网掩码、网关、网卡接口后会创建成功 ... ... 参数:IP、子网掩码、网关、网卡接口 元素点击 ${Create_Route} 点击新建路由按钮 定位新建路由按钮失败 Wait Until Element Is Visible ${Select_IPV4} 60s 打开新建路由页面失败 元素点击 ${Btn_Addroute} 点击确定按钮成功 定位确定按钮失败 Wait Until Element Is Visible ${Create_Route_Error} 60s 报错窗口弹出失败 元素点击 ${Btn_Define} 点击二次确定按钮 定位二次确定按钮失败 log 验证必选项输入为空时,点击确定按钮会报错 元素输入 ${Route_Destination} ${Input_IP} 输入目的地IP失败 元素输入 ${Route_Mask} ${Input_Netmask} 输入子网掩码失败 元素输入 ${Route_Gateway} ${Input_Gateway} 输入网关失败 元素输入 ${Route_Interface} ${Input_inter} 输入接口失败 元素点击 ${Btn_Addroute} 点击确定按钮成功 定位确定按钮失败 元素点击 ${Btn_Define} 点击二次确定按钮 定位二次确定按钮失败 log 验证输入合法地址时,路由创建成功 新建路由_主机 [Arguments] ${Input_IP} ${Input_Gateway} ${Input_inter} # 目的地IP|网关|网卡接口 元素点击 ${Create_Route} 点击新建路由按钮 定位新建路由按钮失败 Wait Until Element Is Visible ${Select_IPV4} 60s 打开新建路由页面失败 元素点击 ${Select_Route_Destination} 打开目的地选项 定位目的地选项失败 元素点击 ${Option_Host} 选择主机 定位主机选项失败 元素点击 ${Btn_Addroute} 点击确定按钮成功 定位确定按钮失败 Wait Until Element Is Visible ${Create_Route_Error} 60s 报错窗口弹出失败 元素点击 ${Btn_Define} 点击二次确定按钮 定位二次确定按钮失败 log 验证必选项输入为空时,点击确定按钮会报错 元素输入 ${Route_Destination} ${Input_IP} 输入目的地IP失败 元素输入 ${Route_Gateway} ${Input_Gateway} 输入网关失败 元素输入 ${Route_Interface} ${Input_inter} 输入接口失败 元素点击 ${Btn_Addroute} 点击确定按钮成功 定位确定按钮失败 元素点击 ${Btn_Define} 点击二次确定按钮 定位二次确定按钮失败 log 验证输入合法地址时,路由创建成功 新建路由_默认网关 [Arguments] ${GATEWAY} # 网关 元素点击 ${Create_Route} 点击新建路由按钮 定位新建路由按钮失败 Wait Until Element Is Visible ${Select_IPV4} 60s 打开新建路由页面失败 元素点击 ${Select_Route_Destination} 打开目的地选项 定位目的地选项失败 元素点击 ${Option_Gateway} 选择默认网关 定位默认网关选项失败 元素点击 ${Btn_Addroute} 点击确定按钮成功 定位确定按钮失败 Wait Until Element Is Visible ${Create_Route_Error} 60s 报错窗口弹出失败 元素点击 ${Btn_Define} 点击二次确定按钮 定位二次确定按钮失败 log 验证必选项输入为空时,点击确定按钮会报错 元素输入 ${Route_Gateway} ${GATEWAY} 输入网关失败 元素点击 ${Btn_Addroute} 点击确定按钮成功 定位确定按钮失败 元素点击 ${Btn_Define} 点击二次确定按钮 定位二次确定按钮失败 log 验证输入合法地址时,路由创建成功 删除路由操作 [Arguments] ${Route_IP} # 目的地IP [Documentation] 功能:删除指定路由 ... ... 参数:目的地IP Wait Until Page Contains Element ${H5_Route} 60s 进入路由配置页面失败 元素点击 xpath=//td[@align="center" and contains(text(),"${Route_IP}")]/../td[5]/div/button 点击删除按钮成功 定位删除按钮失败 元素点击 ${Btn_Del_Route} 点击确定删除成功 定位确定删除按钮失败 元素点击 ${Btn_Define} 点击二次确定按钮 定位二次确定按钮失败 新建告警规则 [Arguments] ${AlarmRule_Name} ${AlarmRule_Level} ${AlarmRule_Type1} ${AlarmRule_Type2} ${AlarmRule_Limit} ${AlarmRule_Mail} # 报警规则名称|报警规则级别|报警规则类型1|报警规则类型2|报警抑制规则|接收邮箱 [Documentation] 功能:新建邮箱报警规则 ... ... 参数:报警规则名称|报警规则级别|报警规则类型1|报警规则类型2|报警抑制规则|接收邮箱 进入报警规则设置页面 进入添加规则页面 设置规则名称 ${AlarmRule_Name} 设置过滤规则级别 ${AlarmRule_Level} 设置过滤规则类型 ${AlarmRule_Type1} ${AlarmRule_Type2} 设置过滤规则抑制规则 ${AlarmRule_Limit} 设置接收邮箱 ${AlarmRule_Mail} 确认添加报警规则成功 发送邮箱环境还原_取消勾选SMTP 元素点击 ${Email_Config} 点击修改发送邮箱配置 定位发送邮箱配置立即修改按钮失败 Wait Until Element Is Visible ${Path_Input_SentEmailServer} 10s 元素输入 ${Path_Input_SentEmailPassword_Password} ${empty} SMTP密码输入空失败 元素点击 ${Enable_SMTP} 取消启用SMTP 定位SMTP勾选框失败 元素点击 ${Confirm_Change_Email} 点击确定按钮 定位确定按钮失败 Wait Until Page Contains Element ${Path_AlertInfo} 30s ${AlertMessage}= Get Text ${Path_AlertInfo} Should Be Equal As Strings ${AlertMessage} ${Res_Text_SetSuccess} 元素点击 ${Path_Button_Alert_OK} 点击确定按钮 定位确定按钮失败 Log 发送邮箱环境已还原为取消勾选SMTP 开启防火墙 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} # 黑方IP|黑方后台登录名|黑方后台登录密码 Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 Execute Command service iptables start Log 启动防火墙 Close Connection 生成告警信息 [Arguments] ${BC_IP} ${BC_ROOT} ${BC_PWD} Open Connection ${BC_IP} SSHLibrary.Login ${BC_ROOT} ${BC_PWD} Log 登录黑方后台成功 Execute Command nohup java -jar /opt/bksoft/ubackup/lib/cn.com.unary.testalarm-1.0.0.jar 127.0.0.1 auditlog 2 4 5 MDS "osviserver process is restarted" >> mdsdeamon.log 2>&1 & Log 生成告警信息 Close Connection 清空黑方操作日志 [Arguments] ${ip} ${name} ${pwd} Connect To Database Using Custom Params pymysql host='${ip}', port=${BCPort}, user='${BCUser}', passwd='${BCPwd}', db='unary', charset= 'utf8' Execute Sql String use unary; Execute Sql String delete from tbl_log; Disconnect From Database Log 断开数据库连接 备份参数模板合法性校验 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 元素点击 ${Policy_Template} 点击系统管理页面 定位系统管理栏失败 Log 模板名称校验 元素点击 ${Confirm_PolicyTemplate} 点击确定按钮,进行模板名称置空校验 定位策略模板确定按钮定位失败 Wait Until Element Is Visible ${Button_Error_Confirm} 5s 定位策略名为空弹窗失败 元素点击 ${Button_Error_Confirm} 点击确定关闭错误提示弹窗 定位错误提示弹窗确定按钮失败 Log 策略模板置空校验成功,开始校验特殊字符 元素点击 ${Storage_Switch} 点击存储路径开关,至少开启一个模板选项 存储模板选项失败 元素输入 ${DPM_PT_Name} ${Special_TXT} 定位策略名输入框失败 元素点击 ${Confirm_PolicyTemplate} 点击确定按钮,进行模板名称特殊字符校验 定位策略模板确定按钮定位失败 Wait Until Element Is Visible ${Error_Character_TemplateName} 5s 定位策略名字内容符违规弹窗失败 元素点击 ${Button_Error_Confirm} 点击确定关闭错误提示弹窗 定位错误提示弹窗确定按钮失败 元素点击 ${Reset_PolicyTemplate} 点击重置输入 定位重置按钮失败 Sleep 2s Log 策略模板名称输入特殊字符校验成功,开始校验存储选项 元素输入 ${DPM_PT_Name} ${English_TXT} 定位策略名输入框失败 元素点击 ${Storage_Switch} 点击存储路径开关,至少开启一个模板选项 存储模板选项失败 元素点击 ${Storage_Dedup} 点击勾选重删,但不勾选重删介质 定位重删介质勾选框失败 元素点击 ${Confirm_PolicyTemplate} 点击确定按钮,重删空值校验 定位策略模板确定按钮定位失败 Wait Until Element Is Visible ${Error_Content} 5s 定位策略内容校验弹窗失败 元素点击 ${Button_Error_Confirm} 点击确定关闭错误提示弹窗 定位错误提示弹窗确定按钮失败 元素点击 ${Reset_PolicyTemplate} 点击重置输入 定位重置按钮失败 Sleep 2s Log 策略模板重删选项置空校验成功,开始校验保留时间选项 元素输入 ${DPM_PT_Name} ${English_TXT} 定位策略名输入框失败 元素点击 ${Keep_Switch} 开启备份集保留时间选项 定位备份集保留时间开关失败 元素点击 ${Confirm_PolicyTemplate} 点击确定按钮,按日保留时间输入置空 定位策略模板确定按钮定位失败 Wait Until Element Is Visible ${Error_Content} 5s 定位策略名字内容符违规弹窗失败 元素点击 ${Button_Error_Confirm} 点击确定关闭错误提示弹窗 定位错误提示弹窗确定按钮失败 元素点击 ${Keep_By_Num} 点击勾选按照个数保留 定位按照个数保留选项失败 元素点击 ${Confirm_PolicyTemplate} 点击确定按钮,按日保留时间输入置空 定位策略模板确定按钮定位失败 Wait Until Element Is Visible ${Error_Content} 5s 定位策略名字内容符违规弹窗失败 元素点击 ${Button_Error_Confirm} 点击确定关闭错误提示弹窗 定位错误提示弹窗确定按钮失败 元素点击 ${Reset_PolicyTemplate} 点击重置输入 定位重置按钮失败 Sleep 2s Log 保留时间选项置空校验成功 创建备份参数模板 元素点击 ${System_Config} 进入系统设置页面 定位系统设置失败 元素点击 ${Policy_Template} 点击系统管理页面 定位系统管理栏失败 ${date} Evaluate time.strftime('%Y%m%d%H%M%S',time.localtime()) time ${random_strategyName}= Catenate SEPARATOR=_ Template ${date} 元素输入 ${DPM_PT_Name} ${random_strategyName} 定位策略名输入框失败 元素点击 ${Storage_Switch} 开启存储配置开关 存储模板选项失败 元素点击 ${Storage_MDServer} 点击展开介质服务器选项 定位介质服务器下拉选项失败 元素点击 xpath=//option[text()="${Plantform_BC_Agent}"] 点击选择介质服务器即黑方名称 定位黑方名称选项失败 元素点击 ${Storage_MDSIP} 点击展开介质服务器数据通道选项 定位介质服务器数据通道失败 元素点击 xpath=//option[text()="${Plantform_BC_IP}"] 点击选择介质服务器IP选项 定位介质服务器IP选项失败 元素点击 ${Storage_MDSName} 点击展开介质服务器介质选项 定位介质服务器介质选项失败 元素点击 xpath=//option[text()="${PT}"] 点击选择介质名称选项 定位介质服务器介质选项失败 元素点击 ${Storage_Dedup} 点击勾选重删选项 定位重删选项勾选框失败 元素点击 ${Storage_Select_Dedup} 点击展开重删选项 定位重删选项失败 元素点击 xpath=//option[text()="${YDCS}"] 点击勾选源端重删 定位源端重删介质选项失败 元素点击 ${Keep_Switch} 开启保留时间设置开关 定位保留时间设置开关失败 元素输入 ${Keep_Time_TemplatePolicy} 1 定位保留时间输入框失败 元素点击 ${Never_Expire} 取消勾选最新备份集永久设定 定位最新备份集永久设定选项失败 元素点击 ${Encryption_Switch} 开启加密设置开关 定位加密设置开关失败 元素点击 ${Encryption_Select} 勾选加密选项 定位加密选项勾选框失败 元素点击 ${Bk_Senior_Switch} 开启备份集高级选项配置开关 定位备份集高级选项配置开关失败 元素点击 ${Compress_Select} 勾选压缩选项 定位压缩选项失败 元素点击 ${Check_Select} 勾选校验选项 定位校验选项失败 元素点击 ${Confirm_PolicyTemplate} 点击确定按钮完成策略模板创建 定位策略模板确定按钮定位失败