專利名稱:Ttcn測試用例執(zhí)行方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于協(xié)議一致性測試的TTCN(Tree and TabularCombined Notation)國際標(biāo)準(zhǔn)的測試用例執(zhí)行方法。
用戶按照TTCN標(biāo)準(zhǔn)編寫測試用例腳本后,測試用例以MP(符合TTCN標(biāo)準(zhǔn)的文本文件)文件格式保存,該MP文件中一般包含多個(gè)測試用例組成的測試套。之后就需要提供一套方法來執(zhí)行此MP文件,從而達(dá)到運(yùn)行測試用例的目的,目前的TTCN商用工具采用的執(zhí)行方法是把MP文件轉(zhuǎn)換為C語言源文件,再用其他C語言工具對這些代碼進(jìn)行編譯、鏈接,最后得到一個(gè)可執(zhí)行文件(EXE),通過執(zhí)行這個(gè)EXE文件實(shí)現(xiàn)對用戶編寫的測試用例的執(zhí)行,具體過程還包括TTCN工具一般提供一些庫函數(shù),用戶還需要根據(jù)TTCN工具提供的Lib(庫函數(shù))進(jìn)行編程,編程內(nèi)容包括編解碼模塊、與被測系統(tǒng)的通信模塊。用戶編寫的C語言程序與MP文件生成的C語言程序再加上TTCN工具提供的庫函數(shù),一起編譯、鏈接,最后生成一個(gè)獨(dú)立的可執(zhí)行文件,測試用例的執(zhí)行就是執(zhí)行此可執(zhí)行文件。
這種方法的缺點(diǎn)是
1)需要把MP文件轉(zhuǎn)換為C語言代碼,然后編譯、鏈接、調(diào)試過程復(fù)雜,速度比較慢。而在編寫用例過程中,經(jīng)常需要修改用例、調(diào)試用例,需要不斷重復(fù)這些過程,效率低下。
2)使用此方法需要C語言編譯器、工具庫函數(shù)等額外支持,依賴性比較強(qiáng)。
3)最后生成的EXE文件只能簡單地運(yùn)行,或者利用C語言調(diào)試器進(jìn)行調(diào)試,而這種調(diào)試只能以C語句為基礎(chǔ)進(jìn)行,不能以TTCN語句為基礎(chǔ)進(jìn)行調(diào)試,所以不能直接地定位。
本發(fā)明采用的技術(shù)方案是一種TTCN測試用例執(zhí)行方法,首先輸入以MP文件格式編寫的測試用例或多個(gè)測試用例組成的測試套,再將MP文件中的所有元素轉(zhuǎn)化為相應(yīng)的內(nèi)存中對象,通過對所述的內(nèi)存中對象進(jìn)行執(zhí)行、調(diào)試完成對TTCN測試用例的執(zhí)行。
采用本發(fā)明方法后,以MP文件作為輸入,把MP文件編譯為內(nèi)存中對象,然后對此對象進(jìn)行執(zhí)行、調(diào)試。通過這種方法,省去了MP文件轉(zhuǎn)換為C程序、與庫函數(shù)的鏈接等過程,大大提高了執(zhí)行效率。并且由于MP文件中所有元素一一轉(zhuǎn)化為內(nèi)存中對象,這些對象都是可控的,可以對這些對象進(jìn)行諸如獲取某個(gè)對象的值、設(shè)置某個(gè)對象的值、設(shè)置斷點(diǎn)、單步跟蹤等調(diào)試。
圖2是本發(fā)明方法總體過程示意圖。
圖3是本發(fā)明方法具體實(shí)施方式
中的類組成圖。
參照圖2,本發(fā)明的TTCN測試用例執(zhí)行方法總體上包括三個(gè)過程,首先,輸入測試用例,即以MP文件格式編寫的測試用例或多個(gè)測試用例組成的測試套,再將MP文件中的所有元素轉(zhuǎn)化為相應(yīng)的內(nèi)存中對象,最后,通過對所述的內(nèi)存中對象進(jìn)行執(zhí)行、調(diào)試完成對TTCN測試用例的執(zhí)行。
參照圖3,本發(fā)明方法為MP文件中的每種元素設(shè)計(jì)一個(gè)對應(yīng)的C++類,此類作為此元素在內(nèi)存中的表現(xiàn)方式。MP文件編譯時(shí),每個(gè)元素分別轉(zhuǎn)化為代表自己的類,把相應(yīng)的信息以對象的形式保存到內(nèi)存中。編譯完成后,整個(gè)MP文件變?yōu)榱藘?nèi)存中的一系列對象,這一系列對象可以完整地反映整個(gè)MP文件所包含的信息,內(nèi)存中對象可以包括數(shù)值運(yùn)算類CValue、語句類CLine、測試用例類CTestCase和測試套類CTestSuit四個(gè)基本類型;一個(gè)測試套類對象可以包含多個(gè)測試用例類對象,一個(gè)測試用例類對象可以包含多個(gè)語句類對象,一個(gè)語句類對象由多個(gè)數(shù)值運(yùn)算類對象組成;其中數(shù)值運(yùn)算類包括數(shù)值類和表達(dá)式類CExpr,數(shù)值類包括以下八類(1)整數(shù)類CIntegerValue,(2)布爾類CBoolValue,(3)浮點(diǎn)類CFloatValue,(4)結(jié)構(gòu)類CSetValue,(5)集合類CSetOfValue,(6)有順序數(shù)組類CSequenceValue,(7)無順序數(shù)組類CSequenceOfValue,(8)聯(lián)合類CChoiceValue;以上類對應(yīng)于MP文件中的各類數(shù)值,用于實(shí)現(xiàn)數(shù)值在內(nèi)存中的表示;表達(dá)式類包括以下八類(1)加法運(yùn)算類CPlusExpr,(2)減法運(yùn)算類CMinusExpr,(3)乘法運(yùn)算類CMultiplyExpr,(4)除法運(yùn)算類CDivideExpr,(5)等于類CIsEqualExpr,(6)不等類CNotEqualExpr,(7)與運(yùn)算類CAndExpr,(8)或運(yùn)算類COrExpr;以上類對應(yīng)于MP文件中的各類表達(dá)式,用于實(shí)現(xiàn)表達(dá)式在內(nèi)存中的表示;語句類包括以下幾類(1)條件轉(zhuǎn)向類CWhileLine,(2)條件判斷類CIfLine,(3)循環(huán)類CForLine,(4)發(fā)送消息類CSendLine,(5)接收消息類CReceiveLine,(6)無條件轉(zhuǎn)向類CGotoLine,(7)返回類CReturnLine,(8)賦值類CAssignmentLine;以上類對應(yīng)于MP文件中的各類語句,用于實(shí)現(xiàn)TTCN語句在內(nèi)存中的表示;對內(nèi)存中對象進(jìn)行執(zhí)行、調(diào)試可以是對TTCN腳本的多個(gè)線程作分時(shí)處理,對每個(gè)線程用一個(gè)線程狀態(tài)對象保存線程當(dāng)前狀態(tài);每個(gè)線程狀態(tài)對象記錄以下四項(xiàng)內(nèi)容(1)動態(tài)分配的內(nèi)存指針;(2)記錄線程中的函數(shù)執(zhí)行狀態(tài)和調(diào)用順序的堆棧;(3)記錄事件隊(duì)列的數(shù)組;(4)系統(tǒng)時(shí)鐘。
根據(jù)內(nèi)存對象進(jìn)行用例執(zhí)行,在執(zhí)行過程中需要進(jìn)行分配和回收內(nèi)存、收發(fā)消息、開始和終止時(shí)鐘等各種操作。TTCN標(biāo)準(zhǔn)支持多線程功能,執(zhí)行過程中涉及到線程間的切換,對于每個(gè)線程用一個(gè)線程狀態(tài)對象CRunContext對象保存它的運(yùn)行上下文,即保存每個(gè)線程當(dāng)前狀態(tài),使線程切換后,還能得到上次運(yùn)行的最后狀態(tài),并從最后狀態(tài)處繼續(xù)運(yùn)行。具體實(shí)施中可對類CRunContext定義如下class CRunContext{CMemArraym_ContextMemArray;∥用于記錄運(yùn)行中動態(tài)分配的內(nèi)存,進(jìn)行內(nèi)存回收,實(shí)現(xiàn)內(nèi)存管理ARRAY(CFunc)m_FuncStack;∥函數(shù)調(diào)用堆棧ARRAY(CEvent) m_EventQueue; ∥事件隊(duì)列CTimerPool m_TimerPool;∥時(shí)鐘隊(duì)列}m_ContextMemArray用于把運(yùn)行過程中動態(tài)分配的內(nèi)存指針保存起來,這些內(nèi)存在運(yùn)行一個(gè)函數(shù)后統(tǒng)一釋放。
一個(gè)線程中包含多個(gè)函數(shù)的層次調(diào)用,m_FuncStack用于記錄函數(shù)調(diào)用堆棧。調(diào)用一個(gè)函數(shù)前把函數(shù)指針壓入此堆棧中,一個(gè)函數(shù)調(diào)用完成后退棧,從而實(shí)現(xiàn)堆棧管理。通過此堆棧還可以觀察當(dāng)前程序執(zhí)行到哪個(gè)函數(shù),函數(shù)的調(diào)用順序等信息,從而實(shí)現(xiàn)調(diào)試功能。
m_EventQueue用于記錄事件隊(duì)列,以數(shù)組形式記錄如消息、時(shí)鐘超時(shí)等可以觸發(fā)程序運(yùn)行的事件,收到一個(gè)事件后把事件放到此數(shù)組中,等待處理。
m_TimerPool記錄了目前系統(tǒng)啟動的時(shí)鐘,調(diào)度程序不斷判斷這些時(shí)鐘是否已經(jīng)超時(shí),如果超時(shí),則把它從m_TimerPool中刪除,并在m_EventQueue中增加一個(gè)超時(shí)事件。
當(dāng)執(zhí)行程序切換到一個(gè)CRunContext對象,對此對象中的m_TimerPool進(jìn)行判斷,看是否有時(shí)鐘超時(shí),并檢查m_EventQueue中是否有需要處理的事件,如果有則讓此線程運(yùn)行。線程運(yùn)行時(shí)各語句會對這些事件進(jìn)行處理。一個(gè)線程執(zhí)行若干語句后,切換到另一個(gè)CRunContext對象,又執(zhí)行若干個(gè)語句,實(shí)現(xiàn)了多個(gè)線程的分時(shí)執(zhí)行,并可以在運(yùn)行中進(jìn)行包括設(shè)置斷點(diǎn)、單步跟蹤、獲取某個(gè)對象的值等各種調(diào)試。
權(quán)利要求
1.一種TTCN測試用例執(zhí)行方法,其特征在于首先輸入以MP文件格式編寫的測試用例或多個(gè)測試用例組成的測試套,再將MP文件中的所有元素轉(zhuǎn)化為相應(yīng)的內(nèi)存中對象,通過對所述的內(nèi)存中對象進(jìn)行執(zhí)行、調(diào)試完成對TTCN測試用例的執(zhí)行。
2.如權(quán)利要求1所述的TTCN測試用例執(zhí)行方法,其特征在于所述內(nèi)存中對象包括數(shù)值運(yùn)算類、語句類、測試用例類和測試套類四個(gè)基本類型;一個(gè)測試套類對象可以包含多個(gè)測試用例類對象,一個(gè)測試用例類對象可以包含多個(gè)語句類對象,一個(gè)語句類對象由多個(gè)數(shù)值運(yùn)算類對象組成;其中數(shù)值運(yùn)算類包括數(shù)值類和表達(dá)式類,數(shù)值類包括以下八類(1)整數(shù)類,(2)布爾類,(3)浮點(diǎn)類,(4)結(jié)構(gòu)類,(5)集合類,(6)有順序數(shù)組類,(7)無順序數(shù)組類,(8)聯(lián)合類;表達(dá)式類包括以下八類(1)加法運(yùn)算類,(2)減法運(yùn)算類,(3)乘法運(yùn)算類,(4)除法運(yùn)算類,(5)等于類,(6)不等類,(7)與運(yùn)算類,(8)或運(yùn)算類;語句類包括以下八類(1)條件轉(zhuǎn)向類,(2)條件判斷類,(3)循環(huán)類,(4)發(fā)送消息類,(5)接收消息類,(6)無條件轉(zhuǎn)向類,(7)返回類,(8)賦值類。
3.如權(quán)利要求1所述的TTCN測試用例執(zhí)行方法,其特征在于所述對內(nèi)存中對象進(jìn)行執(zhí)行、調(diào)試是對TTCN腳本的多個(gè)線程作分時(shí)處理,對每個(gè)線程用一個(gè)線程狀態(tài)對象保存線程當(dāng)前狀態(tài);每個(gè)線程狀態(tài)對象記錄以下四項(xiàng)內(nèi)容(1)動態(tài)分配的內(nèi)存指針;(2)記錄線程中的函數(shù)執(zhí)行狀態(tài)和調(diào)用順序的堆棧;(3)記錄事件隊(duì)列的數(shù)組;(4)系統(tǒng)時(shí)鐘。
全文摘要
本發(fā)明公開了一種TTCN測試用例執(zhí)行方法,首先輸入以MP文件格式編寫的測試用例或多個(gè)測試用例組成的測試套,再將MP文件中的所有元素轉(zhuǎn)化為相應(yīng)的內(nèi)存中對象,通過對所述的內(nèi)存中對象進(jìn)行執(zhí)行、調(diào)試完成對TTCN測試用例的執(zhí)行,省去了MP文件轉(zhuǎn)換為C程序、與庫函數(shù)的鏈接等過程,大大提高了執(zhí)行效率,并且通過對可控對象的操作進(jìn)行諸如獲取某個(gè)對象的值、設(shè)置某個(gè)對象的值、設(shè)置斷點(diǎn)、單步跟蹤等調(diào)試。
文檔編號G06F9/45GK1417678SQ0113461
公開日2003年5月14日 申請日期2001年11月7日 優(yōu)先權(quán)日2001年11月7日
發(fā)明者盧偉攀 申請人:華為技術(shù)有限公司