左登超
(中車青島四方車輛研究所有限公司,山東 青島 266031)
TCP與UDP以太網(wǎng)通訊在各行各業(yè)應(yīng)用十分廣泛。TCP與UDP的通訊種類多且配置靈活,在不同的應(yīng)用場景下,以太網(wǎng)通訊控制設(shè)備的通訊方式不盡相同[1]。為了確保各類以太網(wǎng)控制設(shè)備在運行過程中的穩(wěn)定性,需要在產(chǎn)品投入運行前進(jìn)行接口測試工作[2]。
針對以太網(wǎng)控制設(shè)備的接口測試方法較少,傳統(tǒng)的測試方式是將PC機(jī)與以太網(wǎng)控制設(shè)備相連,利用網(wǎng)絡(luò)調(diào)試工具,向被測設(shè)備發(fā)送原始數(shù)據(jù)指令,觀察設(shè)備的動作是否與預(yù)期一致;或者抓取被測設(shè)備發(fā)出的數(shù)據(jù),人工進(jìn)行數(shù)據(jù)分析,判斷設(shè)備的工作情況[3];另一種測試方式是針對不同的設(shè)備需求,編寫設(shè)備測試軟件,由測試人員進(jìn)行手動點擊軟件相關(guān)功能按鍵進(jìn)行指令發(fā)送,觀察設(shè)備的動作或者設(shè)備回復(fù)數(shù)據(jù),判斷是否達(dá)到預(yù)期效果[4]。
傳統(tǒng)的測試方法完全依賴于人工手動測試,通過組合原始數(shù)據(jù)指令進(jìn)行測試并觀察結(jié)果,效率非常低,且易出錯;如果涉及到的以太網(wǎng)通訊種類較多,數(shù)據(jù)量較大時,使用網(wǎng)絡(luò)調(diào)試工具則不能滿足測試的需求[5];開發(fā)測試軟件,需要按照特定被測設(shè)備進(jìn)行開發(fā);由于軟件是新開發(fā)的,沒有經(jīng)過實踐,軟件本身可能存在缺陷,需要經(jīng)過一段時間的調(diào)試才能投入使用,使用過程中也不能確保其功能完全正確,造成測試工作停滯,轉(zhuǎn)而解決調(diào)試軟件本身的問題[6]。在軟件的修改過程中,為了不引起新的錯誤,測試人員需要進(jìn)行大量重復(fù)測試,而手動測試回歸性差,無法適應(yīng)軟件修改需求,導(dǎo)致軟件可能存在大量缺陷[7]。借助基于TCP與UDP通訊的設(shè)備自動化接口測試方法,根據(jù)用戶測試指令自動完成以TCP與UDP為通訊方式的控制設(shè)備的接口測試,為設(shè)備的穩(wěn)定運行提供保障。
基于TCP與UDP通訊的設(shè)備自動化接口測試裝置如圖1所示。裝置包含電源板卡、CPU板卡、網(wǎng)口擴(kuò)展板卡。其中網(wǎng)口擴(kuò)展板卡有兩個M12-4芯以太網(wǎng)口,通過背板連接至CPU,為CPU提供擴(kuò)展網(wǎng)口;CPU板卡有1個M12-4芯以太網(wǎng)口,系統(tǒng)采用X86架構(gòu),Linux操作系統(tǒng)。該設(shè)備包含兩路測試通道,分別提供3個以太網(wǎng)口進(jìn)行測試,每個網(wǎng)口IP地址可配置。
圖1 自動化接口測試裝置
TCP與UDP接口測試裝置中運行軟件,解析用戶定義的通訊鏈路信息,指導(dǎo)裝置與被測設(shè)備進(jìn)行通訊鏈路的建立;解析用戶定義的設(shè)備通訊協(xié)議信息以及數(shù)據(jù)收發(fā)關(guān)系信息,按照被測設(shè)備協(xié)議規(guī)定的數(shù)據(jù)格式,自動進(jìn)行數(shù)據(jù)收發(fā),與被測設(shè)備進(jìn)行數(shù)據(jù)通訊;與工具軟件建立通訊,接收用戶錄入的接口測試指令,執(zhí)行接口測試。
使用自動化接口測試裝置,可以對任意基于TCP與UDP通訊的以太網(wǎng)控制設(shè)備進(jìn)行接口測試工作。TCP可以使用服務(wù)器或者客戶端,支持一對一通訊、一對多通訊、多對一通訊、多對多通訊。UDP可以使用單播或者組播,單播支持一對一通訊、組播支持加入一個或者多個組播組通訊[8]。
裝置網(wǎng)口開啟一個TCP服務(wù)器,接收被測設(shè)備一個或者多個TCP客戶端的連接,即TCP服務(wù)器一對一或一對多通訊[9]。接口示意圖如圖2所示,每路TCP客戶端連接可以在相同或者不同的被測設(shè)備上,此處僅指出每路TCP協(xié)議鏈路連接,同下。
圖2 TCP服務(wù)器一對一、一對多通訊接口
裝置網(wǎng)口開啟多個TCP服務(wù)器,每個TCP服務(wù)器接受一個或者多個TCP客戶端的連接,即TCP服務(wù)器多對一或多對多通訊[10]。接口示意圖如圖3所示。
圖3 TCP服務(wù)器多對一、多對多通訊接口
裝置網(wǎng)口開啟一個TCP客戶端,連接被測設(shè)備一個或者多個TCP服務(wù)器,即TCP客戶端一對一或一對多通訊[11]。接口示意圖如圖4所示。
圖4 TCP客戶端一對一、一對多通訊接口
裝置網(wǎng)口開啟多個TCP客戶端,連接被測設(shè)備一個或者多個TCP服務(wù)器,即TCP客戶端多對一或多對多通訊[12]。接口示意圖如圖5所示。
圖5 TCP客戶端多對一、多對多通訊接口
裝置網(wǎng)口開啟一個或者多個UDP單播,與被測設(shè)備進(jìn)行一對一通訊[13];接口示意圖如圖6所示。
圖6 UDP單播通訊
裝置網(wǎng)口加入一個或者多個組播組,與被測設(shè)備進(jìn)行通訊[14];接口示意圖如圖7所示。
圖7 UDP組播通訊
裝置每路網(wǎng)口均支持TCP服務(wù)器、TCP客戶端、UDP單播、UDP組播的任意組合,組合接口的設(shè)計可以參考2.1~2.4。
1)TCP服務(wù)器、TCP客戶端組合;
2)TCP服務(wù)器、UDP單播組合;
3)TCP服務(wù)器、UDP組播組合;
4)TCP客戶端、UDP單播組合;
5)TCP客戶端、UDP組播組合;
6)UDP單播、UDP組播組合;
7)TCP服務(wù)器、TCP客戶端、UDP單播組合;
8)TCP服務(wù)器、TCP客戶端、UDP組播組合;
9)TCP服務(wù)器、UDP單播、UDP組播組合;
10)TCP客戶端、UDP單播、UDP組播組合;
11)TCP服務(wù)器、TCP客戶端、UDP單播、UDP組播組合。
自動化接口測試裝置內(nèi)運行程序,與被測設(shè)備進(jìn)行通訊鏈路的建立與管理、按照被測設(shè)備的通信協(xié)議進(jìn)行數(shù)據(jù)收發(fā)、接收工具軟件的測試指令,自動化執(zhí)行接口測試工作。工作原理如圖8所示。
圖8 接口自動化測試流程圖
1)軟件運行后,讀取通訊配置文件,獲取與被測設(shè)備的通訊方式,指導(dǎo)裝置與被測設(shè)備建立通訊鏈接。自動化接口測試裝置使用的通訊配置文件各字段如表1所示。
2)讀取數(shù)據(jù)配置文件。裝置與被測設(shè)備鏈路下的通訊數(shù)據(jù)由數(shù)據(jù)配置文件定義,當(dāng)軟件讀取到數(shù)據(jù)標(biāo)識信息后,在內(nèi)存中分配該數(shù)據(jù)的存儲信息,一方面自動化接口測試裝置根據(jù)此內(nèi)存,進(jìn)行數(shù)據(jù)的發(fā)送或者存儲接收到被測設(shè)備發(fā)送的對應(yīng)數(shù)據(jù);另一方面接收工具軟件發(fā)送的測試指令,根據(jù)指令中攜帶的鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息,進(jìn)行內(nèi)存數(shù)據(jù)的設(shè)置與獲取。數(shù)據(jù)配置文件各字段如表2所示。
表1 通訊配置文件字段含義
3)讀取數(shù)據(jù)收發(fā)關(guān)系配置文件。指導(dǎo)自動化接口測試裝置如何發(fā)送與被測設(shè)備的通訊數(shù)據(jù),收發(fā)關(guān)系配置文件各字段如表3所示;
4)根據(jù)通訊配置文件信息,建立與被測設(shè)備的通訊并管理通訊過程;
5)針對每一個通訊鏈路,開啟數(shù)據(jù)收發(fā)線程,根據(jù)數(shù)據(jù)配置文件以及收發(fā)關(guān)系配置文件,開始與被測設(shè)備進(jìn)行數(shù)據(jù)通訊;
6)初始化與工具軟件的TCP通訊,用以接收工具軟件發(fā)送的測試指令;自動化接口測試裝置支持的測試指令種類如表4所示;
設(shè)置指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,將對應(yīng)內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送,強(qiáng)制指令只能設(shè)置裝置發(fā)送方向的數(shù)據(jù)[15];
表2 數(shù)據(jù)配置文件字段含義
表3 收發(fā)關(guān)系配置文件字段含義
延時指令:工具軟件將具體的延時時間發(fā)送給自動化接口測試裝置,裝置接收到該信息后,會延時相應(yīng)的時間,再處理其他測試指令[16];
心跳指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移、累加步長n、累加頻率f信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,以累加頻率f,將當(dāng)前值累加n,向內(nèi)存中的數(shù)據(jù)進(jìn)行更新[17];
表4 測試指令類型說明
上升沿指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移、時間t信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,將對應(yīng)內(nèi)存中的數(shù)據(jù)先設(shè)置成0,保持時間t,然后設(shè)置為1,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
下升沿指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移、時間t信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,將對應(yīng)內(nèi)存中的數(shù)據(jù)先設(shè)置成1,保持時間t,然后設(shè)置為0,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送[18];
遞增指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移、最小值、最大值、步長n、頻率f信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,以頻率f,將當(dāng)前值從最小值開始累加,每次累加步長n,直至累加到最大值后保持,向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
遞減指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移、最小值、最大值、步長n、頻率f信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,以頻率f,將當(dāng)前值從最大值開始遞減,每次遞減步長n,直至遞減到最小值后保持,向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送[19];
系統(tǒng)時間年指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,從當(dāng)前系統(tǒng)時間中獲取年的數(shù)據(jù),向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
系統(tǒng)時間月指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,從當(dāng)前系統(tǒng)時間中獲取月的數(shù)據(jù),向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
系統(tǒng)時間日指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,從當(dāng)前系統(tǒng)時間中獲取日的數(shù)據(jù),向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
系統(tǒng)時間時指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,每小時從當(dāng)前系統(tǒng)時間中獲取時的數(shù)據(jù),向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
系統(tǒng)時間分指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,每分鐘從當(dāng)前系統(tǒng)時間中獲取分的數(shù)據(jù),向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
系統(tǒng)時間秒指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,每秒鐘從當(dāng)前系統(tǒng)時間中獲取秒的數(shù)據(jù),向內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送[20];
范圍內(nèi)指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移、極大值、極小值信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,取極大值與極小值范圍內(nèi)的隨機(jī)數(shù)據(jù),向?qū)?yīng)內(nèi)存中的數(shù)據(jù)進(jìn)行更新,由后臺線程自動獲取內(nèi)存數(shù)據(jù)進(jìn)行發(fā)送;
獲取指令:工具軟件將具體鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息發(fā)送給自動化接口測試裝置,裝置接收到該信息后,從對應(yīng)內(nèi)存中取出一次實時數(shù)據(jù),然后通過TCP通訊向工具軟件發(fā)送結(jié)果;
7)自動化接口測試裝置收到測試指令后,根據(jù)指令中攜帶的鏈路名稱、數(shù)據(jù)標(biāo)識、字節(jié)偏移、位偏移信息,操作內(nèi)存數(shù)據(jù),從分配的內(nèi)存中設(shè)置或者獲取數(shù)據(jù);當(dāng)獲取到數(shù)據(jù)后,向工具軟件返回獲取到的數(shù)據(jù),工具軟件根據(jù)此數(shù)據(jù)判斷執(zhí)行是否通過;
由于自動化接口測試裝置可以測試的情況比較多,以TCP服務(wù)器一對一通訊為例,即被測設(shè)備作為TCP客戶端,裝置作為TCP服務(wù)器,對被測設(shè)備進(jìn)行接口測試,測試系統(tǒng)連接如圖9所示。
圖9 測試系統(tǒng)連接
測試前需要按照被測設(shè)備的要求修改裝置的IP地址。通過修改腳本文件即可配置本裝置的網(wǎng)口IP地址。IP地址腳本內(nèi)如下:
#eth1
ifconfig eth1 down
ifconfig eth1 172.30.131.60 netmask 255.255.255.0 up
#eth2
ifconfig eth2 down
ifconfig eth2 172.30.131.61 netmask 255.255.255.0 up
#eth3
ifconfig eth3 down
ifconfig eth3 172.30.131.62 netmask 255.255.255.0 up
eth1、eth2、eth3分別分別對應(yīng)設(shè)備上的三個網(wǎng)口;
被測設(shè)備的TCP客戶端信息:172.31.41.50,端口8001,與其通訊的TCP服務(wù)器信息:IP地址172.31.41.36,端口8000;由裝置主動發(fā)送1001數(shù)據(jù),然后被測設(shè)備回復(fù)1002數(shù)據(jù)。
步驟1:通過交換機(jī),將被測設(shè)備、工具軟件以及設(shè)備進(jìn)行組網(wǎng)連接;
步驟2:按照設(shè)備IP地址修改方法,修改腳本文件eth1的IP地址:
#eth1
ifconfig eth1 down
ifconfig eth1 172.31.41.36 netmask 255.255.255.0 up
步驟3:編寫通訊配置文件,如表5所示。
表5 通訊配置文件內(nèi)容
此配置文件供裝置使用,由于被測設(shè)備作為TCP客戶端,需要使用裝置模擬與被測設(shè)備通訊的TCP服務(wù)器;配置文件中,通訊類型填寫TCP,通訊方式填寫服務(wù)器,通訊本方信息填寫與被測設(shè)備通訊的TCP服務(wù)器的地址端口信息,通訊對方信息填寫被測設(shè)備的信息;
步驟4:編寫數(shù)據(jù)配置文件如表6所示,其中1001數(shù)據(jù)由接口測試裝置主動發(fā)出,1002為裝置接收被測設(shè)備返回的數(shù)據(jù);該配置文件供裝置和工具軟件使用;
表6 數(shù)據(jù)配置文件內(nèi)容
步驟5:編寫數(shù)據(jù)收發(fā)關(guān)系配置文件,文件內(nèi)容如表7所示。
表7 收發(fā)關(guān)系配置文件內(nèi)容
此配置文件供自動化接口測試裝置使用,內(nèi)容描述了裝置Ch-1通訊鏈路下,收取1002的數(shù)據(jù),主動發(fā)送1001的數(shù)據(jù)。
步驟6:將上述配置文件通過FTP工具導(dǎo)入設(shè)備,并重啟接口測試裝置;
步驟7:在工具軟件中編寫測試指令,設(shè)置或者獲取變量的數(shù)據(jù),下發(fā)至接口測試裝置;
步驟8:工具軟件根據(jù)設(shè)備返回的數(shù)據(jù),判斷測試是否通過。
在自動化執(zhí)行完接口測試后,工具軟件會將測試結(jié)果保存成表格的形式,結(jié)果如表8所示。
表8 自動化接口測試結(jié)果記錄
保存的結(jié)果記錄中,會記錄工具軟件每次執(zhí)行的動作,收取自動化接口測試裝置返回的變量名以及對應(yīng)的實際數(shù)據(jù),工具軟件可以根據(jù)動作中的期望,自動判斷測試的結(jié)果是否正確,并在測試結(jié)論中給出Pass或者Fail,方便測試人員查看測試結(jié)果。
借助基于TCP與UDP通訊的設(shè)備自動化接口測試方法,能夠進(jìn)行TCP服務(wù)器、TCP客戶端、UDP單播、UDP組播通以及四種通訊方式任意組合的接口測試;接口測試裝置對外提供6個測試網(wǎng)口,IP地址可配置,可以通過數(shù)據(jù)配置文件以及數(shù)據(jù)收發(fā)關(guān)系配置文件,指導(dǎo)自動化接口測試裝置的數(shù)據(jù)收發(fā),使得測試不同被測設(shè)備時無需修改代碼,提高了測試的靈活性、通用性以及效率,為設(shè)備的穩(wěn)定運行提供保障。