(廣西廣播電視無線傳播樞紐臺)
截止至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 批量測試鄉鎮臺站設備通信結果
隨著廣西廣播電視事業的發展以及發射站點數量快速增加,日常維護工作變得繁重,運用軟件技術開發輔助類工具來替代人工完成重復性大的工作,能有效提升工作效率,節約寶貴的人力資源。本測試軟件實現鄉鎮臺站設備通信情況的自動化測試功能。經工作中的實際應用,該測試工具能批量測試臺站設備通信情況,推進了鄉鎮臺站接入遠程監控系統的工作,為系統的投入使用奠定了基礎。