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