(廣西廣播電視無線傳播樞紐臺)
截止至2019年年底廣西區(qū)內(nèi)一共建成無人值守鄉(xiāng)鎮(zhèn)臺站753座,為了對這些臺站進(jìn)行有效監(jiān)控和管理,將已建成站點(diǎn)和新建設(shè)站點(diǎn)的設(shè)備接入到遠(yuǎn)程監(jiān)控系統(tǒng)的任務(wù)變得十分重要。各地區(qū)部門安排維護(hù)人員到所轄的鄉(xiāng)鎮(zhèn)站點(diǎn)調(diào)試配置站內(nèi)設(shè)備接入遠(yuǎn)程監(jiān)控系統(tǒng),但由于現(xiàn)場維護(hù)人員無法直接了解調(diào)試配置后的設(shè)備是否正確接入遠(yuǎn)程監(jiān)控系統(tǒng),故需要與監(jiān)控平臺值班員配合確認(rèn)鄉(xiāng)鎮(zhèn)臺站設(shè)備通信情況。
監(jiān)控平臺值班員核查一個鄉(xiāng)鎮(zhèn)站點(diǎn)各設(shè)備通信情況大約需要15分鐘,在同時面對多個地方的現(xiàn)場維護(hù)人員需要確認(rèn)各自的鄉(xiāng)鎮(zhèn)站點(diǎn)設(shè)備通信的時候,監(jiān)控平臺值班員需要花大量時間且效率低下。針對以上情況,有必要開發(fā)一個鄉(xiāng)鎮(zhèn)臺站設(shè)備通信情況自動化檢測工具,縮短監(jiān)控平臺與臺站現(xiàn)場設(shè)備調(diào)試人員對接時間,提高工作效率。
考慮到現(xiàn)實工作任務(wù)的迫切,需盡量縮短開發(fā)時間,因此采用語法簡單、開發(fā)環(huán)境搭建簡便、第三方庫資源豐富的Python3進(jìn)行程序編寫,開發(fā)一款自動化測試工具來替代步驟繁瑣、耗時大的人工操作。該測試工具可對單個或多個臺站測試臺站的光纖網(wǎng)絡(luò)、站內(nèi)監(jiān)控電腦、調(diào)頻廣播發(fā)射機(jī)和數(shù)字電視發(fā)射機(jī)等設(shè)備通信情況,將各設(shè)備通信測試結(jié)果記錄保存,提高鄉(xiāng)鎮(zhèn)臺站設(shè)備通信確認(rèn)工作效率。
1.開發(fā)語言:python3
2.依賴環(huán)境:python3.0及以上版本
3.編輯工具:SublimeText
4.使用第三方庫:paramiko、selenium、xlrd、xlwt
鄉(xiāng)鎮(zhèn)臺站需測試的設(shè)備包括站內(nèi)監(jiān)控電腦、環(huán)境采集器、電源復(fù)位器、NVR回傳監(jiān)測硬盤錄像機(jī)、NVR環(huán)境監(jiān)控硬盤錄像機(jī)、六路廣播調(diào)諧器、調(diào)頻切換器、調(diào)頻功放、地面數(shù)字電視發(fā)射機(jī)、DTMB接收機(jī)、全臺UPS等設(shè)備,通過接入到一臺站內(nèi)路由交換機(jī)向遠(yuǎn)程監(jiān)控系統(tǒng)發(fā)送報文。站內(nèi)每臺設(shè)備IP地址都做了規(guī)劃,臺站路由交換機(jī)按照規(guī)劃將站內(nèi)設(shè)備的IP地址與端口進(jìn)行靜態(tài)NAT映射,站內(nèi)設(shè)備向遠(yuǎn)程監(jiān)控系統(tǒng)發(fā)送報文時源IP地址轉(zhuǎn)為路由交換機(jī)的IP地址(即臺站IP地址),而不同的設(shè)備對應(yīng)不同源端口,因此可以根據(jù)“臺站IP+端口”的方式定位到某個臺站的某臺設(shè)備來檢測該設(shè)備通信情況。
1.通過ping命令測試模塊
鄉(xiāng)鎮(zhèn)臺站站內(nèi)設(shè)備全部經(jīng)路由交換機(jī)接入到遠(yuǎn)程監(jiān)控系統(tǒng),當(dāng)臺站電力中斷或網(wǎng)絡(luò)公司光纖故障時監(jiān)控平臺無法訪問臺站路由交換機(jī)與任何站內(nèi)設(shè)備,臺站處于斷連狀態(tài),因此可通過ping臺站IP的方式或訪問路由交換機(jī)方式來檢測臺站是否在線。站內(nèi)監(jiān)控電腦和全臺UPS經(jīng)過配置后的設(shè)備IP為規(guī)劃的IP地址,當(dāng)通過路由交換機(jī)ping通站內(nèi)監(jiān)控電腦與全臺UPS,可認(rèn)為這兩個設(shè)備通信正常。
站內(nèi)路由交換機(jī)支持Telnet訪問,可通過建立Telnet會話登錄臺站路由交換機(jī),在會話中分別ping站內(nèi)監(jiān)控電腦與全臺UPS規(guī)劃的IP地址,解析返回結(jié)果判斷設(shè)備是否正確在線。Python3內(nèi)置了telnetlib模塊,支持Telnet遠(yuǎn)程操作,建立會話并連接主機(jī)tn = telnetlib.Telnet(host_ip, port=23,timeout=3),使用read_untilb()函數(shù)監(jiān)聽,出現(xiàn)標(biāo)志后使用write()方法向服務(wù)端傳輸用戶名密碼,使用write()方法向服務(wù)端傳送ping命令,使用read_very_eager()方法獲取命令執(zhí)行返回結(jié)果進(jìn)行判斷。通過Telnet登錄路由交換機(jī)ping設(shè)備IP地址的方式可自動檢測鄉(xiāng)鎮(zhèn)臺站光纖是否斷連與站內(nèi)監(jiān)控電腦、全臺UPS是否接入路由交換機(jī)。
2.通過分析設(shè)備報文測試模塊
部分設(shè)備會定時向監(jiān)控采集服務(wù)器發(fā)送設(shè)備運(yùn)行的實時數(shù)據(jù)報文,通過分析監(jiān)控采集服務(wù)器接是否接收到臺站設(shè)備發(fā)送的報文判斷這些設(shè)備通信情況。
配置監(jiān)控采集服務(wù)器支持ssh登錄,通過服務(wù)器自帶的抓包工具tcpdump,可以詳細(xì)看到監(jiān)控采集服務(wù)器接收到的報文情況。Paramiko是Python3的第三方庫模塊,通過socket實現(xiàn)了ssh功能。
通過ssh訪問監(jiān)控采集服務(wù)器執(zhí)行tcpdump抓包命令(需注意在Linux操作系統(tǒng)中,必須是系統(tǒng)管理員root權(quán)限才能執(zhí)行tcpdump指令)列出收到的指定IP跟端口的數(shù)據(jù)報文,通過解析返回結(jié)果判斷設(shè)備通信是正常,來測試主動發(fā)送數(shù)據(jù)報文的設(shè)備通信情況,例如在189服務(wù)器查看臺站IP為10.81.7.201的鄉(xiāng)鎮(zhèn)站點(diǎn)站內(nèi)環(huán)境采集器發(fā)送報文數(shù)據(jù)包情況如圖1所示。
3.通過網(wǎng)頁操作測試模塊
Selenium常用于Web應(yīng)用程序自動化測試。Python3調(diào)用Selenium測試程序直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣,支持包括IE(7, 8, 9,10, 11)、Mozilla Firefox、Google Chrome等瀏覽器。調(diào)用Selenium庫方法驅(qū)動瀏覽器自動執(zhí)行自定義好的行為邏輯如鼠標(biāo)點(diǎn)擊某控件、輸入登錄賬戶密碼等,也就是可以通過代碼完全模擬成人類使用瀏覽器自動訪問目標(biāo)站點(diǎn)并操作,可以Selenium測試程序來替代人工手動打開瀏覽器訪問登錄硬盤錄像機(jī)查看錄像機(jī)通道的動作,根據(jù)獲取到的web頁面內(nèi)容來判斷NVR、XVR硬盤錄像機(jī)通信情況。
4.數(shù)據(jù)讀取與存儲模塊
該模塊是為了獲取待測試臺站IP和保存測試結(jié)果,通常直接對本地文件進(jìn)行讀寫操作是一種簡單有效的數(shù)據(jù)讀取與存儲方式??紤]到測試項比較多,為了更直觀展示測試結(jié)果,選擇讀寫Excel文件的方式,從Excel文件中讀取需要測試的臺站名稱與臺站IP地址,將測試結(jié)果數(shù)據(jù)也保存在Excel表格文件里。Python3使用xlrd庫來讀取Excel表格中的數(shù)據(jù),用xlwt庫將處理后的數(shù)據(jù)保存為Excel文件。
用xlrd庫讀取數(shù)據(jù)的基本步驟:
①用xlrd.open_workbook()打開Excel并在python中生成一個workbook對象;
②用workbook.sheet_by_index()或者workbook.sheet_by_name()創(chuàng)建一個sheet對象;
③用sheet.row_values()或者sheet.col_values()獲取特定行或者列的數(shù)據(jù);
④用sheet.cell(x,y).value可以獲得特定單元格的數(shù)據(jù)。
用xlwt庫寫數(shù)據(jù)到Excel的基本步驟:
①用xlrd.open_workbook()打開Excel并在python中生成一個workbook對象;
②用workbook.get_sheet()獲取sheet對象;
③用sheet.write(x,y,data)將每一個數(shù)據(jù)輸入到對應(yīng)的單元格;
④ 用workbook.save()保存。
按站內(nèi)設(shè)備一個個順序測試的方式一個臺站的測試時間約為8分鐘,為縮短測試時間,根據(jù)站內(nèi)設(shè)備向不同監(jiān)控采集服務(wù)器發(fā)送報文的特點(diǎn),采取多線程的測試方式,將單個臺站測試所需時間縮短為1分鐘左右,極大的提高測試效率,系統(tǒng)流程如圖2所示。
圖1 tcpdump抓包指令示例
圖2 系統(tǒng)設(shè)計流程圖
圖3 控制臺顯示每個臺站測試所需時間以及本輪測試花費(fèi)總時長
1.測試10個鄉(xiāng)鎮(zhèn)臺站設(shè)備通信,控制臺顯示每個臺站測試所需時間以及本輪測試花費(fèi)總時長,如圖3所示。
2.測試結(jié)束后,Excel文件展示批量測試的部分設(shè)備通信情況,如圖4所示。
圖4 批量測試鄉(xiāng)鎮(zhèn)臺站設(shè)備通信結(jié)果
隨著廣西廣播電視事業(yè)的發(fā)展以及發(fā)射站點(diǎn)數(shù)量快速增加,日常維護(hù)工作變得繁重,運(yùn)用軟件技術(shù)開發(fā)輔助類工具來替代人工完成重復(fù)性大的工作,能有效提升工作效率,節(jié)約寶貴的人力資源。本測試軟件實現(xiàn)鄉(xiāng)鎮(zhèn)臺站設(shè)備通信情況的自動化測試功能。經(jīng)工作中的實際應(yīng)用,該測試工具能批量測試臺站設(shè)備通信情況,推進(jìn)了鄉(xiāng)鎮(zhèn)臺站接入遠(yuǎn)程監(jiān)控系統(tǒng)的工作,為系統(tǒng)的投入使用奠定了基礎(chǔ)。