From 4ac298ee041de644d5797b94a26fd987ee812dfd Mon Sep 17 00:00:00 2001 From: halliday Date: Mon, 18 Dec 2023 17:34:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/task4/Config/CDM/CDM_config.py | 10 +- .../task4/Resource/RE0_Common/KeyWord.robot | 6 +- .../task4/Resource/RE2_CDM/ElementPath.robot | 14 ++ .../Resource/RE2_CDM/KeyWord_Sqlserver.robot | 174 ++++++++++++++++++ .../03_SQLServer/CDM_SQLServer_mh.robot | 45 +++++ 5 files changed, 245 insertions(+), 4 deletions(-) create mode 100644 Project/task4/TestCase/TC5_CDM/System_Testing/03_SQLServer/CDM_SQLServer_mh.robot diff --git a/Project/task4/Config/CDM/CDM_config.py b/Project/task4/Config/CDM/CDM_config.py index 6253976..22ee3c3 100644 --- a/Project/task4/Config/CDM/CDM_config.py +++ b/Project/task4/Config/CDM/CDM_config.py @@ -12,7 +12,7 @@ importlib.reload(sys) #黑方配置项,需满足下列配置参数,或将下列参数改为实际黑方中的参数 CDM_BC_IP = '10.10.14.90' #黑方IP CDM_BC_IP2 = '10.18.32.221' #第二台黑方IP -CDM_BC_NEWIP = '10.18.32.221' #新黑方IP +CDM_BC_NEWIP = '10.10.13.197' #新黑方IP CDM_BC_Url = 'https://'+CDM_BC_IP #黑方服务器访问URL CDM_BC_Url2 = 'https://'+CDM_BC_IP2 #第二台黑方服务器访问URL CDM_BC_NEWUrl = 'https://'+CDM_BC_NEWIP #新黑方服务器访问URL @@ -143,6 +143,14 @@ SQLserver_CheckType = 'SQLserver' #SQLserver身份验证类型 SQLserverCDM_HostUser='administrator' SQLserverCDM_HostPWD='unary@2008' +# SQLSERVER备份与恢复_MH任务4 +CDM_MSSql_HostName_Mh = 'SqlserverCDM' +CDM_MSSql_IP_Local_Mh = '10.10.13.249' #SQLSERVER的地址 +CDM_MSSql_TableName_Mh = 'TABLE_TEST' #表名称 +CDM_MSSql_DB_Mh = 'UNARY' #库名 +SQLserver_CheckType_Mh = 'windows' #windows身份验证类型 +recTargetPath='C:\\data' + #SQLSERVER——CDM兼容性环境:win2003-SQLServer2000SP4-32bit CDM_MSSql_HostName_Win2003 = 'sqltest2' CDM_MSSql_DB_User_Win2003 = 'sa' diff --git a/Project/task4/Resource/RE0_Common/KeyWord.robot b/Project/task4/Resource/RE0_Common/KeyWord.robot index 6093fb0..bf86154 100644 --- a/Project/task4/Resource/RE0_Common/KeyWord.robot +++ b/Project/task4/Resource/RE0_Common/KeyWord.robot @@ -2,15 +2,15 @@ Library SSHLibrary Library Selenium2Library Resource ElementPath.robot -Library ../../Script/SC0_Common/00_Initial/Vsphere.py +#Library ../../Script/SC0_Common/00_Initial/Vsphere.py Library DatabaseLibrary -Library AutoItLibrary +#Library AutoItLibrary Library Process *** Keywords *** 登录黑方 [Arguments] ${IPaddress} ${login_name} ${login_pwd} # 黑方服务器IP地址 \| 登录名称 \| 登录密码 - Open Browser ${IPaddress} ff \ \ \ \ \ \ C:/Python38/geckodriver.exe + Open Browser ${IPaddress} ff Sleep 2s Set Window Size 1920 1080 Log 切换浏览器窗口 1920*1080 diff --git a/Project/task4/Resource/RE2_CDM/ElementPath.robot b/Project/task4/Resource/RE2_CDM/ElementPath.robot index 1c36705..5c8c5c6 100644 --- a/Project/task4/Resource/RE2_CDM/ElementPath.robot +++ b/Project/task4/Resource/RE2_CDM/ElementPath.robot @@ -405,5 +405,19 @@ ${FileCDM_MountSetp1} xpath=//*[@id="dpm_file_addRecoveryPolicy_nextStep0_qu ${FileCDM_MountFin} xpath=//*[@id="dpm_file_addRecoveryPolicy_step2Implement_quickMode_btn"] #副本FileCDM--快速挂载--高级选项--确定 #${FileCDM_Confirm} #xpath=//*[@id="layui-layer21"]//a[text()="确认"] #副本FileCDM--快速挂载--高级选项--确定--确认挂载 ${FileCDM_UmountOK} xpath=//*[@id="cdm_application_system_uninstall_btn_confirm"] #副本FileCDM--副本应用--卸载--确定 +# mh作业4新增的 +${Select_bk_SQLDB_UNARY} xpath=//span[contains(text(),"UNARY(")]/../../td[2] # 副本数据备份—目标数据库—test数据库勾选框 +${Recover_Target_UNARY} xpath=//span[text()="UNARY"]/../../td[2] # 副本数据恢复—目标数据库—test数据库勾选框 +${Button_baseFilter_CDM} id=dialogues_baseFilter_filterBtn_btn # 副本数据备份-新建备份策略-目标数据库-过滤设置按钮 +${Button_baseFilter_baseFilterKe_CDM} id=dialogues_baseFilter_baseFilterKey_btn # 副本数据备份-新建备份策略-过滤设置-关键字过滤 +${Input_baseFilter_keyFilterCon_CDM} id=keyFilterCon # 副本数据备份-新建备份策略-过滤设置-关键字输入框 +${Button_baseFilter_keyFilterCon_add} xpath=//button[@id='dialogues_baseFilter_filterModalSure_btn'][text()="添加"] # 副本数据备份-新建备份策略-过滤设置-关键字过滤-添加 +${Button_baseFilter_keyFilterCon_ok} xpath=//button[@id='dialogues_baseFilter_filterModalSure_btn'][text()="确定"] # 副本数据备份-新建备份策略-过滤设置-关键字过滤-确定 +${input_policy_backTabPolicy} id=backTabPolicy # 副本数据恢复-备份集-查询策略名输入框 +${Count_bk_num} $(".layui-table-body.layui-table-main").find("tr").length # 副本数据恢复-备份集-备份集数据量 +${input_cdm_tab_work_PolicyName} id=workPolicyName # 黑方操作页面-作业-策略名输入框 +${Button_cdm_tab_work_search} id=cdm_tab_work_workPolicyName_search_span # 黑方操作页面-副本数据管理-作业页面查询 +${Jquery_select_count} $("#pcWorktable_cdm_outerDiv").find("tr").length # 黑方操作页面-作业详情页面-作业个数 +${Jquery_task_status} $("#pcWorktable_cdm_outerDiv").find("td").eq(-2)[0].textContent # 黑方操作页面-作业详情页面-作业状态 diff --git a/Project/task4/Resource/RE2_CDM/KeyWord_Sqlserver.robot b/Project/task4/Resource/RE2_CDM/KeyWord_Sqlserver.robot index d9fcd99..db7be6e 100644 --- a/Project/task4/Resource/RE2_CDM/KeyWord_Sqlserver.robot +++ b/Project/task4/Resource/RE2_CDM/KeyWord_Sqlserver.robot @@ -7,6 +7,7 @@ Library DateTime Library string Resource ../RE3_DPM/ElementPath.robot Resource ../RE12_Archive/ElementPath.robot +Variables ../../Config/CDM/CDM_config.py *** Keywords *** Sqlserver备份 @@ -305,6 +306,121 @@ SQLServer_CDM停止挂载 元素点击 xpath=//a[@id="unnamed_module_layerCancel"] 点击确定按钮成功 点击确定按钮失败 Log 停止挂载成功 + +MSSQL_CDM备份 + [Arguments] ${agent_name} ${SQLserver_CheckType} ${Pipeline_encryption} ${Pipeline_compression} ${Pipeline_dedup} + 元素点击 ${CDM_dataProtect} 点击副本数据保护成功 定位副本数据保护定位失败 + 元素输入 ${Input_Oracle_SearchName} ${agent_name} 定位搜索输入框失败 + sleep 10s + 元素点击 xpath=//span[text()="${agent_name}"] 选择备份代理 定位备份代理失败 + SQLserver_cdm策略清理 + 元素点击 ${Add_Sqlserver_Policy} 点击添加策略按钮 定位策略添加按钮失败 + 元素点击 ${Module_Sqlserver} 选择sqlserver数据模块 定位sqlserver模块失败 + log 定义策略名规则 + ${policy_head} Set Variable 完全备份 + ${date} Get Current Date result_format=%Y%m%d%H%M%S + ${random_strategyName}= Catenate SEPARATOR=_ ${policy_head} ${date} + Set Global Variable ${random_strategyName} + log 输入策略名 + 元素输入 ${Policy_Name} ${random_strategyName} 定位策略名输入框失败 + Run Keyword If "${SQLserver_CheckType}"=="windows" windows身份验证 + ... ELSE IF "${SQLserver_CheckType}"=="SQLserver" SQLserver身份验证 + 元素点击 ${Instance_Nextstep} 点击进入下一步目标数据库选择页面 定位下一步按钮失败 + 元素点击 ${Select_bk_SQLDB_test} 勾选指定数据库 定位指定数据库勾选框失败 + 元素点击 ${Select_bk_SQLDB_UNARY} 勾选指定数据库 定位指定数据库勾选框失败 + 元素点击 ${Button_baseFilter_CDM} 点击过滤设置 定位过滤设置失败 + 元素点击 ${Button_baseFilter_baseFilterKe_CDM} 点击文字过滤 定位文字过滤设置失败 + 元素输入 ${Input_baseFilter_keyFilterCon_CDM} test 定位关键字输入框失败 + 元素点击 ${Button_baseFilter_keyFilterCon_add} 点击添加关键字 定位添加按钮失败 + 元素点击 ${Button_baseFilter_keyFilterCon_ok} 点击确定确定添加关键字 定位添加按钮失败 + 元素点击 ${Select_DB_Nextstep} 点击下一步进入任务周期选择界面 定位下一步按钮失败 + 元素点击 ${AddTaskCycle} 点击添加任务周期 添加任务周期定位失败 + 元素点击 ${Cycle_Onetime} 选择仅备份一次 定位一次循环模式定位失败 + 元素点击 ${Cycle_Confirm} 点击确认完成任务周期设置 任务周期确定定位失败 + 元素点击 ${Cycle_Nextstep} 点击下一步进入备份集存储页面 任务周期下一步定位失败 + Comment Run Keyword If ${Pipeline_dedup}==1 管道重删 + ... ELSE log 不重删 + 元素点击 ${Storage_Nextstep} 点击下一步进入到备份高级选项页面 定位下一步按钮失败 + Run Keyword If ${Pipeline_encryption}==1 管道加密 + ... ELSE log 不加密 + Run Keyword If ${Pipeline_compression}==1 管道压缩 + ... ELSE log 不压缩 + Run Keyword If ${Pipeline_dedup}==1 管道重删 + ... ELSE log 不重删 + Comment Run Keyword If ${check_attr}==1 校验 + Comment Run Keyword If ${cache}==1 备份缓存 /opt + Comment 元素点击 ${Senior_Nextstep} 点击下一步进入到信息确认 定位下一步按钮失败 + 元素点击 ${SQLServer_PolicyComplete} 点击完成策略创建 定位策略完成失败 + Sleep 2s + 元素点击 ${Success_Confirm} 策略确定创建完毕 定位策略创建成功弹窗失败 + MSSQL作业校验 ${random_strategyName} + Log 备份作业执行成功 + +MSSQL作业校验 + [Arguments] ${workname} + # 切换到作业 + 元素点击 ${Normal_Tab_Work} 点击切换到作业栏 定位作业栏失败 + # 输入策略查询 + 元素输入 ${input_cdm_tab_work_PolicyName} ${workname} 定位关键字输入框失败 + 元素点击 ${Button_cdm_tab_work_search} 点击查询按钮 定位查询按钮失败 + # 确认创建成功了 + FOR ${counter} IN RANGE 20 + Log ${counter} + ${select_text}= Execute Javascript return ${Jquery_select_count} + Log 查询到的作业个数:${select_text} + Run Keyword If '${select_text}' >= '2' Exit For Loop + ... ELSE Log 作业尚未创建 + Sleep 2s + 元素点击 ${Button_cdm_tab_work_search} 点击查询按钮 定位查询按钮失败 + END + Log 作业创建成功,正在运行中 + # 等待运行完成 + FOR ${index} IN RANGE 300 + Log 第${index}次查询作业状态 + ${task_run}= Execute Javascript return ${Jquery_task_status} + Log 作业状态:${task_run} + Run Keyword If '${task_run}' == '成功' or '${task_run}' == '失败' Exit For Loop + ... ELSE Log 任务尚未执行完成 + Sleep 2s + 元素点击 ${Button_cdm_tab_work_search} 点击查询按钮 定位查询按钮失败 + END + # 最后再判断一下确保是成功的 + Should Be Equal As Strings ${task_run} 成功 任务运行失败 + Log 作业策略执行成功 + +MSSQL_CDM恢复 + 元素点击 ${Backup_html} 点击进入备份集恢复界面 定位副本数据按钮失败 + sleep 5s + # 校验上一步备份产生的结果 + 元素输入 ${input_policy_backTabPolicy} ${random_strategyName} 定位查询备份策略输入框失败 + 元素点击 ${Cycle_Search_PolicyName} 点击查询按钮 定位查询按钮失败 + # 获取查询到的数量 + ${select_count}= Execute Javascript return ${Count_bk_num} + Run Keyword If '${select_count}' != '1' Fail 产生的备份集数量不对 + ... ELSE Log 备份结果正确 + #进行恢复 + 元素点击 xpath=//tr[@data-index=0]//button[@id="backupAction_${random_strategyName}"] 点击展开操作 定位备份集操作按钮下拉框失败 + sleep 5s + 元素点击 ${CDM_BK_Recover} 点击恢复操作 定位恢复按钮失败 + sleep 5s + 元素点击 ${Recover_Nextstep_SQLServer} 点击下一步进入实例选择界面 定位下一步按钮失败 + 元素点击 ${Recover_Instance_Select_Nextstep} 点击下一步进入目标数据库选择界面 定位下一步按钮失败 + 元素点击 ${Recover_Target_UNARY} 点击勾选恢复的数据库 定位需要恢复的数据库失败 + 元素点击 ${Select_DB_Nextstep1} 点击下一步进入高级选项 定位下一步按钮失败 + 元素点击 ${Origin_Name_Recover} 点击勾选原名恢复 定位异名恢复按钮失败 + 元素输入 ${Recover_xpath} ${recTargetPath} 定位恢复指定路径输入框失败 + Comment 元素点击 xpath=//button[@id="cdm_sqlServer_addRecoveryPolicy_backStep45_btn"] 点击下一步进入确认恢复页面 点击下一步按钮失败 + 元素点击 ${SQLServer_BackupComplete} 点击完成按钮完成恢复策略创建 定位完成按钮失败 + 元素点击 ${Btn_Second_Define} 点击确认执行执行恢复 定位确认失败 + 元素点击 ${Success_Confirm} 确认恢复策略创建完成 定位恢复确认弹窗失败 + # 恢复作业的作业名是根据时间来的,这里生成一下 + ${Date}= Get Current Date result_format=%Y-%m-%d %H:%M + ${recoveryname}= Catenate SEPARATOR= 恢复策略 ${Date[:-1]} + Log 恢复作业的名称是:${recoveryname} + MSSQL作业校验 ${recoveryname} + Log 恢复作业执行成功 + + 执行SQL建表 [Arguments] ${tablename} ${hostip} ${CDMSQL_PWD} ${CDMSQL_DB_User} ${CDMMSSql_DB} 执行SQL删表 ${tablename} ${hostip} ${CDMSQL_PWD} @@ -330,6 +446,64 @@ SQLServer_CDM停止挂载 Disconnect From Database Log 断开数据库连接 + +MSSQL建库 + [Arguments] ${databasename} ${hostip} ${SQLServer_passwd} + MSSQL删库 ${databasename} ${hostip} ${SQLServer_passwd} + log 连接数据库 + Connect To Database Using Custom Params pymssql host='${hostip}',user='${CDM_MSSql_DB_User}',password='${SQLServer_passwd}',autocommit=${True} + log 创建UNARYK库 + Execute Sql String create database ${databasename} + Disconnect From Database + Log 断开数据库连接 + +MSSQL删库 + [Arguments] ${databasename} ${hostip} ${SQLServer_passwd} + Connect To Database Using Custom Params pymssql host='${hostip}',user='${CDM_MSSql_DB_User}',password='${SQLServer_passwd}',database='master',autocommit=${True} + ${row_count} Row Count SELECT \ * FROM master.dbo.sysdatabases where name='${databasename}' + Run Keyword IF ${row_count}>0 Execute Sql String DROP DATABASE ${databasename} + Disconnect From Database + Log 断开数据库连接 + +MSSQL建表并插入当前时间点 + [Arguments] ${tablename} ${hostip} ${CDMSQL_PWD} ${CDMSQL_DB_User} ${CDMMSSql_DB} + log 连接数据库 + Connect To Database Using Custom Params pymssql host='${hostip}',user='${CDMSQL_DB_User}',password='${CDMSQL_PWD}',database='${CDMMSSql_DB}' + log 创建数据表 + Execute Sql String create table ${tablename}(test char(50)) + log 插入数据 + ${Date}= Get Current Date result_format=%Y%m%d%H%M%S + Log 插入:${Date} + Execute Sql String insert into ${tablename}(test) values('${Date}') + ${out}= Row Count select * from ${tablename} + Set Suite Variable ${out} + log ${out} + Disconnect From Database + Log 断开数据库连接 + +MSSQL删除表 + [Arguments] ${tablename} ${hostip} ${SQLServer_passwd} ${CDMMSSql_DB} + Connect To Database Using Custom Params pymssql host='${hostip}',user='${CDM_MSSql_DB_User}',password='${SQLServer_passwd}',database='${CDMMSSql_DB}' + ${row_count} Row Count SELECT \ * FROM ${CDMMSSql_DB}.dbo.sysObjects WHERE name='${tablename} ' + Run Keyword IF ${row_count}>0 Execute Sql String drop table ${tablename} + Disconnect From Database + Log 断开数据库连接 + +MSSQL校验 + [Arguments] ${tablename} ${hostip} ${SQLServer_passwd} ${CDM_MSSql_DB} + log 连接数据库 + Connect To Database Using Custom Params pymssql host='${hostip}',user='${CDM_MSSql_DB_User}',password='${SQLServer_passwd}',database='${CDM_MSSql_DB}' + log 获取函数 + ${row_count} Row Count SELECT \ * FROM ${CDMMSSql_DB}.dbo.sysObjects WHERE name='${tablename} ' + Run Keyword IF ${row_count} == None Return From Keyword ${False} + Run Keyword IF ${row_count}>0 log 存在表${tablename} + ... ELSE Fail 表不存在,恢复失败 + ${result} Row Count select * from ${tablename} + Run Keyword IF "${out}"=="${result}" log 数据校验一致,恢复成功 + ... ELSE Fail 数据校验不一致,恢复失败 + Disconnect From Database + Log 断开数据库连接 + 执行SQL查询 [Arguments] ${tablename} ${hostip} ${SQLServer_passwd} log 连接数据库 diff --git a/Project/task4/TestCase/TC5_CDM/System_Testing/03_SQLServer/CDM_SQLServer_mh.robot b/Project/task4/TestCase/TC5_CDM/System_Testing/03_SQLServer/CDM_SQLServer_mh.robot new file mode 100644 index 0000000..56f7615 --- /dev/null +++ b/Project/task4/TestCase/TC5_CDM/System_Testing/03_SQLServer/CDM_SQLServer_mh.robot @@ -0,0 +1,45 @@ +*** Settings *** +Resource ../../../../Resource/RE0_Common/KeyWord.robot +Variables ../../../../Config/CDM/CDM_config.py +Resource ../../../../Resource/RE2_CDM/KeyWord_Sqlserver.robot + +*** Test Cases *** +00_TEST + +01_SQLServer完全备份与恢复 + [Documentation] 1.MSSQL建库 + ... 登录代理端后台 + ... 删除老的库,新建库 + ... + ... 2. MSSQL建表并插入当前时间 + ... 在创建的库中新建表,并往表中插入当前的时间 + ... + ... 3.MSSQL_CDM备份 + ... 进入副本模块 + ... 选择代理、添加策略 + ... 以备份类型+时间命名策略 + ... 选择备份目标 + ... 过滤指定的目标 + ... 选择完全备份类型和任务周期 + ... 确认备份策略建立 + ... 确认任务运行完成 + ... + ... 4.MSSQL删除表 + ... 删除数据成功 + ... + ... 5.MSSQL_CDM恢复 + ... 通过策略名找到备份集 + ... 点击恢复 \ + ... 确认恢复策略建立 + ... 等待恢复成功 + ... + ... 6.MSSQL校验 + ... 查询数据成功 + [Setup] 登录黑方 ${CDM_BC_NEWUrl} ${Sys_Admin} ${WebPWD} + MSSQL建库 ${CDM_MSSql_DB_Mh} ${CDM_MSSql_IP_Local_Mh} ${CDM_MSSql_DB_PWD1} + MSSQL建表并插入当前时间点 ${CDM_MSSql_TableName_Mh} ${CDM_MSSql_IP_Local_Mh} ${CDM_MSSql_DB_PWD1} ${CDM_MSSql_DB_User} ${CDM_MSSql_DB_Mh} + MSSQL_CDM备份 ${CDM_MSSql_HostName_Mh} ${SQLserver_CheckType_Mh} ${N} ${N} ${N} + MSSQL删除表 ${CDM_MSSql_TableName_Mh} ${CDM_MSSql_IP_Local_Mh} ${CDM_MSSql_DB_PWD1} ${CDM_MSSql_DB_Mh} + MSSQL_CDM恢复 + MSSQL校验 ${CDM_MSSql_TableName_Mh} ${CDM_MSSql_IP_Local_Mh} ${CDM_MSSql_DB_PWD1} ${CDM_MSSql_DB_Mh} + [Teardown] 关闭浏览器