自動(dòng)化測試在動(dòng)態(tài)文檔發(fā)布系統中的應用
3.1.1 系統主要模塊介紹
我們可以看看此系統的一個(gè)特別簡(jiǎn)化同時(shí)又很典型的流程:本文引用地址:http://dyxdggzs.com/article/194837.htm
首先介紹一下每個(gè)術(shù)語(yǔ):
BDT:Business document template,商業(yè)文檔模板。在這里我們定義一些規則,然后會(huì )跟客戶(hù)數據關(guān)聯(lián)選擇具體的規則。
Customer Data:客戶(hù)數據。XML格式記錄特定客戶(hù)的數據,然后根據這些客戶(hù)數據,動(dòng)態(tài)產(chǎn)生不同文檔。
ASL:Assembly List,裝配列表。由BDT和客戶(hù)數據裝載生成,里面記錄的是一個(gè)個(gè)根據規則而選出來(lái)的最終文檔片段(text piece)。
Text Piece:文檔片段。在客戶(hù)端定義,并存儲在數據庫端的文檔片段。
MSO:微軟自己定義的HTML格式Microsoft HTML,然后我們在里面加入一些我們自己定義的標記。
Styled Doc:式樣文檔。我們定義的一個(gè)格式,其實(shí)就是一些結構類(lèi),會(huì )對文檔的各個(gè)內容、樣式、布局進(jìn)行描述。
DIF:Document Independent Format,獨立文檔格式。StyledDoc經(jīng)過(guò)CE(composition)排版的結果就是DIF。它是一個(gè)頁(yè)面級別的概念,告訴你什么時(shí)候生成一個(gè)新頁(yè)面,多大,在哪里用什么字體寫(xiě)些什么字,在哪里放一個(gè)什么樣的圖片。
PDL:Page Description Language,頁(yè)面描述語(yǔ)言。我們需要生成的最終結果,就是那些用頁(yè)面來(lái)表示文檔的語(yǔ)言,例如,Word、PDF、AFP、Postscript等等。
從圖1可以看出,我們的EJB主要用在對數據庫的操作上。對于數據庫的操作,主要是對數據模板(BDT)的提取,然后和本地客戶(hù)數據進(jìn)行整合,進(jìn)而得出需要真正從數據庫取出數據的組合(ASL),最后進(jìn)行后面的排版(CE)、計算,生成各種不同類(lèi)型的文檔。
3.1.2 解耦數據庫
既然我們要去除EJB和數據庫的束縛,我們能不能繞過(guò)去呢?進(jìn)一步分析,我們得到,數據模板在和客戶(hù)數據裝載(Assemble)后會(huì )在數據庫里生成一個(gè)xml文件,用來(lái)描述最終會(huì )用到的具體的存在于數據庫中間的文本片段。而這個(gè)xml文件,我們稱(chēng)之為ASL。我們試想,如果我們用一個(gè)辦法,直接生成我們要用到的ASL文件,那么我們是不是就可以繞過(guò)EJB和數據庫了呢?
答案是一半肯定,一半否定。首先,我們的確能繞過(guò)EJB的應用,它主要用于assemble這個(gè)階段。但是光有ASL是沒(méi)有用的,因為我們還需要通過(guò)ASL去數據庫里取得所有的文本片段去做整合(Merge)。那么我們能不能把輸入進(jìn)一步地往后面推,推到Merge以后呢?答案是不能。首先來(lái)說(shuō)Merge的輸入也就是文本片段會(huì )有很多,他們之間的關(guān)系很復雜,這些都是記錄在A(yíng)SL里面,并且,Merge本身就是一個(gè)比較容易出問(wèn)題的模塊,是我們做這個(gè)Test Client要重點(diǎn)模擬和測試的模塊,所以我們只能另想辦法。
這里我們大概介紹一下通過(guò)ASL去數據庫取文本片段的過(guò)程。這個(gè)過(guò)程其實(shí)比較簡(jiǎn)單,因為邏輯方面的運算已經(jīng)在A(yíng)ssemble的過(guò)程中處理完成,這里的任務(wù)是根據ASL里面的一個(gè)個(gè)的文本片段ID去數據庫里取出相應的數據來(lái)進(jìn)行后續的流程。既然是這樣的一個(gè)過(guò)程,我們決定嘗試通過(guò)本地文件來(lái)模擬數據庫記錄。我們可以把數據從數據庫里取出來(lái),按照一定的規則,給它們命名為本地的一個(gè)個(gè)文件,然后在我們的測試框架中重載以前的去數據庫取文本片段的方法為去本地的文件夾里取。這樣的確是可行的,因為:
(1)我們的目的是驗證我們的文檔歷史的保真度(Fidelity)的問(wèn)題,那么我們的文檔的文本片段是不會(huì )有所改變的。所以我們可以把它們放心轉移到本地,而不用擔心更新問(wèn)題。
(2)文件放到本地,能減少傳輸上的消耗,并且如果把方法進(jìn)行重載,是代價(jià)最小和最自然的一件事情,并且能最大限度地利用原來(lái)的代碼。
(3)經(jīng)過(guò)一些小小實(shí)驗,我們發(fā)現經(jīng)過(guò)很小的改動(dòng),我們可以把數據庫的文件按照一定的規則改寫(xiě)到本地。這些都可以通過(guò)寫(xiě)一些小程序來(lái)實(shí)現。以后有新的文檔,都可以用這個(gè)方法來(lái)實(shí)現,簡(jiǎn)單而易用。
3.1.3 輸入和輸出
在去除EJB和數據庫的束縛的過(guò)程中,我們得到了我們的輸入方式,那就是ASL+Text Pieces。輸出文件當然很簡(jiǎn)單了,我們選擇PDF,這個(gè)是我們主要的打印格式,當然,我們可以方便配置生成其它的格式文件,但是對于自動(dòng)比較,由于我們現在的工具只支持PDF的比較,所以,對其它的格式文件輸出,我們暫時(shí)不能提供自動(dòng)比較。
評論