基于Python3的乡镇台站设备通信自动化测试工具的设计与实现
2020-06-11
(广西广播电视无线传播枢纽台)
一、引言
截止至2019年年底广西区内一共建成无人值守乡镇台站753座,为了对这些台站进行有效监控和管理,将已建成站点和新建设站点的设备接入到远程监控系统的任务变得十分重要。各地区部门安排维护人员到所辖的乡镇站点调试配置站内设备接入远程监控系统,但由于现场维护人员无法直接了解调试配置后的设备是否正确接入远程监控系统,故需要与监控平台值班员配合确认乡镇台站设备通信情况。
监控平台值班员核查一个乡镇站点各设备通信情况大约需要15分钟,在同时面对多个地方的现场维护人员需要确认各自的乡镇站点设备通信的时候,监控平台值班员需要花大量时间且效率低下。针对以上情况,有必要开发一个乡镇台站设备通信情况自动化检测工具,缩短监控平台与台站现场设备调试人员对接时间,提高工作效率。
二、系统设计方案
(一)设计目标
考虑到现实工作任务的迫切,需尽量缩短开发时间,因此采用语法简单、开发环境搭建简便、第三方库资源丰富的Python3进行程序编写,开发一款自动化测试工具来替代步骤繁琐、耗时大的人工操作。该测试工具可对单个或多个台站测试台站的光纤网络、站内监控电脑、调频广播发射机和数字电视发射机等设备通信情况,将各设备通信测试结果记录保存,提高乡镇台站设备通信确认工作效率。
(二)开发及运行环境
1.开发语言:python3
2.依赖环境:python3.0及以上版本
3.编辑工具:SublimeText
4.使用第三方库:paramiko、selenium、xlrd、xlwt
(三)站内设备网络结构
乡镇台站需测试的设备包括站内监控电脑、环境采集器、电源复位器、NVR回传监测硬盘录像机、NVR环境监控硬盘录像机、六路广播调谐器、调频切换器、调频功放、地面数字电视发射机、DTMB接收机、全台UPS等设备,通过接入到一台站内路由交换机向远程监控系统发送报文。站内每台设备IP地址都做了规划,台站路由交换机按照规划将站内设备的IP地址与端口进行静态NAT映射,站内设备向远程监控系统发送报文时源IP地址转为路由交换机的IP地址(即台站IP地址),而不同的设备对应不同源端口,因此可以根据“台站IP+端口”的方式定位到某个台站的某台设备来检测该设备通信情况。
(四)模块设计
1.通过ping命令测试模块
乡镇台站站内设备全部经路由交换机接入到远程监控系统,当台站电力中断或网络公司光纤故障时监控平台无法访问台站路由交换机与任何站内设备,台站处于断连状态,因此可通过ping台站IP的方式或访问路由交换机方式来检测台站是否在线。站内监控电脑和全台UPS经过配置后的设备IP为规划的IP地址,当通过路由交换机ping通站内监控电脑与全台UPS,可认为这两个设备通信正常。
站内路由交换机支持Telnet访问,可通过建立Telnet会话登录台站路由交换机,在会话中分别ping站内监控电脑与全台UPS规划的IP地址,解析返回结果判断设备是否正确在线。Python3内置了telnetlib模块,支持Telnet远程操作,建立会话并连接主机tn = telnetlib.Telnet(host_ip, port=23,timeout=3),使用read_untilb()函数监听,出现标志后使用write()方法向服务端传输用户名密码,使用write()方法向服务端传送ping命令,使用read_very_eager()方法获取命令执行返回结果进行判断。通过Telnet登录路由交换机ping设备IP地址的方式可自动检测乡镇台站光纤是否断连与站内监控电脑、全台UPS是否接入路由交换机。
2.通过分析设备报文测试模块
部分设备会定时向监控采集服务器发送设备运行的实时数据报文,通过分析监控采集服务器接是否接收到台站设备发送的报文判断这些设备通信情况。
配置监控采集服务器支持ssh登录,通过服务器自带的抓包工具tcpdump,可以详细看到监控采集服务器接收到的报文情况。Paramiko是Python3的第三方库模块,通过socket实现了ssh功能。
通过ssh访问监控采集服务器执行tcpdump抓包命令(需注意在Linux操作系统中,必须是系统管理员root权限才能执行tcpdump指令)列出收到的指定IP跟端口的数据报文,通过解析返回结果判断设备通信是正常,来测试主动发送数据报文的设备通信情况,例如在189服务器查看台站IP为10.81.7.201的乡镇站点站内环境采集器发送报文数据包情况如图1所示。
3.通过网页操作测试模块
Selenium常用于Web应用程序自动化测试。Python3调用Selenium测试程序直接运行在浏览器中,就像真正的用户在操作一样,支持包括IE(7, 8, 9,10, 11)、Mozilla Firefox、Google Chrome等浏览器。调用Selenium库方法驱动浏览器自动执行自定义好的行为逻辑如鼠标点击某控件、输入登录账户密码等,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,可以Selenium测试程序来替代人工手动打开浏览器访问登录硬盘录像机查看录像机通道的动作,根据获取到的web页面内容来判断NVR、XVR硬盘录像机通信情况。
4.数据读取与存储模块
该模块是为了获取待测试台站IP和保存测试结果,通常直接对本地文件进行读写操作是一种简单有效的数据读取与存储方式。考虑到测试项比较多,为了更直观展示测试结果,选择读写Excel文件的方式,从Excel文件中读取需要测试的台站名称与台站IP地址,将测试结果数据也保存在Excel表格文件里。Python3使用xlrd库来读取Excel表格中的数据,用xlwt库将处理后的数据保存为Excel文件。
用xlrd库读取数据的基本步骤:
①用xlrd.open_workbook()打开Excel并在python中生成一个workbook对象;
②用workbook.sheet_by_index()或者workbook.sheet_by_name()创建一个sheet对象;
③用sheet.row_values()或者sheet.col_values()获取特定行或者列的数据;
④用sheet.cell(x,y).value可以获得特定单元格的数据。
用xlwt库写数据到Excel的基本步骤:
①用xlrd.open_workbook()打开Excel并在python中生成一个workbook对象;
②用workbook.get_sheet()获取sheet对象;
③用sheet.write(x,y,data)将每一个数据输入到对应的单元格;
④ 用workbook.save()保存。
(五)系统设计
按站内设备一个个顺序测试的方式一个台站的测试时间约为8分钟,为缩短测试时间,根据站内设备向不同监控采集服务器发送报文的特点,采取多线程的测试方式,将单个台站测试所需时间缩短为1分钟左右,极大的提高测试效率,系统流程如图2所示。
图1 tcpdump抓包指令示例
图2 系统设计流程图
图3 控制台显示每个台站测试所需时间以及本轮测试花费总时长
三、自动化测试效果
1.测试10个乡镇台站设备通信,控制台显示每个台站测试所需时间以及本轮测试花费总时长,如图3所示。
2.测试结束后,Excel文件展示批量测试的部分设备通信情况,如图4所示。
图4 批量测试乡镇台站设备通信结果
四、小结
随着广西广播电视事业的发展以及发射站点数量快速增加,日常维护工作变得繁重,运用软件技术开发辅助类工具来替代人工完成重复性大的工作,能有效提升工作效率,节约宝贵的人力资源。本测试软件实现乡镇台站设备通信情况的自动化测试功能。经工作中的实际应用,该测试工具能批量测试台站设备通信情况,推进了乡镇台站接入远程监控系统的工作,为系统的投入使用奠定了基础。