本發(fā)明專利涉及一種通用的基于字符串類型的i/o通訊協(xié)議的自動解析方法,能夠?qū)νㄓ嵾^程中收發(fā)數(shù)據(jù)自動進行解析、識別和處理。典型應(yīng)用如以太網(wǎng)通訊、串口通訊等。
背景技術(shù):
在嵌入式軟件自動化黑盒測試時,許多被測軟件與外部進行通訊都是基于字符串類型數(shù)據(jù)包的通訊協(xié)議,而這往往需要對字符串類型數(shù)據(jù)包進行解析,從而解算出字符串里面各個字段的具體數(shù)值;雖然對一個被測軟件來說,其通訊協(xié)議相對固定,可以在收到數(shù)據(jù)后按照此被測軟件提供的通訊協(xié)議在測試程序中編寫解碼程序,但若一個被測軟件中涉及到多種不同的通訊協(xié)議或要對多個被測軟件進行測試,則在測試程序中實現(xiàn)通訊協(xié)議的解析功能是一件很麻煩且浪費時間的事情,因此引入一種能夠針對不同的通訊協(xié)議都能自動進行解析的功能非常重要。
由于通訊數(shù)據(jù)包為字符串類型的數(shù)據(jù)包往往長度不固定,因此在收到數(shù)據(jù)后如何依據(jù)協(xié)議特性將數(shù)據(jù)包中的各個數(shù)據(jù)字段快速解析出來是最關(guān)鍵的問題。
技術(shù)實現(xiàn)要素:
鑒于目前存在的上述不足,本發(fā)明提供一種基于字符串類型數(shù)據(jù)的通訊協(xié)議解析方法,一方面解決了通訊數(shù)據(jù)包不定長的問題,另一方面也解決了自動按照通訊協(xié)議格式進行解析的問題。
為達到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
一種基于字符串類型數(shù)據(jù)的通訊協(xié)議解析方法,包括如下步驟:
步驟1,通訊協(xié)議的編輯,包括步驟1.1至1.3:
步驟1.1,提供一個通訊協(xié)議編輯工具給用戶;
步驟1.2,用戶將已有的通訊協(xié)議信息錄入或?qū)胨鐾ㄓ崊f(xié)議編輯工具;
步驟1.3,用戶通過所述通訊協(xié)議編輯工具將錄入或?qū)氲耐ㄓ崊f(xié)議信息保存成指定格式的xml文件;
步驟2,通訊協(xié)議的解析,包括步驟2.1至2.9:
步驟2.1,開始;
步驟2.2,從被測件收到消息;
步驟2.3,協(xié)議解析模塊開始實時通訊協(xié)議解析;
步驟2.4,在公共類協(xié)議格式信息集中進行協(xié)議格式匹配;
步驟2.5,判斷是否匹配成功,若是則轉(zhuǎn)到步驟2.8,否則轉(zhuǎn)到步驟2.6;
步驟2.6,在當前信號下的協(xié)議格式中進行匹配;
步驟2.7,判斷是否匹配成功,若是則轉(zhuǎn)到步驟2.8,否則轉(zhuǎn)到步驟2.9;
步驟2.8,自動解析出通訊包中每個協(xié)議單元的實際內(nèi)容;
步驟2.9,結(jié)束。
依照本發(fā)明的一個方面,步驟1.1中,所述通訊協(xié)議編輯工具采用eclipse開發(fā)。
依照本發(fā)明的一個方面,步驟1.2中,所述通訊協(xié)議信息在所述通訊協(xié)議編輯工具中采用鏈表方式存儲。
依照本發(fā)明的一個方面,步驟1.2中,所述通訊協(xié)議信息的構(gòu)成包括通訊協(xié)議格式基類、協(xié)議單元信息類、協(xié)議單元位信息類、協(xié)議單元長度信息、協(xié)議單元數(shù)據(jù)內(nèi)容信息、協(xié)議格式信息類、通訊協(xié)議信息類。
依照本發(fā)明的一個方面,步驟2.4中,所述公共類協(xié)議格式信息集定義的是不同被測系統(tǒng)或模塊之間所有通用的通訊協(xié)議格式。
本發(fā)明實施的優(yōu)點:
相比其它類似方法而言,本發(fā)明在嵌入式軟件自動化黑盒測試領(lǐng)域具有較強的通用性、重用性和易用性,不管通訊雙方采用tcp或udp或串口或其它方式進行通訊,只要是基于字符串類型的數(shù)據(jù)包,本發(fā)明均可對其進行快速自動的解析。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖 僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為通訊協(xié)議解析的原理圖。
圖2為通訊協(xié)議編輯界面圖。
圖3為通訊協(xié)議格式信息的主要構(gòu)成類。
圖4為通訊協(xié)議基類信息的構(gòu)成。
圖5為協(xié)議單元信息類信息的構(gòu)成。
圖6為協(xié)議單元位信息類信息的構(gòu)成。
圖7為協(xié)議格式信息類信息的構(gòu)成。
圖8為通訊協(xié)議信息類信息的構(gòu)成。
圖9為通訊協(xié)議的解析算法流程圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明的原理為:首先提供一個通訊協(xié)議編輯工具給測試人員錄入或?qū)胍延械耐ㄓ崊f(xié)議信息,錄入或?qū)氲耐ㄓ崊f(xié)議信息能夠自動通過通訊協(xié)議編輯工具保存成指定格式的xml文件,然后測試人員在進行自動化測試時,在接收到被測件的數(shù)據(jù)時,調(diào)用通訊協(xié)議解析模塊,通訊協(xié)議解析模塊即能自動地解析出當前收到的數(shù)據(jù)包屬于哪種協(xié)議格式,以及該協(xié)議格式內(nèi)各個協(xié)議字段的值,這樣便于測試過程中進行測試判斷和處理。
本發(fā)明由兩個子模塊組成,具體如下:
一、通訊協(xié)議編輯工具:提供友好的人機操作界面供用戶將通訊協(xié)議導(dǎo)入進來。
通訊協(xié)議編輯工具采用eclipse開發(fā),用戶可在此設(shè)置或?qū)胪ㄓ崊f(xié)議格式,編輯界面的一個實施例如圖2所示。
使用者可以在類似的編輯界面中編輯通訊協(xié)議的格式,然后將通 訊協(xié)議信息保存成可跨平臺解析的xml格式文件,方便協(xié)議解析模塊進行解析。
二、通訊協(xié)議解析模塊:在通訊過程中,能夠自動地解析出通訊包中的各個字段的具體數(shù)值;考慮到在實際使用時,對收到的數(shù)據(jù)包解析往往要求在很短的時間內(nèi)給出響應(yīng),這就要求解析通訊數(shù)據(jù)包的時間越短越好,因此選擇標準c++語言來實現(xiàn)通訊協(xié)議的解析功能。
通訊過程中,軟件收到數(shù)據(jù)后自動調(diào)用解析函數(shù)進行解析,為了保證解析速度,用戶在通訊協(xié)議編輯界面設(shè)置的通訊協(xié)議具體內(nèi)容采用鏈表方式存儲,解析之前首先加載此通訊協(xié)議所有的內(nèi)容到內(nèi)存中,解析時,一個一個的進行匹配,有碰到一個不匹配的,直接跳出匹配下一個,直到匹配到成功的為止,匹配結(jié)束后,同時返回匹配成功的各個字段的具體值。
通訊協(xié)議格式的主要構(gòu)成以及各部件的c++類設(shè)計方法如下:
通訊協(xié)議信息的主要構(gòu)成如圖3所示,包括通訊協(xié)議格式基類、協(xié)議單元信息類、協(xié)議單元位信息類、協(xié)議單元長度信息、協(xié)議單元數(shù)據(jù)內(nèi)容信息、協(xié)議格式信息類、通訊協(xié)議信息類、。
圖3中的箭頭是c++類之間繼承的一種表示方法,在本實施例中表示“協(xié)議單元信息類”是從“通訊協(xié)議基類”繼承過來的;“協(xié)議單元位信息類”也是從“通訊協(xié)議基類”繼承過來的。沒有這種箭頭表明類之間沒有這種繼承關(guān)系。
協(xié)議單元長度信息、協(xié)議單元數(shù)據(jù)內(nèi)容信息分別描述協(xié)議單元的長度信息和數(shù)據(jù)內(nèi)容信息。
1、通訊協(xié)議基類的設(shè)計如圖4所示。
通訊協(xié)議格式基類cprotocolunit_base
屬性:
e_protocolunit_typem_eprotocolunit_type;//協(xié)議單元類型(字節(jié)/數(shù)據(jù)位)
charm_szname[max_name_length];//協(xié)議單元名稱
charm_szdesc[max_string_len];//協(xié)議單元描述
unsignedlongm_uluniqueid;//協(xié)議單元唯一id值
boolm_breserved;//是否是保留字
boolm_breserved_autozero;//保留字是否自動填0
cprotocolunit_value*m_pvalue;//數(shù)據(jù)內(nèi)容信息
方法:
無
2、協(xié)議單元信息類的設(shè)計如圖5所示。
協(xié)議單元信息類cprotocolunit
屬性:
boolm_bbitstruct;//是否是位域結(jié)構(gòu)體
boolm_bcandivision;//是否還可以分解成子協(xié)議單元信息集
boolm_blittleendian;//是否將低序字節(jié)存儲在起始地址
boolm_bexpand;//是否展開顯示
boolm_barray;//是否是數(shù)組
list<cprotocolunit*>m_protocol_child;//子協(xié)議單元信息集,m_bcandivision=true時有效
clenbase_protocolunit*m_pprotocolunit_len;//長度信息
list<cprotocolunit_bit*>m_protocol_child_bits;//位域結(jié)構(gòu)體信息,m_bbitstruct=true時有效
方法:
boolif_matched();//自動解析協(xié)議信息時,調(diào)用此函數(shù)判斷是否協(xié)議的長度和內(nèi)容信息與實際一致
3、協(xié)議單元位信息類的設(shè)計如圖6所示。
協(xié)議單元位信息類cprotocolunit_bit
屬性:
unsignedshortm_usstartbit;//起始位
unsignedshortm_usbitnum;//數(shù)據(jù)位數(shù)
主要方法:
boolif_matched();//自動解析協(xié)議信息時,調(diào)用此函數(shù)判斷是否協(xié)議的長度和內(nèi)容信息與實際一致
4、協(xié)議格式信息類的設(shè)計如圖7所示。
協(xié)議格式信息類cprotocolform
屬性:
e_protocoltypem_eprotocoltype;//協(xié)議格式類型(公共類/特定類)
charm_szprotocolname[max_name_length];//協(xié)議格式名稱
list<cprotocolunit*>m_protocolinfo;//該協(xié)議格式下的具體協(xié)議信息,以遞歸方式存儲
主要方法:
//自動解析協(xié)議信息時,調(diào)用此函數(shù)判斷是否協(xié)議的長度和內(nèi)容信息與實際一致
//函數(shù)功能:判斷指定的協(xié)議單元的數(shù)據(jù)內(nèi)容信息是否與實際的一致,若一致則匹配成功
boolmatch_protocolunit(unsignedlongullen,//協(xié)議包內(nèi)容長度值
unsignedchar*pvalue,//協(xié)議包數(shù)據(jù)內(nèi)容信息
unsignedlongulstartpos,//指定協(xié)議單元的內(nèi)容在整個包內(nèi)容中的起始位置(字節(jié)為單位)
cprotocolunit*pprotocolunit,//指定的協(xié)議單元
unsignedlong&ulprotocolunitlen);//協(xié)議單元的長度值
5、通訊協(xié)議信息類的設(shè)計如圖8所示。
通訊協(xié)議信息類cprotocolinfo
屬性:
vector<cprotocolform*>m_commrecvprotocol;//公共類協(xié)議格式信息集
map<char*,cprotocolparent*>m_recvprotocol;//特定類協(xié)議格式信息集
cprotocolform*m_pprotocolform_matched;//匹配成功的協(xié)議格式信息
主要方法:
//自動解析協(xié)議信息時,調(diào)用此函數(shù)判斷是否協(xié)議的長度和內(nèi)容信息與實際一致
//函數(shù)功能:匹配出指定的協(xié)議格式信息,并計算該協(xié)議格式內(nèi)所有協(xié)議單元的數(shù)據(jù)內(nèi)容信息
voidmatching_protocolunit(unsignedlongullen,unsignedchar*pvalue);
通訊協(xié)議的自動解析算法如圖9所示:在測試執(zhí)行時,測試系統(tǒng)接收到被測件發(fā)送過來的消息后,自動在接收類協(xié)議格式里進行協(xié)議的匹配和解析,解析成功后自動得出協(xié)議格式中所有協(xié)議單元的數(shù)據(jù)內(nèi)容,便于后續(xù)的測試處理。
圖7中的“公共類協(xié)議格式信息集”對應(yīng)圖8中的屬性中的“公共類協(xié)議格式信息集”,指的是不同被測系統(tǒng)或模塊之間所有相同的協(xié)議格式,就都歸入到公共類協(xié)議格式信息集中,這樣在進行協(xié)議解析時,首先在“公共類協(xié)議格式信息集”中進行匹配解析,有利于快速的解析出實際的協(xié)議格式及其數(shù)據(jù)內(nèi)容。
在設(shè)計通訊協(xié)議時,盡量將一些通用的(多個信號均使用到的相同的通訊協(xié)議格式)通訊協(xié)議定義在公共類協(xié)議格式信息集中,便于提高協(xié)議解析速率。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本領(lǐng)域技術(shù)的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以所述權(quán)利要求的保護范圍為準。