def test_002_passwdErrNum(self, passwdErrNum='3', loginSpan='1'): u'''修改最大错误登录次数&超出最大次数惩罚时间''' #修改最大错误登录次数&超出最大次数惩罚时间 accessStrategy = ManagementPolicyPage(self.driver, self.url) accessStrategy.input_passwdErrNum(passwdErrNum) accessStrategy.input_loginSpan(loginSpan) accessStrategy.click_save() time.sleep(1) self.driver.quit() #使用错误密码多次登录以达到最大错误登录次数 while int(passwdErrNum) > 0: passwdErrNum = int(passwdErrNum) - 1 login.test_unableLoginWeb(self, password='******') # print(self.driver.find_element_by_id('warning-msg').text) time.sleep(1) if int(passwdErrNum) > 0: self.driver.quit() #停留60s print('超过错误次数,等待60s') time.sleep(60) self.driver.quit() #使用正确账号密码测试登录 login.loginWeb(self) #admin账号登录 self.driver.quit() logger.info('test_002_passwdErrNum passed')
def test_001_test1(self): u'''添加管理员账号''' roleA = getAssertText('roleA') # 添加管理员账号test/test,读写权限 login.loginWeb(self) #admin账号登录 self.driver.implicitly_wait(10) administrator = ManagementPolicyPage(self.driver, self.url) #进入系统配置-网管策略-系统管理员 administrator.click_sysConfig() time.sleep(0.5) administrator.click_ManagementPolicy() time.sleep(1) # 添加管理员账号test/test administrator.click_add() time.sleep(1) administrator.input_username('test') administrator.input_passwd1('test') administrator.input_passwd2('test') #设置权限变量,选择 读写 权限 selrole = administrator.selelement_byName(administrator.role) Select(selrole).select_by_value('adm') administrator.click_save() time.sleep(1) # 断言 再点击编辑 确认元素不为空(账号确实是test):代表账号确实是test list_name1 = administrator.getText_byXpath(administrator.list_name1) list_role1 = administrator.getText_byXpath(administrator.list_role1) self.assertEqual(list_name1, 'test', msg='新建账号不为test') self.assertEqual(list_role1, roleA, msg='新建账号权限不为读写') #注销当前登录 login.logoutWeb(self) time.sleep(1) self.driver.quit()
def test_001_AccessMode(self): u'''https模式登录''' host = gettelnet('host') RouteUrls = 'https://' + host + '/' # 修改网管模式,端口切换到443,https模式下可登录设备 accessStrategy = ManagementPolicyPage(self.driver, self.url) accessStrategy.click_httpswebEn() accessStrategy.click_save() # 加个判断 某些型号等待时间长(6550G) time.sleep(1) x = 0 while x < 15: now_url = str(self.driver.current_url) print(now_url, x) if '/noAuth/login.html' not in now_url: # 如果不同 time.sleep(2) else: break x += 1 self.driver.quit() #https模式下验证登录设备 login.test_enableLoginWeb(self, url=RouteUrls) #https登录 accessStrategy = ManagementPolicyPage(self.driver, self.url) # 改回http 方式登录 accessStrategy.click_sysConfig() time.sleep(0.5) accessStrategy.click_ManagementPolicy() time.sleep(1) accessStrategy.click_AccessPolicy() time.sleep(1) accessStrategy.click_httpwebEn() accessStrategy.click_save() time.sleep(1) i = 0 while i < 30: url = self.driver.current_url if '/login.html' in url: break else: time.sleep(2) i += 1 self.driver.quit() logger.info('test_001_AccessMode passed')
def test_003_WEBtimeout(self, timeout='1'): #因为字母顺序问题 该项会在最后执行 u'''修改UI超时时间''' #修改UI超时时间 accessStrategy = ManagementPolicyPage(self.driver, self.url) accessStrategy.input_sessionLife(timeout) accessStrategy.click_save() self.driver.quit() login.loginWeb(self) #任意点击一个页面,这里点击网络配置-内网配置 lanconfig = NetworkConfig_LANpage(self.driver, self.url) lanconfig.click_NetworkConfig() time.sleep(0.5) lanconfig.click_LANconfig() time.sleep(1) print('等待超时时间,在这里等待80s') time.sleep(120) #等待超时时间后,任意点击其他页面 测试超时(返回登录页面) accessStrategy = ManagementPolicyPage(self.driver, self.url) accessStrategy.click_sysConfig() time.sleep(0.5) accessStrategy.click_ManagementPolicy() time.sleep(2) url = self.driver.current_url if '/login.html' not in url: CapPic(self.driver) logger.info(u"未跳回登录页面") raise Exception('未跳回登录页面') self.driver.quit() # 将超时时间改回默认值 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) accessStrategy = ManagementPolicyPage(self.driver, self.url) # 进入系统配置-网管策略-网管访问策略 accessStrategy.click_sysConfig() time.sleep(0.5) accessStrategy.click_ManagementPolicy() time.sleep(1) accessStrategy.click_AccessPolicy() time.sleep(1) accessStrategy.input_sessionLife('10') accessStrategy.click_save() self.driver.quit() logger.info('test_003_WEBtimeout passed')
def test_001_userall(self): u'''内网访问控制 - 全部用户''' # 适用用户 选择 全部用户 accesscontrol = ManagementPolicyPage(self.driver, self.url) accesscontrol.click_choosePeople() time.sleep(1) accesscontrol.click_userall() accesscontrol.click_saveW1() time.sleep(1) accesscontrol.click_innerAccessControlEn() accesscontrol.click_save() time.sleep(1) self.driver.quit() #验证是否可以登录 login.loginWeb(self) #admin账号登录 self.driver.quit() logger.info('test_001_userall passed')
def test_002_test2(self): u'''新增账号登录 修改权限''' RouteUrl = getweb('RouteUrl') self.url = RouteUrl #能使用test该账号登陆管理DUT login.test_enableLoginWeb(self, username='******', password='******') # self.url = RouteUrl self.driver.implicitly_wait(10) administrator = ManagementPolicyPage(self.driver, self.url) administrator.click_sysConfig() time.sleep(0.5) administrator.click_ManagementPolicy() time.sleep(1) #修改test/test为test1/test1,(测试:账号权限一起改 提交时候权限未改成功,这里分两步完成) administrator.click_listEdit1() time.sleep(1) administrator.input_username('test1') administrator.input_passwd1('test1') administrator.input_passwd2('test1') administrator.click_save() time.sleep(1) self.driver.quit() #重新登录--只为修改test1的权限(可以使用test1登录也验证了上一步修改成功) login.test_enableLoginWeb(self, username='******', password='******') self.driver.implicitly_wait(10) administrator = ManagementPolicyPage(self.driver, self.url) administrator.click_sysConfig() time.sleep(0.5) administrator.click_ManagementPolicy() time.sleep(1) #修改test1/test1,为只读权限。 administrator.click_listEdit1() time.sleep(1) selrole = administrator.selelement_byName(administrator.role) Select(selrole).select_by_value('viewer') #改为只读权限 time.sleep(1) administrator.click_input_group() #修改后点击下其他元素,避免没有保存成功 time.sleep(1) administrator.click_save() time.sleep(1) self.driver.quit()
def tearDown(self): host = gettelnet('host') port = gettelnet('port') try: telnetlib.Telnet(host, port= port, timeout=10) except socket.timeout: # 将IP改回自动获取(设置dns为自动获取) os.system('%s' % (batpath + 'changeDhcpIp.bat')) time.sleep(5) n = 0 while n < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) print(pcaddr, n) if '192.168.' not in str(pcaddr): time.sleep(2) n += 1 else: print('IP地址已自动获取成功', n) break else: raise Exception('未获取到地址') login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) accesscontrol = ManagementPolicyPage(self.driver, self.url) # 进入系统配置-网管策略-内网访问控制 accesscontrol.click_sysConfig() time.sleep(0.5) accesscontrol.click_ManagementPolicy() time.sleep(1) accesscontrol.click_lanAccessControl() time.sleep(1) accesscontrol.click_innerAccessControlC() accesscontrol.click_save() time.sleep(1) self.driver.quit() logger.info('tearDown over') logger.info('%s' % ('=' * 50))
def test_002_usergroup(self): u'''内网访问控制 - 组织架构''' self.driver.quit() RouteUrl = getweb('RouteUrl') #增加组织架构用户 organization_group.import_empty_template(self) organization_group.add_user(self) login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) accesscontrol = ManagementPolicyPage(self.driver, self.url) # 进入系统配置-网管策略-内网访问控制 accesscontrol.click_sysConfig() time.sleep(0.5) accesscontrol.click_ManagementPolicy() time.sleep(1) accesscontrol.click_lanAccessControl() time.sleep(1) accesscontrol.click_choosePeople() time.sleep(1) accesscontrol.click_usergroup() #组织架构,这里选择的是ROOT 所有 time.sleep(1) accesscontrol.click_Root() #弹窗中的保存 accesscontrol.click_saveW1() time.sleep(1) accesscontrol.click_innerAccessControlEn() accesscontrol.click_save() time.sleep(1) self.driver.quit() # 调用bat脚本 地址修改为非组织架构IP 192.168.1.39 网关192.168.1.1 if '192.168.1.1' in host: os.system(('%s' % batpath + 'changeStaticIP2_1duan.bat')) elif '192.168.16.1' in host: os.system(('%s' % batpath + 'changeStaticIP2_16duan.bat')) else: raise Exception('lan口非 1网段、16网段') time.sleep(5) n = 0 while n < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr1 = socket.gethostbyname(socket.getfqdn(socket.gethostname())) print(pcaddr1, n) if str(pcaddr1) != batSameIP: time.sleep(2) n += 1 else: print('地址已修改为非绑定地址 192.168.1.39', n) break else: raise Exception('地址修改为非绑定地址 192.168.1.39失败') # 判断登录 切换IP后应该不能登录设备 self.driver = webdriver.Chrome() # self.driver.maximize_window() self.driver.implicitly_wait(10) self.driver.get(RouteUrl) title=self.driver.title if 'Error: Forbidden' in title: print('非组织架构用户无法登录设备 验证通过') else: CapPic(self.driver) logger.info('非组织架构用户依旧可以登录设备') raise Exception('非组织架构用户依旧可以登录设备') self.driver.quit() # 将IP改回自动获取(设置dns为自动获取) # 调用bat脚本 os.system('%s' % (batpath + 'changeDhcpIp.bat')) time.sleep(5) n = 0 while n < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) print(pcaddr, n) if '192.168.' not in str(pcaddr): time.sleep(2) n += 1 else: print('IP地址已自动获取成功', n) break else: raise Exception('未获取到地址') # 验证是否可以登录 并删除添加的组织架构 #先关闭访问控制 否则删除组织架构后 无法登录 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) accesscontrol = ManagementPolicyPage(self.driver, self.url) # 进入系统配置-网管策略-内网访问控制 accesscontrol.click_sysConfig() time.sleep(0.5) accesscontrol.click_ManagementPolicy() time.sleep(1) accesscontrol.click_lanAccessControl() time.sleep(1) accesscontrol.click_innerAccessControlC() accesscontrol.click_save() time.sleep(1) self.driver.quit() #删除添加的组织架构 organization_group.group_delete(self) print('访问控制 选择组织架构 验证通过') logger.info('test_002_usergroup passed')
def test_003_userip(self): u'''内网访问控制 - IP地址''' RouteUrl = getweb('RouteUrl') # 使用用户 选择 IP地址 #获取本机ip 默认有线地址,有线断开会显示无线 pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) accesscontrol = ManagementPolicyPage(self.driver, self.url) # 进入系统配置-网管策略-内网访问控制 accesscontrol.click_choosePeople() time.sleep(1) accesscontrol.click_userip() time.sleep(1) accesscontrol.input_starip(pcaddr) accesscontrol.input_endip(pcaddr) accesscontrol.click_saveW1() time.sleep(1) accesscontrol.click_innerAccessControlEn() accesscontrol.click_save() time.sleep(1) self.driver.quit() # 调用bat脚本 地址修改为非组织架构IP 192.168.1.39 网关192.168.1.1 if '192.168.1.1' in host: os.system(('%s' % batpath + 'changeStaticIP2_1duan.bat')) elif '192.168.16.1' in host: os.system(('%s' % batpath + 'changeStaticIP2_16duan.bat')) else: raise Exception('lan口非 1网段、16网段') time.sleep(5) n = 0 while n < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr1 = socket.gethostbyname(socket.getfqdn(socket.gethostname())) print(pcaddr1, n) if str(pcaddr1) != batSameIP: time.sleep(2) n += 1 else: print('地址已修改为非绑定地址 192.168.1.39', n) break else: raise Exception('地址修改为非绑定地址 192.168.1.39失败') # 判断登录 切换IP后应该不能登录设备 self.driver = webdriver.Chrome() # self.driver.maximize_window() self.driver.implicitly_wait(10) self.driver.get(RouteUrl) title = self.driver.title if 'Error: Forbidden' in title: print('非组织架构用户无法登录设备 验证通过') else: raise Exception('非组织架构用户依旧可以登录设备') self.driver.quit() # 将IP改回自动获取(设置dns为自动获取) # 调用bat脚本 os.system('%s' % (batpath + 'changeDhcpIp.bat')) time.sleep(5) n = 0 while n < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) print(pcaddr, n) if '192.168.' not in str(pcaddr): time.sleep(2) n += 1 else: print('IP地址已自动获取成功', n) break else: raise Exception('未获取到地址') #验证是否可以登录 login.loginWeb(self) #admin账号登录 self.driver.quit() logger.info('test_003_userip passed')
def test_001_openRemote(self): u'''开启远程管理''' # 开启远程管理 remoteManage = ManagementPolicyPage(self.driver, self.url) remoteManage.click_httpEn() time.sleep(0.5) remoteManage.click_save() time.sleep(1) #检查admin的映射是否开启 staticMapping = staticMappingPage(self.driver, self.url) staticMapping.click_NetworkConfig() time.sleep(0.5) staticMapping.click_portMapping() time.sleep(1) list_Ens = staticMapping.getAttribute_byXpath(staticMapping.list1_Ens, 'checked') if list_Ens != 'true': CapPic(self.driver) logger.info(u'开启远程管理 静态映射未打开') raise Exception(u'远程管理 静态映射未打开') # 从外网配置页面获取WAN1口地址 wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_WANconfig() time.sleep(1) # 判断联网状态 i = 0 while i < 21: wanpage.click_refresh() time.sleep(1) list_conState = wanpage.getText_byXpath(wanpage.connectState1) print(str(list_conState), i) if str(list_conState) != ConnectState: time.sleep(3) i += 1 else: break else: CapPic(self.driver) logger.info(u"WAN口未连接") raise Exception('WAN1 未连接') WAN1_ip = str(wanpage.getText_byXpath(wanpage.line1IP)) time.sleep(1) self.driver.quit() if CPUmodel == 'Qualcomm': # 部分型号,如高通1200Wv2,因为芯片问题必须关闭wan口mac学习功能,原mac未清除之前无法从wan口访问路由器 # 这里需要设置计划任务2分钟后清空原pc的arp缓存 hostip = gettelnet('host') port = gettelnet('port') username = bytes(getweb('User'), encoding="utf8") password = bytes(getweb('Passwd'), encoding="utf8") tn = telnetlib.Telnet(host=hostip, port=port, timeout=10) tn.set_debuglevel(5) # 级别越高输出的调试信息越多,并没有看出区别 # 输入登录用户名 tn.read_until(b'login:'******'Password:'******'#') tn.write(b"uptime" + b"\n") # 输出结果,判断 time.sleep(1) result = str(tn.read_very_eager()) # 只会存最后一条命令的结果 print('-------------------输出结果------------------------') # 命令执行结果 print('result:', result) result1 = str(result.split(r'\r\n')[1]).split(r':') print(result1[1]) tn.close() # tn.write('exit\n') if int(result1[1]) + 2 < 60: hour = result1[0] min = int(result1[1]) + 2 else: if int(result1[0]) + 1 < 24: hour = int(result1[0]) + 1 min = '0' + str((int(result1[1]) + 2) - 60) else: hour = '0' + str(int(result1[0]) + 1 - 24) min = '0' + str((int(result1[1]) + 2) - 60) print(hour) print(min) pcaddr = str( socket.gethostbyname(socket.getfqdn(socket.gethostname()))) cmd = "echo '%s %s * * * arp -d %s' > cmd " % (min, hour, pcaddr) print(cmd) cmd = bytes(cmd, encoding='utf8') tn = telnetlib.Telnet(host=hostip, port=port, timeout=10) tn.set_debuglevel(5) # 级别越高输出的调试信息越多,并没有看出区别 # 输入登录用户名 tn.read_until(b'login:'******'Password:'******'#') tn.write(cmd + b"\n") tn.read_until(b'#') tn.write(b"cat cmd >> /var/spool/cron/crontabs/admin" + b"\n") tn.read_until(b'#') tn.write(b"killall crond" + b"\n") tn.read_until(b'#') tn.write(b"crond &" + b"\n") tn.read_until(b'#') tn.write(b"cat /var/spool/cron/crontabs/admin" + b"\n") # 输出结果,判断 time.sleep(1) result = str(tn.read_very_eager()) # 只会存最后一条命令的结果 print('-------------------输出结果------------------------') # 命令执行结果 print('result:', result) if 'adp -d' in result: print('计划任务已写入') #更改pc 交换机接口与wan口/上联口通 swconfig.test_LanToWan(self) if CPUmodel == 'Qualcomm': time.sleep(110) # 等待计划任务执行 #重新获取地址 应获取到上层网关下发的地址 pcaddr = str(socket.gethostbyname(socket.getfqdn( socket.gethostname()))) # 调用bat脚本 IP地址释放 os.system('%s' % (batpath + 'ipconfig_release.bat')) time.sleep(2) pcaddr1 = str( socket.gethostbyname(socket.getfqdn(socket.gethostname()))) print(pcaddr1) if pcaddr1 != str(pcaddr): print('IP地址已释放') else: time.sleep(3) time.sleep(2) # 将IP改回自动获取(设置dns为自动获取) # 调用bat脚本 os.system('%s' % (batpath + 'ipconfig_renew.bat')) time.sleep(5) n = 0 while n < 60: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) print(pcaddr, n) if '192.168.' not in str(pcaddr): time.sleep(2) n += 1 else: print('IP地址已自动获取成功', n) break else: raise Exception('未获取到地址') n = 0 while n < 30: ping = pingTestIP(WAN1_ip) if ping != "Y": time.sleep(1) n += 1 else: break else: logger.info(u'切换IP后wan口方向 无法ping通wan口') logger.info(u'pcIP地址为 %s' % pcaddr) raise Exception(u'切换IP后wan口方向 无法ping通wan口') logger.info(u'pcIP地址为 %s' % pcaddr) WANURL = str('http://' + str(WAN1_ip) + ':8081') #使用页面获取的WAN1 ip验证登录 login.test_enableLoginWeb(self, url=WANURL) self.driver.quit() #改回lan口方向 # 调用bat脚本 地址修改为 192.168.34.39 网关192.168.34.1 os.system('%s' % (batpath + 'changeStaticIP3_34duan.bat')) time.sleep(5) n = 0 while n < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) print(pcaddr, n) if str(pcaddr) != '192.168.34.39': time.sleep(2) n += 1 else: print('地址已修改为地址 192.168.34.39', n) time.sleep(2) break else: raise Exception('地址修改为192.168.34.39 失败') # 更改pc 交换机接口与lan口通 swconfig.test_WanToLan(self) # 将IP改回自动获取 应获取到被测设备下发的地址 os.system('%s' % (batpath + 'changeDhcpIp.bat')) n = 0 while n < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr_new = socket.gethostbyname( socket.getfqdn(socket.gethostname())) print(pcaddr_new, n) if '192.168.' not in str(pcaddr_new): time.sleep(2) n += 1 else: print('IP地址已自动获取成功', n) break else: raise Exception('未获取到地址') logger.info('test_001_openRemote passed')