軟件自動測試架構設計

第1章 前言 
  目前市場上已經有了不少自動測試工具,不過滿足自己需求的測試工具卻很難找到或者是難以支付其昂貴的費用,對於在Linux/Unix後臺運行的軟件產品,自己開發一個自動測試工具,不但可以滿足軟件的測試需求,還可以節省一大筆費用。
  這個自動測試系統架構的設計,是基於Linux/Unix後臺運行的軟件產品,架構的思想,源於主流測試工具與前輩的實踐經驗。
  軟件的自動測試,其實就是一種思想,不管是市場上的主流測試工具,還是自主開發的測試工具,都只是工具,關鍵的是怎樣去組織一個工具,怎樣將工具應用於軟件測試中。
  第2章 系統架構
  2.1 設計思想
  1.自動測試的組成:自動測試主要有幾部分組成:(1)、自動測試工具(2)、測試案例(3)、模擬接口(4)被測試軟件(5)自動編譯與安裝
  2.自動測試工具:自動測試工具的主控程序不需要理解業務,所有的業務邏輯和測試數據都寫在測試案例中,主控程序執行每個測試案例中的指令完成每個測試案例的測試,測試結果記錄在指定的文件中。
  3.測試案例:業務邏輯和測試數據體現在測試案例中,一個完整的測試案例應該包括測試條件預置、測試步驟、每個測試步驟的輸入與輸出、預期結果、實際測試結果的獲取、實際測試結果與預期測試結果的對比。每個測試動作爲一個操作指令,每個操作指令包括指令的ID、輸入與輸出,主動測試工具就是通過執行測試案例的這些指令來完成自動測試的。
  4.黑盒測試:被測試軟件對於自動測試工具來說,是一個黑盒子,自動測試工具不關心被測試軟件的內部邏輯和業務流程,關心的被測試軟件的接口以及每個接口的輸入和輸出。自動測試工具向被測試軟件輸入測試數據,在相應的接口獲取測試結果,如果測試結果與預期結果相一致則測試通過,否則測試失敗。
  5.模擬接口:與被測試軟件打交道的各個接口,需要模擬,在必要時可以設置模擬接口給被測試軟件的返回值,以達到測試的目的。
  6.自動編譯與測試:自動編譯就是自動到源代碼管理服務器編譯軟件,將軟件上傳到測試服務器。自動測試就是自動更新或安裝被測試軟件,啓動自動測試工具執行自動測試案例,記錄測試結果並將測試結果以郵件的方式發送給相關的人員。
  7.測試環境的恢復:在某個測試案例執行完成後,不管測試是成功還是失敗,都需要恢復被該測試案例特殊化後的測試環境。
  8.重用策略:公用的模塊提取出來,被別的模塊或功能調用,提高模塊的公用性,減少程序冗餘代碼。
  9.自動測試工具模塊組成:
  (1)主控程序:讀取測試案例以及每個測試案例的操作指令,根據不同的操作指令調用不同的指令接口執行每個測試案例的指令,記錄測試結果。
  (2)指令接口:是測試案例操作指令與具體測試步驟實現之間的橋樑,與測試案例的操作指令相對應,指令接口就是實現測試案例的操作指令所需要做的事情,動作完成之後將該動作的操作結果返回給主控程序。
  (3)驅動程序:驅動程序是實現具體的指令操作的程序,被指令接口調用完成具體的測試工作,並將測試結果返回給指令接口。
  (4)輔助功能:實現系統的輔助功能,比如案例文件的處理,底層socket處理,文件處理或者數據庫操作。
  2.2 系統架構
  2.3    系統流程圖
  第3章 自動測試核心設計
  3.1 系統組成
  自動測試工具由主控程序、指令接口、驅動程序和輔助功能組成。
  3.1.1 主控程序
  控制模塊不理解業務,把業務邏輯和測試數據全部寫在案例裏,控制模塊讀取所有需要測試的測試案例以及每個測試案例的每一個操作項的動作,調用不同的接口處理模塊來實現整個測試流程。
  控制模塊處理流程:
  1.讀取命令,獲得需要執行的命令以及配置文件。
  2.分析命令以及命令的參數,比如如果命令是想查看幫助,則打印幫助提示;如果命令是執行測試案例,則開始執行自動測試的測試案例。
  3.分析配置文件,獲取測試案例存放目錄,需要執行的案例的ID文件,數據庫連接信息,測試案例所使用到的參數。 (注:因爲在測試案例的執行中,未必執行完整個測試案例,測試案例中的某些動作可能不需要執行,可在配置文件或測試案例中進行配置)
  4.根據測試案例存放目錄以及測試測試的ID文件獲取具體需要測試的測試案例。
  5.獲取每個測試案例需要執行的動作指令以及輸入數據。
  6.逐個執行測試案例,根據測試案例的動作指令調用不同的接口執行不同的動作。
  7.某個測試案例測試完成後,獲取該測試案例的測試結果,並將測試結果輸出到結果記錄文件中。
  8.繼續執行下一個案例,直到所有的測試案例都被測試完爲止。
  3.1.2 指令接口
  是測試案例操作指令與具體測試步驟實現之間的橋樑,與測試案例的操作指令相對應,指令接口就是實現測試案例的操作指令所需要做的事情,動作完成之後將該動作的操作結果返回給主控程序。接口模塊負責與接口的數據處理,包括輸入和輸出,同時必須包括數據處理的結果。主控程序在讀取了測試案例的操作指令之後,調用這些操作指令所對應的指令接口執行相應的操作,如果該接口執行操作成功則主動程序繼續下一步操作,否則測試終止,只有所有的測試步驟的指令都被成功之行,測試案例才通過。
  爲了方便管理與調用,所有的接口都實例化都一個接口工廠中,在實現了相應的指令接口後,需要將這些指令接口增加到接口工廠中,接口工廠根據案例中的接口類型來調用不同的接口實例。
  指令接口,事實上就是執行測試案例中的每個指令要求做的事情,比如輸入測試案例的測試數據、執行相應的測試步驟、獲取測試結果、對比測試結果,指令接口完成一個指令之後將這個指令的操作結果返回給主控程序。
  比如,話單檢查指令接口,指令接口需要做的事情就是初始化要監聽的話單文件,獲取話單文件,把獲取到的話單文件同期望話單進行比較,返回比較結果給主控程序。
  又如:短信接收發送指令接口,指令接口的工作就是實現發送MT,收取狀態報告並把收到的狀態報告的狀態值與期望的狀態值進行比較,返回比較結果給調用者;收到本地MO,並把收到到的本地MO與期望的MO進行比較,返回比較結果給調用者。
  3.1.3驅動程序
  驅動程序是實現具體的指令操作的程序,被指令接口調用完成具體的測試工作,並將測試結果返回給指令接口。驅動程序是具體操作的完成者。
  比如,話單檢查驅動程序,用於對特定話單格式的話單文件進行跟蹤,並且能夠把跟蹤結果解析成話單,話單檢查指令接口會調用話單驅動程序完成具體的每條話單的各個子段的比較,驅動程序完成檢查後將結果返回給指令接口。
  3.1.4 輔助功能
  實現系統的輔助功能,比如案例文件的處理,底層socket處理,文件處理或者數據庫操作。 [Page]
  3.2 測試案例
  3.2.1 測試案例的組成
  測試案例包括了業務邏輯、測試步驟以及輸入與輸出,使用XML存儲測試案例,可以提高測試案例的可讀性、通用性以及可維護性。不過這樣有一個不好的地方就是測試案例看起來會比較龐大,不夠輕盈,但是非常清晰,即使是對測試案例完全不熟悉的人,只要看了也自然很快就對業務流程有了一個大致的瞭解;而且,業務邏輯體現在測試案例,也會增強系統的擴展性,如果需要增加某些測試步驟或修改測試數據,只需要修改測試案例即可。
  測試案例主要由測試案例ID、測試案例描述、以及測試操作指令所組成。測試案例ID就是測試系統的案例ID,測試描述包括測試案例的簡要描述、測試產品名稱、測試功能點、測試版本、測試類型以及測試案例的作者,測試操作指令是測試案例的核心,每個測試步驟就是一個操作指令,操作指令的順序與業務邏輯或測試步驟相關。每個操作指令包括:
  (1) 操作指令ID,在Test Case中唯一;
  (2) 操作指令接口名稱,自動測試工具所提供的指令接口名稱,在一個Test Case中可以出現多次;
  (3) 操作指令接口動作名稱,自動測試工具所提供的指令接口的具體操作的名稱,在一個Test Case中可以出現多次,自動測試工具操作指令接口名稱和操作指令接口動作名稱調用不同的指令接口的功能完成相關的動作;
  (4) 操作指令的描述;
  (5) 模擬接口的信息,如果需要使用到模擬接口,需要將模擬接口相關的信息再測試案例中輸入,模擬接口相關信息應該參數化;
  (6) 輸入數據,也就是執行這個操作步驟所需要輸入的測試數據或是預期的結果或延時等待時間等。
  (7) 輸出數據,也就是這個操作步驟的輸出結果。
  一個測試案例就是一個完整的測試流程,由不同的操作步驟組成,每個操作步驟就是一個操作指令,一個完整的測試案例可能包括這些操作指令:
  (1) 預置測試環境,比如修改某些特殊的配置、設置模擬接口的返回值、檢查某些數據等;
  (2) 測試步驟,一個測試案例可能有多個測試步驟,每個測試步驟爲一個操作指令,操作指令的輸入就是測試需要輸入的數據,動作就是需要執行的測試操作,測試案例的測試就是由一系列的操作指令完成;
  (3) 檢查測試結果,一個測試案例中可能存在多個檢查點,每個檢查點爲一個操作指令,這操作指令的輸入就是預期的測試結果,操作指令的動作就是獲取測試結果並將測試結果與預期測試結果相比較,如果相等則測試通過,否則測試失敗;
  (4) 恢復測試環境,測試完成後應該恢復測試環境的原始數據或相關的資源。
  爲了提高測試的擴展性與靈活性,測試案例中的測試數據應該可以參數化,這樣即使是測試數據發生了變化,只需要修改參數的值即可,而不必把所有的測試案例的某些數據逐個修改。這些參數以及參數的值可以存放在配置文件中,被測試案例引用,自動測試工具根據測試案例的參數的名稱到相應的配置文件中讀取這個參數的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章