def test_002_localDMZ(self): u'''验证局部DMZ''' # #获取本机地址 # pcaddr=socket.gethostbyname(socket.gethostname()) # 通过用户状态获取httpserver的IP地址 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) status = Organization_userStatusPage(self.driver, self.url) status.click_UserManage() time.sleep(0.5) status.click_userstatus() time.sleep(1) # 将页面刷新按钮改成“手动” sel = status.selelement_byXpath(status.selmanual) Select(sel).select_by_value('manual') time.sleep(1) status.click_refreshtable() time.sleep(1) status.input_search(serverPcMac) status.click_searchb() time.sleep(1) try: serverIP = status.getText_byXpath(status.list_IP1) # print(serverIP) except NoSuchElementException: raise Exception(u'用户状态中未找到server IP') #局部DMZ dmz = DMZPage(self.driver, self.url) dmz.click_NetworkConfig() time.sleep(0.5) dmz.click_portMapping() time.sleep(1) dmz.click_DMZ() time.sleep(1) dmz.click_DMZEn() dmz.input_GlobalDMZ('0.0.0.0') #防止已经有过全局DMZ设置 dmz.input_WAN1DMZ(serverIP) dmz.click_save() time.sleep(1) #断言 dmz.click_DMZ() #相当于刷新下界面,否则on依旧没有checked参数 time.sleep(1) DMZ_status = str(dmz.getAttribute_byXpath(dmz.DMZEs, 'checked')) print(DMZ_status) self.assertEqual(DMZ_status, 'true', msg='DMZ 开启有问题') print('局部DMZ 已开启') # 从外网配置页面获取WAN1口地址 wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_WANconfig() time.sleep(1) # WAN1 ip变量赋值,页面读取 # 判断联网状态 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) 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(120) # 等待计划任务执行 # 重新获取地址 应获取到上层网关下发的地址 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 < 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('未获取到地址') try: telnetlib.Telnet(str(WAN1_ip), port=3389, timeout=10) print('局部DMZ 验证成功') except socket.timeout: logger.info(u'局部DMZ 验证失败') raise Exception(u'局部DMZ 验证失败') self.driver.quit() logger.info('test_002_localDMZ passed')
def test_Keywordfilter(self): u'''关键字过滤 “通知”,在200.200.200.134搜索通知文档不成功''' OAurl = getAssertText('OAurl') OAadmin = getAssertText('OAadmin') OApasswd = getAssertText('OApasswd') login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) #配置防火墙 firewall = AccessControlPage(self.driver,self.url) firewall.click_FireWall() time.sleep(0.5) firewall.click_AccessControl() time.sleep(1) firewall.click_add() time.sleep(1) firewall.input_PolicyNames('Keywordfilter') selFilterTypes = firewall.selelement_byName(firewall.selFilterTypes) time.sleep(1) Select(selFilterTypes).select_by_value('3') #关键字过滤 firewall.input_glnrKeyword('通知') firewall.click_save() time.sleep(20) # 开启访问控制 checkTrafficS = firewall.getAttribute_byId(firewall.checkTrafficS,'checktype') # checktype 0未开启,1开启 if checkTrafficS == '0': firewall.click_checkTraffic() time.sleep(2) print('访问控制策略 已添加') #断言 list_content = str(firewall.getText_byXpath(firewall.list_Content)) self.assertEqual(list_content , '通知', msg='过滤内容不为"www.163.com"') checkTrafficS=firewall.getAttribute_byId(firewall.checkTrafficS,'checktype') #checktype 0未开启,1开启 self.assertEqual(checkTrafficS,'1',msg='访问控制 未开启') self.driver.quit() # # # 访问OA time.sleep(5) self.driver = webdriver.Chrome() self.driver.set_page_load_timeout(10) # selenium超时设置/等待时间过长自动停止 配合去情形1 # self.driver.maximize_window() self.driver.implicitly_wait(10) self.driver.get(OAurl) firewall = AccessControlPage(self.driver, self.url) firewall.input_OAloginid(OAadmin) firewall.input_OApassword(OApasswd) firewall.click_OAlogin() time.sleep(2) # 切换成文档搜索 输入关键字 # # try: # self.driver.implicitly_wait(2) # firewall.click_notice() # time.sleep(2) # except NoSuchElementException: # pass firewall.click_OAsearcn() time.sleep(1) firewall.click_OAsearcnWD() time.sleep(1) firewall.input_OAsearchvalue('通知') time.sleep(1) #不同chrome 点击确定后的情况不同 # 情况1: # 因为被过滤,在点击后不会有返回结果,命令执行后会一直处于命令执行中,最后报超时错误,默认超时300s # selenium.common.exceptions.TimeoutException: Message: timeout # 配合上文 set_page_load_timeout(10)设置等待超时时间,这里等待10s,判断报超时错误则正常,否则失败 # 情况2 # 点击的命令有返回,这时候就通过 不能定位到HeaderForXtalbe状态栏确定 firewall.find_OAsearchbt() time.sleep(5) try: firewall.find_OAsearchbt() # self.driver.find_element_by_id('searchbt').click() except TimeoutException: print('关键字过滤 验证通过') else: try: firewall.find_HeaderForXtalbe() except NoSuchElementException: print('关键字过滤 验证通过2') else: raise Exception('关键字过滤失败') # 退出OA firewall.click_OAlogout() time.sleep(1) firewall.click_OAsubmit() self.driver.quit() logger.info('test_Keywordfilter passed')
def test_004_DMZpriority(self): u'''验证 映射和DMZ的优先级''' #将3389端口映射给一个不存在的主机 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) staticMapping = staticMappingPage(self.driver, self.url) # 配置映射 staticMapping.click_NetworkConfig() time.sleep(0.5) staticMapping.click_portMapping() time.sleep(1) staticMapping.click_add() time.sleep(1) staticMapping.input_IDs('statictest') staticMapping.input_IPs('1.2.3.4') staticMapping.input_inS('3389') staticMapping.input_inE('3389') staticMapping.input_outS('3389') staticMapping.input_outE('3389') staticMapping.click_save() time.sleep(1) #断言 list_port = str( self.driver.find_element_by_xpath( '//*[@id="1"]/div/div/div[1]/table/tbody/tr[2]/td[6]/span'). text) print(list_port) self.assertEqual(list_port, '3389~3389:3389~3389', msg='端口对应关系不一致') print('tcp21映射 已添加') # 从外网配置页面获取WAN1口地址 wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_WANconfig() time.sleep(1) # WAN1 ip变量赋值,页面读取 # 判断联网状态 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() # 更改pc 交换机接口与wan口/上联口通 swconfig.test_LanToWan(self) # 重新获取地址 应获取到上层网关下发的地址 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 < 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('未获取到地址') try: telnetlib.Telnet(str(WAN1_ip), port=3389, timeout=10) raise Exception('映射优先级高于DMZ 验证失败') #如果通则报错 except socket.timeout: print('映射优先级高于DMZ 验证成功') #如果不通(timeout报错)则正常 switchURL2 = gettelnet('switchURL2') # 调用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口通 p = pingTestIP(switchURL2) if p == 'Y': 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('未获取到地址') #删除映射 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) staticMapping = staticMappingPage(self.driver, self.url) staticMapping.click_NetworkConfig() time.sleep(0.5) staticMapping.click_portMapping() time.sleep(1) staticMapping.click_delete1() time.sleep(1) staticMapping.click_ok() time.sleep(1) list_tips = staticMapping.getText_byXpath(staticMapping.list_tips) self.assertEqual(str(list_tips), ' ', msg='映射删除失败') #关闭DMZ dmz = DMZPage(self.driver, self.url) dmz.click_DMZ() time.sleep(1) dmz.click_DMZC() dmz.input_GlobalDMZ('0.0.0.0') time.sleep(1) dmz.click_save() time.sleep(1) # 断言 dmz.click_DMZ() # 相当于刷新下界面,否则off依旧没有checked参数 time.sleep(1) DMZ_status = str(dmz.getAttribute_byXpath(dmz.DMZCs, 'checked')) print(DMZ_status) self.assertEqual(DMZ_status, 'true', msg='DMZ 关闭异常') print('全局DMZ 已关闭') self.driver.quit() logger.info('test_003_DMZpriority passed')
def test_001_dhcp(self): u'''外网配置 - 动态接入''' wan_config = NetworkConfig_wanpage(self.driver, self.url) #先判断几条外线接入,删除其他几条外线 wan_config.click_line1edit() time.sleep(1) value_list = [] wan_num = wan_config.selelement_byName(wan_config.PortName) options_list = wan_num.find_elements_by_tag_name( wan_config.PortNameOptions) for option in options_list: print("Value is:%s Text is:%s" % (option.get_attribute("value"), option.text)) value_list.append(option.get_attribute("value")) print(value_list) wan_config.click_back() time.sleep(1) if 'WAN2' in value_list: wan_config.click_line2delete() time.sleep(1) wan_config.click_cfm_ok() time.sleep(10) if 'WAN3' in value_list: wan_config.click_line3delete() time.sleep(1) wan_config.click_cfm_ok() time.sleep(10) if 'WAN4' in value_list: wan_config.click_line4delete() time.sleep(1) wan_config.click_cfm_ok() time.sleep(10) if 'WAN5' in value_list: wan_config.click_line5delete() time.sleep(1) wan_config.click_cfm_ok() time.sleep(10) # 获取外线的链接类型 line1_type = wan_config.getText_byXpath(wan_config.line1Type) linetype = getAssertText('DHCPline') ConnectState = getAssertText('ConnectState') # 先改为动态接入,得到正确的IP地址及网关地址 # WAN1 if str(line1_type) != linetype: wan_config.click_line1edit() time.sleep(1) access_mode = wan_config.selelement_byName( wan_config.connectionType) Select(access_mode).select_by_value('DHCP') wan_config.click_save() time.sleep(10) # 修改接口后 可能会回到登录页面 所以关闭,再打开 self.driver.quit() login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) wan_config = NetworkConfig_wanpage(self.driver, self.url) wan_config.click_NetworkConfig() time.sleep(0.5) wan_config.click_WANconfig() time.sleep(1) else: print('wan1 动态接入') #断言 list_lineType = wan_config.getText_byXpath(wan_config.line1Type) print('list_lineType:', list_lineType) self.assertEqual(str(list_lineType), linetype, msg='连接类型 不为 动态接入') # 判断联网状态 i = 0 while i < 21: wan_config.click_refresh() time.sleep(1) list_conState = wan_config.getText_byXpath( wan_config.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 未连接') i = 0 while i < 21: # 判断联网 ,不能上网则报错 # pingTestIP('114.114.114.114') p = pingTestIP('www.baidu.com') print(p, i) if p == 'N': time.sleep(3) i += 1 else: break else: logger.info(u"connect failed") raise Exception('connect failed.') self.driver.quit() logger.info('test_001_dhcp passed')
def test_UPNP(self): u'''UPnP自动添加映射''' # Thunderpath = str(getpath('Thunderpath')) # print('13',Thunderpath) # Thunderpath1 = '%s' % Thunderpath #关闭 迅雷进程 os.system('taskkill /im "Thunder.exe" /F') time.sleep(2) login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) upnp = UPNPpage(self.driver, self.url) upnp.click_NetworkConfig() time.sleep(0.5) upnp.click_portMapping() time.sleep(1) upnp.click_UPnP() time.sleep(1) # 开启UPNP switch0 = upnp.getAttribute_byId(upnp.checkOn, 'checktype') # checktype 0未开启,1开启 if switch0 == '0': upnp.click_checkOnc() time.sleep(2) print('UPnP 已开启') # 打开迅雷 handle = win32process.CreateProcess( 'D:\\Program Files (x86)\\Thunder Network\\Thunder\\Program\\Thunder.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO()) # 打开迅雷,获得其句柄 #断言 time.sleep(5) i = 0 while i < 30: upnp.click_refreshTable() time.sleep(1) try: list_tips1 = upnp.getText_byXpath(upnp.list_tips1) print('list_1protocol:', list_tips1) except NoSuchElementException: time.sleep(1) i += 1 else: if "TCP" or 'UDP' in str(list_tips1): print("UPnP自动添加映射 验证通过 %s" % i) else: # 未有规则生成 raise Exception('UPnP自动添加映射 验证失败') break # 关闭UPNP switch1 = upnp.getAttribute_byId(upnp.checkOn, 'checktype') # checktype 0未开启,1开启 if switch1 == '1': upnp.click_checkOnc() time.sleep(2) print('UPnP 已关闭') self.driver.quit() win32process.TerminateProcess(handle[0], 0) #关闭迅雷 logger.info('test_UPNP passed')
def test_003_AuthNotice(self): u'''账号到期通告''' messages = getAssertText('PPPoENotice') login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) pppoeauth = Organization_userAuthPage(self.driver, self.url) # 打开用户管理 - 用户认证 pppoeauth.click_UserManage() time.sleep(0.5) pppoeauth.click_userAuth() time.sleep(1) pppoeauth.click_account() time.sleep(1) # 新增已过期账号 pppoeauth.click_addUser() time.sleep(1) pppoeauth.input_name('BeOverdue') selauthType = pppoeauth.selelement_byName('authType') Select(selauthType).select_by_value('PPPoE') time.sleep(1) pppoeauth.input_authAccount('BeOverdue') pppoeauth.input_authPassword('BeOverdue') pppoeauth.click_accountBillEn() time.sleep(1) #设置账号日期 pppoeauth.click_accountOpenDater() pppoeauth.click_bnpreMonth() #向前一个月 pppoeauth.click_day1() #任意选择 pppoeauth.click_accountStopDate() pppoeauth.click_bnpreMonth() # 向前一个月 pppoeauth.click_day2() pppoeauth.click_save() time.sleep(2) # 断言 添加的账号 认证方式和认证账号 是否正常(第二行) list_authtype2 = pppoeauth.getText_byXpath(pppoeauth.list_authtype2) list_authAcc2 = pppoeauth.getText_byXpath(pppoeauth.list_authAcc2) self.assertEqual(str(list_authtype2), 'PPPoE', msg='认证方式显示不为“PPPoE”') self.assertEqual(str(list_authAcc2), 'BeOverdue', msg='认证账号不为“BeOverdue”') print('认证账号 - 新增已过期账号 成功') # 新增将过期账号 pppoeauth.click_addUser() time.sleep(1) pppoeauth.input_name('Overdue') selauthType = pppoeauth.selelement_byName('authType') Select(selauthType).select_by_value('PPPoE') time.sleep(1) pppoeauth.input_authAccount('Overdue') pppoeauth.input_authPassword('Overdue') pppoeauth.click_accountBillEn() time.sleep(1) # 设置账号日期 pppoeauth.click_accountOpenDater() pppoeauth.click_bnpreMonth() # 向前一个月 pppoeauth.click_day1() # 任意选择 pppoeauth.click_accountStopDate() pppoeauth.click_bnpostMonth() # 向后一个月 pppoeauth.click_day3() pppoeauth.click_save() time.sleep(2) # 断言 添加的账号 认证方式和认证账号 是否正常(第三行) list_authtype3 = pppoeauth.getText_byXpath(pppoeauth.list_authtype3) list_authAcc3 = pppoeauth.getText_byXpath(pppoeauth.list_authAcc3) self.assertEqual(str(list_authtype3), 'PPPoE', msg='认证方式显示不为“PPPoE”') self.assertEqual(str(list_authAcc3), 'Overdue', msg='认证账号不为“BeOverdue”') print('认证账号 - 新增将过期账号 成功') self.driver.quit() #开始验证账号到期通告 # 已过期账号验证 #开始拨号 Adsl.connect(self, name='adsl', username='******', password='******') # 通过断言IP地址网段,判断是否可以拨号成功 pcaddr_connectAdsl = socket.gethostbyname( socket.getfqdn(socket.gethostname())) # print(pcaddr_connectAdsl) self.assertIn('10.10.10.', str(pcaddr_connectAdsl), msg='PPPoE拨号失败') time.sleep(2) # 打开网页测试,测试上网 self.driver = webdriver.Chrome() # self.driver.maximize_window() self.driver.implicitly_wait(10) self.driver.get('http://www.utt.com.cn') time.sleep(2) title1 = self.driver.title print(title1) self.assertEqual(title1, messages, msg='通告未显示') time.sleep(1) # 拨号挂断,通过断言IP地址网段,判断是否挂断 Adsl.disconnect(self) pcaddr_disconnectAdsl = socket.gethostbyname( socket.getfqdn(socket.gethostname())) print(pcaddr_disconnectAdsl) self.assertIn('192.168.', str(pcaddr_disconnectAdsl), msg='PPPoE挂断失败') self.driver.quit() print('已过期账号 到期通告 - 验证成功') # 将期账号验证 # 开始拨号 Adsl.connect(self, name='adsl', username='******', password='******') # 通过断言IP地址网段,判断是否可以拨号成功 pcaddr_connectAdsl = socket.gethostbyname( socket.getfqdn(socket.gethostname())) # print(pcaddr_connectAdsl) self.assertIn('10.10.10.', str(pcaddr_connectAdsl), msg='PPPoE拨号失败') # 打开网页测试,测试上网 self.driver = webdriver.Chrome() # self.driver.maximize_window() self.driver.implicitly_wait(10) self.driver.get('http://www.utt.com.cn') time.sleep(2) title1 = self.driver.title print(title1) self.assertEqual(title1, messages, msg='通告未显示') time.sleep(1) self.driver.get('http://www.baidu.com') time.sleep(2) title1 = self.driver.title print(title1) self.assertEqual(title1, baidutitle, msg='第二次打开网页异常') time.sleep(1) # 拨号挂断,通过断言IP地址网段,判断是否挂断 Adsl.disconnect(self) pcaddr_disconnectAdsl = socket.gethostbyname( socket.getfqdn(socket.gethostname())) print(pcaddr_disconnectAdsl) self.assertIn('192.168.', str(pcaddr_disconnectAdsl), msg='PPPoE挂断失败') self.driver.quit() print('将过期账号 到期通告 - 验证成功') print('账号到期通告 - 验证成功') #删除组织架构组(组内的pppoe账号也会一并删掉) organization_group.group_delete(self) # 关闭pppoe server login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) pppoeauth = Organization_userAuthPage(self.driver, self.url) # 打开用户管理 - 用户认证 pppoeauth.click_UserManage() time.sleep(0.5) pppoeauth.click_userAuth() time.sleep(1) pppoeauth.click_pppoeAuthC() time.sleep(1) # 断言 开启提示信息是否有误 status = str( pppoeauth.getAttribute_byXpath(pppoeauth.pppoeAuthCs, 'checked')) time.sleep(1) self.assertEqual(status, 'true', msg='PPPoE认证关闭出错') print('PPPoE认证关闭 验证成功') self.driver.quit() logger.info('test_003_AuthNotice passed')
def test_002_static(self): u'''外网配置 - 固定接入''' wan_config = NetworkConfig_wanpage(self.driver, self.url) Staticline = getAssertText('Staticline') ConnectState = getAssertText('ConnectState') # 从外网配置页面获取WAN1口地址 # 判断联网状态 i = 0 while i < 21: wan_config.click_refresh() time.sleep(1) list_conState = wan_config.getText_byXpath( wan_config.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变量赋值,页面读取 WAN1_ip = wan_config.getText_byXpath(wan_config.line1IP) # print('WAN1_ip=',WAN1_ip) WAN1_gw = wan_config.getText_byXpath(wan_config.line1gw) # print('WAN1_gw=',WAN1_gw) WAN1_dns = wan_config.getText_byXpath(wan_config.line1Dns) # print('WAN1_dns=',WAN1_dns) time.sleep(1) # 将wan1口的IP/网关/dns 拿来输入 wan_config.click_line1edit() time.sleep(1) access_mode = wan_config.selelement_byName(wan_config.connectionType) Select(access_mode).select_by_value('STATIC') time.sleep(1) wan_config.input_staticIp(WAN1_ip) wan_config.input_staticGateway(WAN1_gw) wan_config.input_staticPriDns(WAN1_dns) wan_config.click_save() time.sleep(10) self.driver.quit() # 修改接口后 可能会回到登录页面 所以关闭,再打开 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) wan_config = NetworkConfig_wanpage(self.driver, self.url) # 进入网络配置-外网配置 wan_config.click_NetworkConfig() time.sleep(0.5) wan_config.click_WANconfig() time.sleep(1) #断言 list_lineType = wan_config.getText_byXpath(wan_config.line1Type) print('list_lineType', list_lineType) self.assertEqual(str(list_lineType), Staticline, msg='连接类型 不为 固定接入') # 判断联网状态 i = 0 while i < 21: wan_config.click_refresh_s() time.sleep(1) list_conState = wan_config.getText_byXpath( wan_config.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 未连接') i = 0 while i < 21: # 判断联网 ,不能上网则报错 # pingTestIP('114.114.114.114') p = pingTestIP('www.baidu.com') print(p, i) if p == 'N': i += 1 time.sleep(3) else: break else: logger.info(u"connect failed") raise Exception('connect failed.') self.driver.quit() logger.info('test_002_static passed')
def test_002_changeRateLAN(self): u'''lan1端口协商速率修改 ''' # # 进入-系统监控-系统状态 获取型号判断是否支持千M # sysmonitor = sysStaticPage(self.driver, self.url) # sysmonitor.click_systemWatch() # time.sleep(0.5) # sysmonitor.click_sysStatic() # time.sleep(1) # Model = str(sysmonitor.getText_byXpath(sysmonitor.Model)) # print(Model) #Lan口速率修改 lanpage = NetworkConfig_LANpage(self.driver, self.url) lanpage.click_NetworkConfig() time.sleep(0.5) lanpage.click_LANconfig() time.sleep(1) lanpage.click_globalconfig() time.sleep(1) LanMode = lanpage.selelement_byXpath(lanpage.sellanRate) # 0-10M全双工 1-100M全双工 2-1000M全双工 3-自动 4-10M半双工 5-100M半双工 #改为10M try: Select(LanMode).select_by_value('0') time.sleep(0.5) except ElementNotVisibleException: CapPic(self.driver) logger.info(u'lan口不支持修改为10M全双工') raise Exception(u'lan口不支持修改为10M全双工') lanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() i = 0 while i < 30: swRate = swconfig.test_getLANSpeed(self) print(swRate) if swRate != 'speed10M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为10M') raise Exception(u'交换机协商速率 不为10M') # 改为100M login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) time.sleep(2) #谨防10M页面卡住 lanpage = NetworkConfig_LANpage(self.driver, self.url) lanpage.click_NetworkConfig() time.sleep(0.5) lanpage.click_LANconfig() time.sleep(1) lanpage.click_globalconfig() time.sleep(1) LanMode = lanpage.selelement_byXpath(lanpage.sellanRate) Select(LanMode).select_by_value('1') time.sleep(0.5) lanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() i = 0 while i < 30: swRate = swconfig.test_getLANSpeed(self) print(swRate) if swRate != 'speed100M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为100M') raise Exception(u'交换机协商速率 不为100M') # 改为1000M support = getExcelValue(portTateLANp) # print('support:',support) if '千' in str(support): login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) lanpage = NetworkConfig_LANpage(self.driver, self.url) lanpage.click_NetworkConfig() time.sleep(0.5) lanpage.click_LANconfig() time.sleep(1) lanpage.click_globalconfig() time.sleep(1) LanMode = lanpage.selelement_byXpath(lanpage.sellanRate) try: Select(LanMode).select_by_value('2') time.sleep(0.5) lanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() i = 0 while i < 30: swRate = swconfig.test_getWAN1Speed(self) print(swRate) if swRate != 'speed1000M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为1000M') raise Exception(u'交换机协商速率 不为1000M') except NoSuchElementException: raise Exception('WAN口不支持千M协商速率') # 改为auto login.loginWeb(self) self.driver.implicitly_wait(10) lanpage = NetworkConfig_LANpage(self.driver, self.url) lanpage.click_NetworkConfig() time.sleep(0.5) lanpage.click_LANconfig() time.sleep(1) lanpage.click_globalconfig() time.sleep(1) LanMode = lanpage.selelement_byXpath(lanpage.sellanRate) Select(LanMode).select_by_value('3') time.sleep(0.5) lanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() swRate = swconfig.test_getWAN1Speed(self) print(swRate) if '千' in str(support): i = 0 while i < 30: swRate = swconfig.test_getWAN1Speed(self) print(swRate) if swRate != 'speed1000M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为1000M') raise Exception(u'交换机协商速率 不为1000M') else: i = 0 while i < 30: swRate = swconfig.test_getLANSpeed(self) print(swRate) if swRate != 'speed100M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为100M') raise Exception(u'交换机协商速率 不为100M') logger.info('test_002_changePortRateLAN passed')
def test_001_changeRateWAN(self): u'''wan1端口协商速率修改 ''' # # 进入-系统监控-系统状态 获取型号判断是否支持千M # sysmonitor = sysStaticPage(self.driver, self.url) # sysmonitor.click_systemWatch() # time.sleep(0.5) # sysmonitor.click_sysStatic() # time.sleep(1) # Model = str(sysmonitor.getText_byXpath(sysmonitor.Model)) # print(Model) #wan口速率修改 wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_NetworkConfig() time.sleep(0.5) wanpage.click_WANconfig() time.sleep(1) wanpage.click_line1edit() time.sleep(1) connectionType = wanpage.selelement_byName(wanpage.connectionType) Select(connectionType).select_by_value('DHCP') time.sleep(0.5) WanMode = wanpage.selelement_byXpath(wanpage.selwanRate) # 0-10M全双工 1-100M全双工 2-1000M全双工 3-自动 4-10M半双工 5-100M半双工 #改为10M try: Select(WanMode).select_by_value('4') time.sleep(0.5) except ElementNotVisibleException: CapPic(self.driver) logger.info(u'WAN口不支持修改为10M半双工') raise Exception(u'WAN口不支持修改为10M半双工') wanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() i = 0 while i < 30: swRate = swconfig.test_getWAN1Speed(self) print(swRate) if swRate != 'speed10M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为10M') raise Exception(u'交换机协商速率 不为10M') # 改为100M login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_NetworkConfig() time.sleep(0.5) wanpage.click_WANconfig() time.sleep(1) wanpage.click_line1edit() time.sleep(1) WanMode = wanpage.selelement_byXpath(wanpage.selwanRate) Select(WanMode).select_by_value('5') time.sleep(0.5) wanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() i = 0 while i < 30: swRate = swconfig.test_getWAN1Speed(self) print(swRate) if swRate != 'speed100M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为100M') raise Exception(u'交换机协商速率 不为100M') # 改为1000M support = getExcelValue(portTateWANp) if '千' in str(support): #参数表中包含“千”兆 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_NetworkConfig() time.sleep(0.5) wanpage.click_WANconfig() time.sleep(1) wanpage.click_line1edit() time.sleep(1) WanMode = wanpage.selelement_byXpath(wanpage.selwanRate) try: Select(WanMode).select_by_value('2') time.sleep(0.5) wanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() i = 0 while i < 30: swRate = swconfig.test_getWAN1Speed(self) print(swRate) if swRate != 'speed1000M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为1000M') raise Exception(u'交换机协商速率 不为1000M') except NoSuchElementException: raise Exception('WAN口不支持千M协商速率') # 改为auto login.loginWeb(self) self.driver.implicitly_wait(10) wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_NetworkConfig() time.sleep(0.5) wanpage.click_WANconfig() time.sleep(1) wanpage.click_line1edit() time.sleep(1) WanMode = wanpage.selelement_byXpath(wanpage.selwanRate) Select(WanMode).select_by_value('3') time.sleep(0.5) wanpage.click_save() time.sleep(10) n = 0 while n < 20: ping = pingTestIP() if ping != 'Y': time.sleep(1) n += 1 else: break self.driver.quit() time.sleep(2) swRate = swconfig.test_getWAN1Speed(self) print(swRate) if '千' in str(support): i = 0 while i < 30: swRate = swconfig.test_getWAN1Speed(self) print(swRate) if swRate != 'speed1000M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为1000M') raise Exception(u'交换机协商速率 不为1000M') else: i = 0 while i < 30: swRate = swconfig.test_getWAN1Speed(self) print(swRate) if swRate != 'speed100M': time.sleep(1) i += 1 else: break else: logger.info(u'交换机端口速率为: %s' % swRate) logger.info(u'交换机协商速率 不为100M') raise Exception(u'交换机协商速率 不为100M') logger.info('test_001_changePortRateWAN passed')
def tearDown(self): nodata = getAssertText('nodata') #删除VPN login.loginWeb(self) self.driver.implicitly_wait(10) pptpl2tp = pptpL2tpPage(self.driver, self.url) pptpl2tp.click_VPNConfig() time.sleep(0.5) pptpl2tp.click_pptpL2tp() time.sleep(1) pptpl2tp.click_selall() time.sleep(0.2) pptpl2tp.click_delall() time.sleep(1) pptpl2tp.click_ok() time.sleep(2) list_nodata = pptpl2tp.getText_byXpath(pptpl2tp.list_nodata) if list_nodata == nodata: logger.info(u'R1 VPN 已删除') else: CapPic(self.driver) logger.info(u'R1 VPN删除失败') raise Exception(u'R1 VPN删除失败') pptpl2tp.click_PPTPGlobalSet() time.sleep(0.5) pptpl2tp.click_pptpserverC() pptpl2tp.click_save() time.sleep(1) pptpl2tp.click_PPTPGlobalSet() time.sleep(0.5) pptpSs = pptpl2tp.getAttribute_byXpath(pptpl2tp.pptpserverCs, 'checked') if pptpSs == 'true': logger.info(u'pptpserver已关闭') else: CapPic(self.driver) logger.info(u'pptpserver未关闭') return Exception(u'pptpserver未关闭') pptpl2tp.click_l2tpGlobalSet() time.sleep(0.5) pptpl2tp.click_L2tpserverC() pptpl2tp.click_saveSl2tp() time.sleep(1) pptpl2tp.click_l2tpGlobalSet() time.sleep(0.5) l2tpSs = pptpl2tp.getAttribute_byXpath(pptpl2tp.L2tpserverCs, 'checked') if l2tpSs == 'true': logger.info(u'L2tpserver已关闭') else: CapPic(self.driver) logger.info(u'L2tpserver未关闭') return Exception(u'L2tpserver未关闭') self.driver.quit() login.test_enableLoginWeb(self, url=vpnRouteUrl) pptpl2tp = pptpL2tpPage(self.driver, self.url) pptpl2tp.click_VPNConfig() time.sleep(0.5) pptpl2tp.click_pptpL2tp() time.sleep(1) pptpl2tp.click_selall() time.sleep(0.2) pptpl2tp.click_delall() time.sleep(1) pptpl2tp.click_ok() time.sleep(2) try: #VPN 路由器是中文简体,在测试其他语言版本时,删除后的nodata会不一致 pptpl2tp.find_list_nodataX() except NoSuchElementException: CapPic(self.driver) logger.info(u'R2 ipsec删除失败') raise Exception(u'R2 ipsec删除失败') else: logger.info(u'R2 ipsec 已删除') # list_nodata = pptpl2tp.getText_byXpath(pptpl2tp.list_nodata) # if list_nodata == nodata: # logger.info(u'R2 VPN 已删除') # else: # CapPic(self.driver) # logger.info(u'R2 VPN删除失败') # raise Exception(u'R2 VPN删除失败') self.driver.quit() logger.info('tearDown over') logger.info('%s' % ('=' * 50))
def test_syslog(self): u'''日志服务器''' pcNetworkID = getweb('pcNetworkID') wiresharkpath = getpath('wiresharkpath') host = gettelnet('host') #0、清理tmp下的syslog.pcapng\log文件 call_Firefox.del_syslog_log(self) #1、开启syslog server pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) login.loginWeb(self) self.driver.implicitly_wait(10) syslog = syslogPage(self.driver, self.url) syslog.click_sysConfig() time.sleep(0.5) syslog.click_Syslog() time.sleep(1) syslog.click_SyslogServer() time.sleep(1) syslog.click_syslogEn() syslog.input_ServerIp(pcaddr) syslog.input_ServerPort('514') syslog.click_save() time.sleep(1) syslogEs = syslog.getAttribute_byXpath(syslog.syslogEs, 'checked') self.assertEqual(syslogEs, 'true', msg='syslog服务器启用失败') #2、wan口改为dhcp 使生成syslog wan_config = NetworkConfig_wanpage(self.driver, self.url) wan_config.click_NetworkConfig() time.sleep(0.5) wan_config.click_WANconfig() time.sleep(1) wan_config.click_line1edit() time.sleep(1) access_mode = wan_config.selelement_byName(wan_config.connectionType) Select(access_mode).select_by_value('DHCP') wan_config.click_save() time.sleep(0.5) # 3、调用wireshark 开启抓包,必须要抓到包之后才会进行下一步,因此放在设置vpn之后,通过抓下一次的log packetfile = tmppath + 'syslogtest.pcapng' dir = wiresharkpath[0:2] getpacket = ('tshark -i%s -f "udp port 514" -w %s -c 2' % (pcNetworkID, packetfile)) os.system('%s && cd %s && %s' % (dir, wiresharkpath, getpacket)) #4、读取抓包显示 并存为log文件 logfile = tmppath + 'syslogtest.log' savepacket = ( 'tshark -r %s -T fields -e "ip.src" -e ip.dst -Y "syslog" > %s ' % (packetfile, logfile)) os.system('%s && cd %s && %s' % (dir, wiresharkpath, savepacket)) #5、读取判断syslog生效 with open(logfile, 'r') as file_to_read: while True: lines = file_to_read.readline() # 整行读取数据 print(lines) if not lines: break if host + pcaddr in lines: print(u'验证通过') self.driver.quit() logger.info('test_reboot1 passed')
def test_004_L2tpclient(self): u'''L2tpclient''' vpnRouteLan = getweb('vpnRouteLan') host = gettelnet('host') StateVPN2 = getAssertText('StateVPN2') login.loginWeb(self) self.driver.implicitly_wait(10) pptpl2tp = pptpL2tpPage(self.driver, self.url) pptpl2tp.click_VPNConfig() time.sleep(0.5) pptpl2tp.click_pptpL2tp() time.sleep(1) # 操作删除 以访已有规则 pptpl2tp.click_selall() time.sleep(0.2) pptpl2tp.click_delall() time.sleep(2) try: self.driver.implicitly_wait(2) pptpl2tp.find_ok() except NoSuchElementException: try: pptpl2tp.find_tipsshowin() time.sleep(1) except NoSuchElementException: pass else: time.sleep(1) print('VPN隧道列表为空') pptpl2tp.click_add() time.sleep(2) pptpl2tp.click_workMode2() pptpl2tp.click_workModel2tp() pptpl2tp.input_TunNames('testC') pptpl2tp.input_TunNamesIP(vpnRouteWan) pptpl2tp.input_userNames('test') pptpl2tp.input_password('test') pptpl2tp.input_remoteInIp(vpnRouteLan) pptpl2tp.input_remoteInIPMask('255.255.255.0') pptpl2tp.click_save() time.sleep(2) self.driver.quit() # 另外一台路由器 配置pptp Server login.test_enableLoginWeb(self, url=vpnRouteUrl) pptpl2tp = pptpL2tpPage(self.driver, self.url) pptpl2tp.click_VPNConfig() time.sleep(0.5) pptpl2tp.click_pptpL2tp() time.sleep(1) # 操作删除 以访已有规则 pptpl2tp.click_selall() time.sleep(0.2) pptpl2tp.click_delall() time.sleep(2) try: self.driver.implicitly_wait(2) pptpl2tp.find_ok() except NoSuchElementException: try: pptpl2tp.find_tipsshowin() time.sleep(1) except NoSuchElementException: pass else: time.sleep(1) print('VPN隧道列表为空') pptpl2tp.click_l2tpGlobalSet() #语言问题待修改成xpath time.sleep(0.5) pptpl2tp.click_L2tpserverEn() pptpl2tp.input_priDns('114.114.114.114') pptpl2tp.click_save() time.sleep(1) pptpl2tp.click_l2tpGlobalSet() time.sleep(0.5) l2tpSs = pptpl2tp.getAttribute_byXpath(pptpl2tp.L2tpserverEs, 'checked') if l2tpSs == 'true': logger.info(u'L2tpserver已开启') else: CapPic(self.driver) logger.info(u'L2tpserver未开启') return Exception(u'L2tpserver未开启') pptpl2tp.click_Tunnellist() time.sleep(0.5) pptpl2tp.click_add() time.sleep(1) pptpl2tp.click_workMode1() pptpl2tp.click_workModel2tp() pptpl2tp.input_TunNames('testC') seluserType = pptpl2tp.selelement_byName(pptpl2tp.seluserType) Select(seluserType).select_by_value('lantolan') pptpl2tp.input_userNames('test') pptpl2tp.input_password('test') pptpl2tp.input_remoteInIp(host) pptpl2tp.input_remoteInIPMask('255.255.255.0') pptpl2tp.click_saveS() time.sleep(2) i = 0 while i < 100: pptpl2tp.click_pptpL2tp() time.sleep(1) list_status = pptpl2tp.getText_byXpath(pptpl2tp.list_status) print(list_status) if list_status == StateVPN2: logger.info(u'L2tp 已建立') break else: time.sleep(3) i += 1 else: logger.info(u'L2tp 未建立成功') CapPic(self.driver) raise Exception(u'L2tp未建立成功') self.driver.quit() logger.info('test_004_L2tpclient passed')
def test_001_PPTPserver(self): u'''PPTPserver''' vpnRouteLan = getweb('vpnRouteLan') host = gettelnet('host') StateVPN2 = getAssertText('StateVPN2') login.loginWeb(self) self.driver.implicitly_wait(10) pptpl2tp = pptpL2tpPage(self.driver, self.url) pptpl2tp.click_VPNConfig() time.sleep(0.5) pptpl2tp.click_pptpL2tp() time.sleep(1) # 操作删除 以访已有规则 pptpl2tp.click_selall() time.sleep(0.2) pptpl2tp.click_delall() time.sleep(2) try: self.driver.implicitly_wait(2) pptpl2tp.find_ok() except NoSuchElementException: try: pptpl2tp.find_tipsshowin() time.sleep(1) except NoSuchElementException: pass else: time.sleep(1) print('VPN隧道列表为空') pptpl2tp.click_PPTPGlobalSet() time.sleep(0.5) pptpl2tp.click_pptpserverEn() pptpl2tp.input_priDns('114.114.114.114') pptpl2tp.click_save() time.sleep(1) pptpSs = pptpl2tp.getAttribute_byXpath(pptpl2tp.pptpserverEs, 'checked') if pptpSs == 'true': logger.info(u'pptpserver已开启') else: CapPic(self.driver) logger.info(u'pptpserver未开启') return Exception(u'pptpserver未开启') pptpl2tp.click_add() time.sleep(1) pptpl2tp.click_workMode1() pptpl2tp.click_workModepptp() pptpl2tp.input_TunNames('testS') seluserType = pptpl2tp.selelement_byName(pptpl2tp.seluserType) Select(seluserType).select_by_value('lantolan') pptpl2tp.input_userNames('test') pptpl2tp.input_password('test') pptpl2tp.input_remoteInIp(vpnRouteLan) pptpl2tp.input_remoteInIPMask('255.255.255.0') pptpl2tp.click_saveS() time.sleep(2) # 从外网配置页面获取WAN1口地址 wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_NetworkConfig() time.sleep(0.5) wanpage.click_WANconfig() time.sleep(1) # WAN1 ip变量赋值,页面读取 # 判断联网状态 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)) # print('WAN1_ip=',WAN1_ip) time.sleep(1) self.driver.quit() # 另外一台路由器 配置pptp Client login.test_enableLoginWeb(self, url=vpnRouteUrl) pptpl2tp = pptpL2tpPage(self.driver, self.url) pptpl2tp.click_VPNConfig() time.sleep(0.5) pptpl2tp.click_pptpL2tp() time.sleep(1) # 操作删除 以访已有规则 pptpl2tp.click_selall() time.sleep(0.2) pptpl2tp.click_delall() time.sleep(2) try: self.driver.implicitly_wait(2) pptpl2tp.find_ok() except NoSuchElementException: try: pptpl2tp.find_tipsshowin() time.sleep(1) except NoSuchElementException: pass else: time.sleep(1) print('VPN隧道列表为空') pptpl2tp.click_add() time.sleep(2) pptpl2tp.click_workMode2() pptpl2tp.click_workModepptp() pptpl2tp.input_TunNames('testS') pptpl2tp.input_TunNamesIP(WAN1_ip) pptpl2tp.input_userNames('test') pptpl2tp.input_password('test') pptpl2tp.input_remoteInIp(host) pptpl2tp.input_remoteInIPMask('255.255.255.0') pptpl2tp.click_save() time.sleep(2) i = 0 while i < 100: pptpl2tp.click_pptpL2tp() time.sleep(1) list_status = pptpl2tp.getText_byXpath(pptpl2tp.list_status) print(list_status) if list_status == StateVPN2: logger.info(u'PPTP 已建立') break else: time.sleep(3) i += 1 else: logger.info(u'pptp 未建立成功') CapPic(self.driver) raise Exception(u'pptp未建立成功') self.driver.quit() logger.info('test_001_PPTPserver passed')
def test_004_hairDown(self): u'''自动下发功能(重启后也能生效)''' OnlineA = getAssertText('OnlineA') netname = netNamePage(self.driver, self.url) netname.click_wirelessExtension() time.sleep(0.5) netname.click_netName() time.sleep(1) #取消掉第1个ssid的自动下发功能 list_autosend1 = str(netname.getAttribute_byXpath(netname.list_autosend1, 'checked')) if list_autosend1 == 'true': #如果ssid1 自动下发打开(性能参数和002中已经核对默认自动下发是否已打开) netname.click_list_autosend1c() time.sleep(1) list_autosend1 = str(netname.getAttribute_byXpath(netname.list_autosend1, 'checked')) self.assertEqual(list_autosend1, 'None', msg='ssid1自动下发 未取消') #勾选第四个ssid的自动下发 list_sutosend4 = str(netname.getAttribute_byXpath(netname.list_sutosend4, 'checked')) if list_sutosend4 == 'None': netname.click_list_sutosend4c() time.sleep(1) list_sutosend4 = str(netname.getAttribute_byXpath(netname.list_sutosend4, 'checked')) self.assertEqual(list_sutosend4, 'true', msg='ssid4自动下发 未开启') self.driver.quit() #1、先重启路由器 Reboot.test_reboot1(self) time.sleep(40) #刚重启好 操作AP恢复出厂 可能会引起配置未删除的问题,这里等待一下 print('重启后 稍等一下 。。。') #2、确认AP均上线 login.loginWeb(self) self.driver.implicitly_wait(10) device = deviceMgmtPage(self.driver, self.url) device.click_wirelessExtension() time.sleep(0.5) device.click_deviceMgmt() time.sleep(45) # 先确认AP均上线 x = 0 while x < 100: device.click_refreshtable() time.sleep(1) list_status1 = device.getText_byXpath(device.list_status1) list_status2 = device.getText_byXpath(device.list_status2) list_status3 = device.getText_byXpath(device.list_status3) list_status4 = device.getText_byXpath(device.list_status4) print(list_status1, list_status2, list_status3, list_status4, x) if list_status1 == OnlineA and list_status2 == OnlineA and list_status3 == OnlineA and list_status4 == OnlineA: print('4台AP均在线', x) channel1 = str(device.getAttribute_byXpath(device.list_channel1, 'data-local')) channel2 = str(device.getAttribute_byXpath(device.list_channel2, 'data-local')) channel3 = str(device.getAttribute_byXpath(device.list_channel3, 'data-local')) channel4 = str(device.getAttribute_byXpath(device.list_channel4, 'data-local')) print('channel1=', channel1, 'channel2=', channel2, 'channel3=', channel3, 'channel4=', channel4, x) if channel1 != '' and channel2 != '' and channel3 != '' and channel4 != '': print('4台AP2.4G无线接口已同步', x) break else: time.sleep(3) else: time.sleep(3) x = x + 1 else: CapPic(self.driver) logger.info(u'AP 未能同步2.4G无线接口') raise Exception('AP 未能同步2.4G无线接口') # 3、设备管理恢复AP验证自动下发功能 APmanagement.test_006_resertAP(self) logger.info('test_004_hairDown passed')
def setUp(self): logger.info('setUp start') login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10)
def test_001_easyIP(self): u'''验证 easyIP,后台telnet验证iptables规则''' #新增 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) natRule = natRulePage(self.driver, self.url) # 配置映射 natRule.click_NetworkConfig() time.sleep(0.5) natRule.click_portMapping() time.sleep(1) natRule.click_natRule() time.sleep(1) natRule.click_add() time.sleep(1) natRule.input_RuleIDs('easyIPtest') natRule.input_InFromIPs(host2 + '200') natRule.input_InEndIPs(host2 + '202') natRule.input_OutIPs('192.169.122.250') time.sleep(1) natRule.click_save() time.sleep(1) #断言 InFromIPs = str(natRule.getText_byXpath(natRule.list_InFromIPs)) self.assertEqual(InFromIPs, host2 + '200', msg='内网起始IP地址 与设置的不一致') InEndIPs = str(natRule.getText_byXpath(natRule.list_InEndIPs)) self.assertEqual(InEndIPs, host2 + '202', msg='内网结束IP地址 与设置的不一致') OutIPs = str(natRule.getText_byXpath(natRule.list_OutIPs)) self.assertEqual(OutIPs, '192.169.122.250', msg='外网起始IP地址 与设置的不一致') print('easyIP规则 已添加') # 连接Telnet服务器 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'iptables -t nat -L wan1_nat_rule_loop' + b'\n') # 输出结果,判断 time.sleep(1) result = str(tn.read_very_eager()) # 只会存最后一条命令的结果 print('-------------------输出结果------------------------') # 命令执行结果 print('result:', result) #后台实际应有的结果 result1='SNAT all -- anywhere anywhere source IP range %s200-%s202 to:192.169.122.250' \ % (host2,host2) # 判断 if result1 in result: print('easyIP规则 验证成功') else: raise Exception('easyIP规则 验证失败') # 如果没有则报错 tn.close() # tn.write('exit\n') self.driver.quit() logger.info('test_001_easyIP passed')
def test_002_userstatus(self): u'''PPPoE拨号挂断&&查看拨号信息&&同网段通信''' #将有线地址改为不同网段的地址,以验证同网段通信 # 调用bat脚本 地址修改为 192.168.189.39 网关192.168.198.1 os.system('%s' % (batpath + 'changeStaticIP.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.198.39': time.sleep(2) n += 1 else: print('地址已修改为地址 192.168.198.39', n) break else: raise Exception('地址修改为192.168.198.39 失败') # 开始拨号 Adsl.connect(self) # 通过断言IP地址网段,判断是否可以拨号成功 pcaddr_connectAdsl = socket.gethostbyname( socket.getfqdn(socket.gethostname())) # print(pcaddr_connectAdsl) self.assertIn('10.10.10.', str(pcaddr_connectAdsl), msg='PPPoE拨号失败') # 打开网页测试,测试上网 self.driver = webdriver.Chrome() # self.driver.maximize_window() self.driver.implicitly_wait(10) self.driver.get('http://www.baidu.com') time.sleep(2) title1 = self.driver.title print(title1) self.assertEqual(title1, baidutitle, msg='网页打开异常') time.sleep(1) #打开路由器页面测试同网段访问 self.driver.get(RouteUrl) time.sleep(2) url = self.driver.current_url print(url) self.assertIn('login.html', url, msg='无法访问路由器') self.driver.quit() #查看拨号信息显示 # 打开用户管理 - 用户状态 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) status = Organization_userStatusPage(self.driver, self.url) status.click_UserManage() time.sleep(0.5) status.click_userstatus() time.sleep(1) # 将页面刷新按钮改成“手动” sel = status.selelement_byXpath(status.selmanual) Select(sel).select_by_value('manual') time.sleep(1) status.click_refreshtable() time.sleep(1) #通过过滤IP地址验证是否显示拨号用户信息 status.input_search(str(pcaddr_connectAdsl)) status.click_searchb() list_IP1 = str(status.getText_byXpath(status.list_IP1)) self.assertIsNotNone(list_IP1, msg='pppoe列表 未显示拨号用户信息') self.driver.quit() #拨号挂断,通过断言IP地址网段,判断是否挂断 Adsl.disconnect(self) pcaddr_disconnectAdsl = socket.gethostbyname( socket.getfqdn(socket.gethostname())) print(pcaddr_disconnectAdsl) self.assertIn('192.168.', str(pcaddr_disconnectAdsl), msg='PPPoE挂断失败') # 将IP改回自动获取 # 调用bat脚本 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_002_userstatus passed')
def test_001_IPMACBinding(self): u'''仅IP/MAC绑定用户 上网''' organization_group.import_empty_template(self) # 判断是否有组织架构,有则清空 # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr = socket.gethostbyname(socket.getfqdn(socket.gethostname())) #先创建用户组 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) group = OrganizationMembersPage(self.driver, self.url) # 打开用户管理 - 组织成员 group.click_UserManage() time.sleep(0.5) group.click_userGroup() time.sleep(1) group.click_addBtnNewTree1() time.sleep(1) group.input_groupName('bangdingTest') group.click_save() time.sleep(2) group.click_userGroup() time.sleep(1) list_groupName1 = str(group.getText_byID(group.list_groupName1)) self.assertEqual(list_groupName1, 'bangdingTest', msg='新增组出错') print('组织架构 - 新增组完成') group.click_addUser() time.sleep(1) group.input_UserName('bangdingTest') group.click_IPMACb() time.sleep(1) group.input_normalIPMac_IP(pcaddr) group.input_normalIPMac_Mac(PcMac) group.click_save() time.sleep(2) group.click_list_groupName_c() time.sleep(1) listAddIP = group.getText_byXpath(group.listAddIP) self.assertEqual(listAddIP, pcaddr, msg='新增 用户IP出错') listAddMAC = group.getText_byXpath(group.listAddMAC) self.assertEqual(listAddMAC, PcMac, msg='新增 用户MAC出错') print('组织架构 - 新增用户完成') # 判断联网 ,不能上网则报错 p = pingTestIP('223.5.5.5') if p == 'N': raise Exception('connect failed.') #开启"仅IP/MAC绑定用户能上网" group.click_globalconfig() time.sleep(1) group.click_IPMACb_E() time.sleep(0.5) group.click_saveAllSetting() time.sleep(1) # 断言 开启提示信息是否有误 tips = str(group.getText_byClass(group.tips)) time.sleep(1) self.assertEqual(tips, savesucess, msg='"仅IP/MAC绑定用户能上网" 开启出错') print('"仅IP/MAC绑定用户能上网" 开启') # 判断联网 ,不能上网则报错 pingTestIP('www.baidu.com') #避免失误 p = pingTestIP('www.baidu.com') if p == 'N': raise Exception('connect failed.') # 修改MAC为 非绑定的MAC地址 # 调用bat脚本 os.system('%s' % (batpath + 'changeMac.bat')) time.sleep(5) 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('未获取到地址1') # 开启绑定情况下 仅更改mac 可能会获取不到地址 os.system('%s' % (batpath + 'ipconfig_release.bat')) time.sleep(5) os.system('%s' % (batpath + 'ipconfig_renew.bat')) time.sleep(5) i = 0 while i < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr_new = socket.gethostbyname( socket.getfqdn(socket.gethostname())) print(pcaddr_new, i) if '192.168.' not in str(pcaddr_new): time.sleep(2) i += 1 else: print('IP地址已自动获取成功2', i) break else: raise Exception('未获取到地址2') # 判断联网 ,测试该项改完mac之后前几个包有可能可以ping通,为避免判断失误,加一个缓冲 pingTestIP('www.baidu.com') #避免失误 pingTestIP('www.163.com') #避免失误 #判断联网 ,非绑定用户应该不能上网 time.sleep(3) p = pingTestIP('114.114.114.114') if p == 'Y': raise Exception('非绑定用户依旧可以上网') time.sleep(1) #将mac改回 # 调用bat脚本 os.system('%s' % (batpath + 'changeMacToBack.bat')) time.sleep(5) 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('未获取到地址1') # 开启绑定情况下 仅更改mac 可能会获取不到地址 os.system('%s' % (batpath + 'ipconfig_release.bat')) time.sleep(5) os.system('%s' % (batpath + 'ipconfig_renew.bat')) time.sleep(5) i = 0 while i < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr_new = socket.gethostbyname( socket.getfqdn(socket.gethostname())) print(pcaddr_new, i) if '192.168.' not in str(pcaddr_new): time.sleep(2) i += 1 else: print('IP地址已自动获取成功2', i) break else: raise Exception('未获取到地址2') # 判断联网 ,不能上网则报错 pingTestIP('www.baidu.com') #避免失误 p = pingTestIP('www.baidu.com') if p == 'N': raise Exception('connect failed.') logger.info('test_001_IPMACBinding passed')
def test_001_openPPPoEAuth_addAcc(self): u'''开启PPPoE认证 - 创建PPPoE账号''' # 005中设置了黑名单上网,这里增加一个判断联网 nodata = getAssertText('nodata') # 判断联网 ,不能则改回mac p = pingTestIP('www.baidu.com') if p == 'N': # 将mac改回 # 调用bat脚本 os.system('%s' % (batpath + 'changeMacToBack.bat')) time.sleep(5) 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('未获取到地址1') # 开启绑定情况下 仅更改mac 可能会获取不到地址 os.system('%s' % (batpath + 'ipconfig_release.bat')) time.sleep(5) os.system('%s' % (batpath + 'ipconfig_renew.bat')) time.sleep(5) i = 0 while i < 30: # 获取本机ip 默认有线地址,有线断开会显示无线 pcaddr_new = socket.gethostbyname( socket.getfqdn(socket.gethostname())) print(pcaddr_new, i) if '192.168.' not in str(pcaddr_new): time.sleep(2) i += 1 else: print('IP地址已自动获取成功2', i) break else: raise Exception('未获取到地址2') # 删除黑名单绑定 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) blacklist = Organization_userBlackPage(self.driver, self.url) # 打开用户管理 - 组织成员 blacklist.click_UserManage() time.sleep(0.5) blacklist.click_blacklist() time.sleep(1) blacklist.click_delete() time.sleep(1) blacklist.click_ok() time.sleep(1) # 断言 开启提示信息是否有误 listtips = str(blacklist.getText_byXpath(blacklist.list_tips)) time.sleep(1) self.assertEqual(listtips, nodata, msg='黑名单用户删除失败') print('黑名单用户已删除') self.driver.quit() organization_group.import_empty_template(self) # 判断组织架构是否有其他组 有则清空 #调用新增组 “SelfComputerTest” organization_group.group_add(self) time.sleep(1) #开启PPPoE认证 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) pppoeauth = Organization_userAuthPage(self.driver, self.url) # 打开用户管理 - 用户认证 pppoeauth.click_UserManage() time.sleep(0.5) pppoeauth.click_userAuth() time.sleep(1) #修改PPPoE服务器配置 pppoeauth.click_PPPoEConfig() time.sleep(2) pppoeauth.input_pppoeStart('10.10.10.1') pppoeauth.input_pppoePriDns('114.114.114.114') pppoeauth.click_PppoeNoticeEn() pppoeauth.input_remainDays('50') #账号到期提前通告时间50天 配合账号将要过期的通告 pppoeauth.click_save() time.sleep(2) #启用pppoe server pppoeauth.click_pppoeAuthEn() time.sleep(1) # 断言 开启提示信息是否有误 status = str( pppoeauth.getAttribute_byXpath(pppoeauth.pppoeAuthEns, 'checked')) time.sleep(1) print(status) self.assertEqual(status, 'true', msg='PPPoE认证开启出错') print('PPPoE认证开启 验证成功') #配置一个不计费的PPPoE账号 pppoeauth.click_account() time.sleep(1) pppoeauth.click_addUser() time.sleep(1) pppoeauth.input_name('pppoeauth') #仅有一个用户组,这里省略 select = pppoeauth.selelement_byName(pppoeauth.authType) Select(select).select_by_value('PPPoE') time.sleep(1) pppoeauth.input_authAccount('pppoeauth') pppoeauth.input_authPassword('pppoeauth') pppoeauth.click_save() time.sleep(2) #断言 添加的账号 认证方式和认证账号 是否正常 list_authtype = pppoeauth.getText_byXpath(pppoeauth.list_authtype) list_authAcc = pppoeauth.getText_byXpath(pppoeauth.list_authAcc) self.assertEqual(str(list_authtype), 'PPPoE', msg='认证方式显示不为“PPPoE”') self.assertEqual(str(list_authAcc), 'pppoeauth', msg='认证账号不为“pppoeauth”') self.driver.quit() logger.info('test_001_openPPPoEAuth_addAcc passed')
def test_002_one2one(self): u'''验证 one2one,后台telnet验证iptables规则''' nodata = getAssertText('nodata') #修改上一条规则 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) natRule = natRulePage(self.driver, self.url) # 配置映射 natRule.click_NetworkConfig() time.sleep(0.5) natRule.click_portMapping() time.sleep(1) natRule.click_natRule() time.sleep(1) natRule.click_edit() time.sleep(1) natRule.input_RuleIDs('one2onetest') natRule.click_typeOne2one() natRule.input_InFromIPs('192.168.1.200') natRule.input_InEndIPs('192.168.1.201') natRule.input_OutIPs('192.169.122.250') time.sleep(1) natRule.click_save() time.sleep(1) #断言 InFromIPs = str(natRule.getText_byXpath(natRule.list_InFromIPs)) self.assertEqual(InFromIPs, '192.168.1.200', msg='内网起始IP地址 与设置的不一致') InEndIPs = str(natRule.getText_byXpath(natRule.list_InEndIPs)) self.assertEqual(InEndIPs, '192.168.1.201', msg='内网结束IP地址 与设置的不一致') OutIPs = str(natRule.getText_byXpath(natRule.list_OutIPs)) self.assertEqual(OutIPs, '192.169.122.250', msg='外网起始IP地址 与设置的不一致') print('easyIP规则 已添加') # 连接Telnet服务器 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) tn.set_debuglevel(5) # 级别越高输出的调试信息越多,并没有看出区别 # 输入登录用户名 tn.read_until(b'login:'******'Password:'******'#') tn.write(b'iptables -t nat -L wan1_nat_rule_loop' + b'\n') # 输出结果,判断 time.sleep(1) result = str(tn.read_very_eager()) # 只会存最后一条命令执行结果 print('-------------------输出结果------------------------') # 命令执行结果 print('result:', result) # 后台实际应有的结果 result1 = 'SNAT all -- anywhere 192.168.1.200 UTTDEV match --is-lan-in to:192.168.1.1' result2 = 'SNAT all -- 192.168.1.200 anywhere to:192.169.122.250' result3 = 'SNAT all -- anywhere 192.168.1.201 UTTDEV match --is-lan-in to:192.168.1.1' result4 = 'SNAT all -- 192.168.1.201 anywhere to:192.169.122.251' result_list=[result1,result2,result3,result4] # 判断 if all(t in result for t in result_list): print('one2one规则 验证成功') else: raise Exception('one2one规则 验证失败') # 如果没有则报错 tn.close() # tn.write('exit\n') #删除NAT规则 natRule.click_delete() time.sleep(1) natRule.click_ok() time.sleep(1) listtips=str(natRule.getText_byXpath(natRule.listtips)) self.assertEqual(listtips,nodata,msg='删除规则有误') self.driver.quit() logger.info('test_002_one2one passed')
def test_003_pppoe(self): u'''外网配置 - PPPoE接入''' wan_config = NetworkConfig_wanpage(self.driver, self.url) PPPoEline = getAssertText('PPPoEline') ConnectState = getAssertText('ConnectState') wan_config.click_line1edit() time.sleep(1) access_mode = wan_config.selelement_byName(wan_config.connectionType) Select(access_mode).select_by_value('PPPOE') time.sleep(1) wan_config.input_pppoeUser('111') wan_config.input_pppoePass('111') wan_config.click_save() time.sleep(10) self.driver.quit() # 修改接口后 可能会回到登录页面 所以关闭,再打开 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) wan_config = NetworkConfig_wanpage(self.driver, self.url) # 进入网络配置-外网配置 wan_config.click_NetworkConfig() time.sleep(0.5) wan_config.click_WANconfig() time.sleep(1) #断言 list_lineType = wan_config.getText_byXpath(wan_config.line1Type) # print('list_lineType:',list_lineType) self.assertEqual(str(list_lineType), PPPoEline, msg='连接类型 不为 PPPoE接入') # PPPoE接入 拨号成功才会显示已连接 i = 0 while i < 21: wan_config.click_refresh() time.sleep(1) list_conState = wan_config.getText_byXpath( wan_config.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 未连接') i = 0 while i < 21: # 判断联网 ,不能上网则报错 # pingTestIP('114.114.114.114') p = pingTestIP('www.baidu.com') print(p, i) if p == 'N': i += 1 time.sleep(3) else: break else: logger.info(u"connect failed") raise Exception('connect failed.') # list_connectState1 = wan_config.getText_byXpath(wan_config.connectState1) # print('list_connection_state:',str(list_connectState1)) # if str(list_connectState1) != ConnectState: # PPPoE接入 拨号成功才会显示已连接 # time.sleep(5) # wan_config.click_refresh() # time.sleep(0.5) # list_connectState1 = wan_config.getText_byXpath(wan_config.connectState1) # if str(list_connectState1) != ConnectState: # wan_config.click_connectState1() # wan_config.click_dial() # time.sleep(10) # wan_config.click_refresh() # time.sleep(0.5) # list_connectState1 = wan_config.getText_byXpath(wan_config.connectState1) # if str(list_connectState1) != ConnectState: # raise Exception('WAN1 未连接') # else: # 已连接 # time.sleep(3) # pingTestIP('114.114.114.114') #避免失误 # pingTestIP('www.baidu.com') #避免失误 # p = pingTestIP('www.baidu.com') # if p == 'N': # raise Exception('connect failed.') # else: # 已连接 # time.sleep(3) # pingTestIP('114.114.114.114') #避免失误 # pingTestIP('www.baidu.com') #避免失误 # p = pingTestIP('www.baidu.com') # if p == 'N': # raise Exception('connect failed.') # else: # 已连接 # time.sleep(3) # pingTestIP('114.114.114.114') # pingTestIP('www.baidu.com') # p = pingTestIP('www.baidu.com') # if p == 'N': # raise Exception('connect failed.') self.driver.quit() print(u'外网配置 - PPPoE接入 验证通过') #改回动态接入 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) wan_config = NetworkConfig_wanpage(self.driver, self.url) # 进入网络配置-外网配置 wan_config.click_NetworkConfig() time.sleep(0.5) wan_config.click_WANconfig() time.sleep(1) wan_config.click_line1edit() time.sleep(1) access_mode = wan_config.selelement_byName(wan_config.connectionType) Select(access_mode).select_by_value('DHCP') wan_config.click_save() time.sleep(10) self.driver.quit() logger.info('test_003_pppoe passed')
def test_001_easyIP(self): u'''验证 easyIP,后台telnet验证iptables规则''' # 通过用户状态获取httpserver的IP地址 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) status = Organization_userStatusPage(self.driver, self.url) status.click_UserManage() time.sleep(0.5) status.click_userstatus() time.sleep(1) # 将页面刷新按钮改成“手动” sel = status.selelement_byXpath(status.selmanual) Select(sel).select_by_value('manual') time.sleep(1) status.click_refreshtable() time.sleep(1) status.input_search(serverPcMac) status.click_searchb() time.sleep(1) try: serverIP = status.getText_byXpath(status.list_IP1) except NoSuchElementException: raise Exception(u'用户状态中未找到server IP') # print(serverIP) # 从外网配置页面获取WAN1口地址 wanpage = NetworkConfig_wanpage(self.driver, self.url) wanpage.click_NetworkConfig() time.sleep(0.5) wanpage.click_WANconfig() time.sleep(1) # WAN1 ip变量赋值,页面读取 # 判断联网状态 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)) print('WAN1_ip=',WAN1_ip) time.sleep(1) #判断IP serverIPadd = str(serverIP).split(r'.')[-1] print(serverIPadd) if (int(serverIPadd) - 1 > 1) and (int(serverIPadd) + 2 <= 255): serverIPadd_1 = str(serverIP).split(r'.')[:-1] + str(int(serverIPadd) - 1) serverIPadd1 = str(serverIP).split(r'.')[:-1] + str(int(serverIPadd) + 1) serverIPadd2 = str(serverIP).split(r'.')[:-1] + str(int(serverIPadd) + 2) else: serverIPadd_1 = str(serverIP).split(r'.')[:-1] + str(int(serverIPadd) + 1) serverIPadd1 = str(serverIP).split(r'.')[:-1] + str(int(serverIPadd) - 2) serverIPadd2 = str(serverIP).split(r'.')[:-1] + str(int(serverIPadd) - 1) WAN1_ipadd = str(WAN1_ip).split(r'.')[-1] if int(WAN1_ipadd) + 1 <= 255: WAN1_ipadd1 = str(WAN1_ip).split(r'.')[:-1] + str(int(WAN1_ipadd) + 1) else: WAN1_ipadd1 = str(int(WAN1_ipadd) - 1) #新增 natRule = natRulePage(self.driver, self.url) #1 包含 边界 natRule.click_NetworkConfig() time.sleep(0.5) natRule.click_portMapping() time.sleep(1) natRule.click_natRule() time.sleep(1) natRule.click_add() time.sleep(1) natRule.input_RuleIDs('easyIPtest') natRule.input_InFromIPs(serverIP) natRule.input_InEndIPs(serverIPadd2) natRule.input_OutIPs(WAN1_ipadd1) time.sleep(1) natRule.click_save() time.sleep(1) #断言 InFromIPs = str(natRule.getText_byXpath(natRule.list_InFromIPs)) self.assertEqual(InFromIPs,serverIP, msg='内网起始IP地址 与设置的不一致') InEndIPs = str(natRule.getText_byXpath(natRule.list_InEndIPs)) self.assertEqual(InEndIPs, serverIPadd2, msg='内网结束IP地址 与设置的不一致') OutIPs = str(natRule.getText_byXpath(natRule.list_OutIPs)) self.assertEqual(OutIPs, WAN1_ipadd1, msg='外网起始IP地址 与设置的不一致') print('easyIP规则 已添加') # 3、调用wireshark 开启抓包,必须要抓到包之后才会进行下一步,因此放在设置vpn之后,通过抓下一次的log packetfile = tmppath + 'syslogtest.pcapng' dir = wiresharkpath[0:2] getpacket = ('tshark -i%s -f "icmp" -w %s -c 2' % (pcNetworkID, packetfile)) os.system('%s && cd %s && %s' % (dir, wiresharkpath, getpacket)) # 4、读取抓包显示 并存为log文件 logfile = tmppath + 'syslogtest.log' savepacket = ('tshark -r %s -T fields -e "ip.src" -e ip.dst -Y "syslog" > %s ' % (packetfile, logfile)) os.system('%s && cd %s && %s' % (dir, wiresharkpath, savepacket)) # 5、读取判断syslog生效 with open(logfile, 'r') as file_to_read: while True: lines = file_to_read.readline() # 整行读取数据 print(lines) if not lines: break if host + pcaddr in lines: print(u'验证通过') # # 连接Telnet服务器 # 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) # tn.set_debuglevel(5) # 级别越高输出的调试信息越多,并没有看出区别 # # 输入登录用户名 # tn.read_until(b'login:'******'Password:'******'#') # tn.write(b'iptables -t nat -L wan1_nat_rule_loop' + b'\n') # # 输出结果,判断 # time.sleep(1) # result = str(tn.read_very_eager()) # 只会存最后一条命令的结果 # print('-------------------输出结果------------------------') # # 命令执行结果 # print('result:', result) # #后台实际应有的结果 # result1='SNAT all -- anywhere anywhere source IP range 192.168.1.200-192.168.1.202 to:192.169.122.250' # # 判断 # if result1 in result: # print('easyIP规则 验证成功') # else: # raise Exception('easyIP规则 验证失败') # 如果没有则报错 # tn.close() # tn.write('exit\n') self.driver.quit() logger.info('test_001_easyIP passed')
def test_newSoftware3(self, newversion3=getweb('SoftVersion3')): u'''软件升级 - 更新新正常版本''' # newversion = getweb('SoftVersion1') UploadingTips = getAssertText('UploadingTips') WillReboottips = getAssertText('WillReboottips') num = 0 Expect_Version = '' newversioa1 = newversion3.split(r'-') if len(newversioa1) == 2: # eg:'nv640Ev1.5.0-130918' Expect_Version = newversioa1[0] + '-' + newversioa1[1] else: # eg:'nvA655Wv3.0.0-200116-142208' ; 'TL-BWR-21v3.2.1-200304-171146' while num < len(newversioa1) - 1: Expect_Version += newversioa1[num] + '-' num += 1 else: Expect_Version = Expect_Version[:-1] print(Expect_Version) # 版本上传 newSoftware = (str(tmppath) + str(newversion3) + '.bin') self.driver.implicitly_wait(10) software = MaintenancePage(self.driver, self.url) # 选择文件上传 self.driver.find_element_by_name('updatesoftware').send_keys( newSoftware) # software.input_updatesoftware(newSoftware) time.sleep(1) software.click_update() time.sleep(1) software.click_ok() time.sleep(3) # 小设备 上传时间较长,判断sleep时间 tips = str(software.getText_byClass(software.u_tim_str)) if UploadingTips in tips: time.sleep(50) elif tips == WillReboottips: time.sleep(3) # 设备重启时间不一致,做个判断 time.sleep(30) i = 0 while i < 20: now_url = str(self.driver.current_url) print(now_url, i) if '/noAuth/login.html' not in now_url: # 如果不同 time.sleep(5) else: break i += 1 self.driver.quit() # 判断是否升级成功 login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) software = MaintenancePage(self.driver, self.url) # 进入系统配置-系统维护-系统升级 software.click_sysConfig() time.sleep(0.5) software.click_Maintenance() time.sleep(1) now_Version = str(software.getText_byXpath(software.version)) if Expect_Version != now_Version: CapPic(self.driver) logger.info(u"升级新版本 升级后版本号与升级版本号不一致") raise Exception('升级新版本 升级后版本号与升级版本号不一致') else: print('升级新版本 验证通过') self.driver.quit()
def test_002_webAuthTest(self): u'''web认证测试''' if Support == '√': logger.info(u'参数支持本地认证') webauthpage = getAssertText('webauthpage') webauthsucess = getAssertText('webauthsucess') # 新增用户组及认证账号 # 调用新增组 “SelfComputerTest” organization_group.group_add(self) time.sleep(1) # login.loginWeb(self) # admin账号登录 self.driver.implicitly_wait(10) webauth = Organization_userAuthPage(self.driver, self.url) # 打开用户管理 - 用户认证 webauth.click_UserManage() time.sleep(0.5) webauth.click_userAuth() time.sleep(1) webauth.click_account() time.sleep(1) webauth.click_addUser() time.sleep(1) webauth.input_name('webtest1') # 仅有一个用户组,这里省略 select = webauth.selelement_byName(webauth.authType) Select(select).select_by_value('Web') time.sleep(1) webauth.input_authAccount('webtest1') webauth.input_authPassword('webtest1') webauth.click_save() time.sleep(2) # 断言 添加的账号 认证方式和认证账号 是否正常 list_authtype = webauth.getText_byXpath(webauth.list_authtype) list_authAcc = webauth.getText_byXpath(webauth.list_authAcc) self.assertEqual(str(list_authtype), 'Web', msg='认证方式显示不为“Web”') self.assertEqual(str(list_authAcc), 'webtest1', msg='认证账号不为“webtest1”') self.driver.quit() self.driver = webdriver.Chrome() # self.driver.maximize_window() self.driver.implicitly_wait(10) #打开网页测试 self.driver.get('http://www.utt.com.cn') time.sleep(2) title1=self.driver.title print(title1) self.assertEqual(title1, webauthpage, msg='认证页面跳转不正常') webauth = Organization_userAuthPage(self.driver, self.url) webauth.input_userName('webtest1') webauth.input_userPasswd('webtest1') webauth.click_loginbtn() time.sleep(2) title2 = self.driver.title print(title2) self.assertEqual(title2, webauthsucess, msg='不能认证成功') self.driver.get('http://www.baidu.com') time.sleep(2) title3 = self.driver.title print(title3) self.assertEqual(title3, '百度一下,你就知道', msg='认证后 不能打开网页') self.driver.quit() elif Support == '×': logger.info(u'参数不支持本地认证') logger.info('test_002_webAuthTest passed')