丁順英,李天翼
(中國鐵道科學研究院集團有限公司 電子計算技術研究所,北京 100081)
鐵路12306 互聯網售票系統(簡稱:12306)是在中國鐵路客票發售和預訂系統基礎上,拓展互聯網售票、手機售票等業務而構建的電子商務系統[1],為廣大旅客提供服務。12306 作為中國鐵路重要的售票渠道,用戶規模龐大,任何缺陷在海量用戶的沖擊下都可能引起系統災難,因此,測試是減少12306的缺陷、規避系統風險和確保系統質量不可缺少的重要環節。12306 的測試從系統設計就開始介入,覆蓋測試分析、測試需求、案例設計、單元測試、集成測試、系統測試、驗收測試等階段[2];測試范圍包括票務主線業務,以及保險、餐飲、旅游、酒店、廣告等支線業務。因此,如何有效合理地選擇和應用測試技術對12306 的穩定性至關重要。
采用自動化測試技術,可以完成12306 票務主流程變更后的回歸測試和分支流程變更后票務主流程的驗證性測試;采用測試模擬器技術,可以完成在內部子系統或關聯系統不可用、關聯系統性能不達標、測試數據無效等客觀情況下對系統的測試;在系統正式部署完成后,采用云測試技術,可以完成模擬真實用戶在生產系統上進行的測試;采用兼容性測試技術,能夠使12306 在最大程度上滿足用戶的使用需求和使用體驗。本文詳細介紹上述幾種測試關鍵技術在12306 測試中的應用。
在12306 測試過程中,采用了多種測試分析方法,以滿足系統不同階段的測試需求[3]。
在單元測試和集成測試階段,主要采用基于功能界面的分析方法:
(1)梳理各子系統的單個功能,分析每個功能的測試需求,包括正常測試需求和異常測試需求;
(2)識別系統內和系統間功能的關聯性,并根據功能的關聯性進行功能組合或功能交叉的測試需求分析;
(3)根據以上分析結果,最終形成測試需求文檔。
文檔分為單一功能測試需求和功能組合測試需求兩部分。當新增子系統時,只需要關注子系統的新功能和關聯子系統的交叉功能。在該階段,可以采用自動化測試技術完成系統新增功能后的主流程測試;采用測試模擬器技術完成功能測試。
在系統測試和驗收測試階段,采用基于業務流程和規則的分析方法:
(1)根據系統設計,將12306 劃分為票務主線業務,以及積分、保險、餐飲等分支業務;
(2)詳細劃分各類業務,如票務業務中由用戶信息、信息查詢、購票、訂單處理、支付等下一級業務組成,用戶信息又可以分為用戶注冊、信息修改、用戶注銷等子業務;
(3)分析各類業務的流轉過程,標識每一種業務對不同情況的處理流程和處理規則,形成完整業務流路徑,分析每個分支路徑的測試需求,并確認業務流對應的系統功能;
(4)根據以上分析結果,最終形成業務流程的測試需求文檔。
此種分析方法在業務流程規則變化或增加新業務時,需不斷地完善和整合。在該階段,采用云測試技術可以完成以業務流程測試為主要目標的測試任務;在系統測試階段,采用兼容性測試技術,可提前發現在不同機型、不同系統中的缺陷,以滿足更多用戶的使用需求。
12306 在票務主流程上和一些分支上采用自動化測試技術,用以解決票務主流程變更后的回歸測試和分支流程變更后票務主流程的驗證性測試。為了更好地利用自動化測試技術,12306 的自動化測試采用測試數據、測試腳本、測試配置分離的處理方式,同時,加入了測試管理、測試執行、測試結果統計分析等相關功能。
2.1.1 測試方法
12306 的測試數據全部存放于測試數據庫中,數據按照類型進行結構化、條件化存放,如用戶信息、車次信息、車站信息、席位信息、票價信息等。在測試準備階段,根據業務需求進行測試數據組織,而對于一些復合數據,可以通過已有的測試數據重新生成并存放在測試數據庫中,也可以在測試過程中使用腳本;測試任務執行完成后,將測試結果存放于數據庫中進行統計與分析。
2.1.2 測試應用
將進行自動化測試的腳本分成功能級腳本和業務流腳本,功能級腳本指的是與被測系統完成一個特定功能或交易的一系列交互操作,如用戶登錄、余票查詢、聯系人查詢、扣票、支付等[4];業務流腳本是指按一定業務邏輯將多個功能級腳本串聯起來組成的復合腳本,如完整的購票流程、退票流程、改簽流程等。在功能級腳本和業務流腳本完成的基礎上,進行測試場景的編寫,具有業務關聯的多個案例(包括功能案例和業務案例)組織到一起形成集合??蓪绦羞^程中涉及到的執行設備、執行次數、執行時間等進行參數化配置,同時,在系統中增加了任務調度功能,滿足無人值守下的測試執行、結果收集和報表生成。
引入自動化測試技術,可以減少人工測試的繁瑣,并且保障測試的一致性和可重復性,從而提高測試效率[5]。但是,采用自動化測試技術,測試腳本開發周期長、人力和時間成本較高[6];加之12306 產品迭代頻繁,會導致自動化測試腳本變化頻繁、不易維護;對于短期項目,測試腳本的復用度低,依然無法完全替代手工測試實現功能、業務流程的全覆蓋。
測試模擬器類似于訓練飛行員的模擬艙,利用測試模擬器,可構建被測試應用系統的完整測試環境,在高度仿真的環境中,能夠支持應用系統的功能、性能等測試[7]。
2.2.1 測試方法
12306 內部由幾十個子系統組成,對外關聯若干系統。在測試過程中,經常會遇到內部系統不可用、關聯模塊開發未完成、關聯系統性能不達標、測試數據無效、網絡訪問限制/訪問費用高等原因影響測試進度,為此,采用了測試模擬器技術。測試模擬器可直接在應用層模擬內部子系統或關聯系統的行為,支持HTTP、HTTPS、TCP、UDP、Socket 等多種通信協議,并可根據系統要求定義XML、JSON、SOAP 等多種報文格式,支持請求端模擬、響應端模擬、請求/響應、響應/轉發等多種場景,支持報文延遲、報文丟失、報文失敗錯誤等特殊場景的模擬。
2.2.2 測試應用
12306 的席位數據存放于18 個鐵路局集團公司客票中心的幾十個席位數據庫節點中,旅客購票、改簽(變更到站)、退票等信息都存儲在席位數據庫中,旅客購票后的訂單信息、電子票信息、實名制信息等存放于20 組電子票庫節點中[8]。在測試環境中,搭建了北京、上海、廣州等3 個客票中心的4個席位數據庫節點,其它的全部采用測試模擬器實現,測試模擬器替代了應用服務+席位數據庫的功能。針對電子票庫節點,采用同樣的處理方式,搭建3組電子票庫節點,其余的采用測試模擬器實現。
測試模擬器在模擬外聯系統中也發揮了重要作用,典型的應用就是電子支付環境的模擬,由于旅客的支付行為全部是在銀行、支付寶和微信等第三方平臺進行,測試環境中不具備建立第三方支付系統的能力,因此,通過模擬第三方支付系統的通信協議和報文格式,可滿足隨時支付的測試要求;其他外聯的保險、積分、餐飲、旅游等系統的測試也可采用測試模擬器實現。
采用測試模擬器技術的測試環境軟/硬件等基礎框架可復用,所以,節約了基礎框架塔建成本;可縮短測試周期,將系統從不可測變為可測,測試提前介入,節約時間成本;可模擬各種業務情況,特別是異常測試,提高測試覆蓋率,提升測試效率和質量;在性能測試中,測試模擬器的性能一般高于被測系統,不會成為性能測試的瓶頸。
云測試是基于云計算的一種新型測試技術,可以模擬用戶遠端訪問和7×24 h 不間斷測試[9]。
2.3.1 測試流程
用戶在本地編寫并調試自動化測試腳本,將調試后的自動化測試腳本上傳到云測試平臺,在平臺上配置運行自動化測試腳本的目標地址、運行時長、開始時間等參數,實現對12306 的自動化測試。同時,云測試平臺具有腳本錄制并生成、腳本線上編輯、腳本驗證和結果展示等功能。
2.3.2 測試應用
12306 云測試的范圍主要以流程測試為主,在系統部署完成后,模擬真實的用戶在生產系統進行測試,測試內容包括:編寫用戶登錄、查詢發/到站余票、選擇車次預訂、添加乘車人、提交訂單、支付。測試流程覆蓋用戶購票的全部操作,并在每一步操作后進行預期結果驗證,同時,記錄錯誤結果。將測試腳本分發到多臺云計算節點上,按需生成虛擬用戶運行測試腳本,從互聯網端對系統施壓,實時查看壓力測試的結果;可設置少量用戶進行7×24 h不間斷運行測試,測試12306 的可用性。
借助云測試平臺模擬真實的用戶進行測試,不需要購買不同應用的測試軟件、不需要進行復雜的網絡部署,能夠有效降低測試成本,節省測試機器、網絡準備等環節的時間,進而縮短搭建測試環境的時間,提高測試效率[10]。
兼容性測試是指測試軟件在特定的硬件平臺上、不同的應用軟件之間、不同的操作系統平臺、不同的網絡環境中進行的測試[11],手機App 兼容性測試還包括在不同機型、不同系統上進行的測試。
2.4.1 必要性
智能手機的普及率越來越高,無論是在系統還是軟/硬件環境方面,種類繁多。目前,鐵路12306手機App 訂票比率已超過70%,手機App 在各種機型和系統上的運行狀況各不相同,若手機App 的兼容性出現問題,不僅會影響用戶的使用體驗,更嚴重的還會導致用戶流失,因此,需要進行兼容性測試,最大程度地使更多的用戶能夠正常使用軟件。
2.4.2 測試應用
12306 手機App 兼容性測試范圍主要包括與硬件設備的兼容性、與操作系統的兼容性、分辨率兼容性、網絡運營商兼容性、與其他軟件的兼容性、軟件版本向前/向后兼容性等。作為功能測試的一部分,兼容性測試著重考慮的測試功能點包括安裝測試、卸載測試、啟動測試、運行測試、核心功能測試(購票、支付、改簽、退票、訂單查詢等)、用戶界面測試等[12]。12306 手機App 兼容性測試考慮的因素及在不同的測試范圍下的測試功能點舉例,如表1所示。通過兼容性測試,檢查手機App 是否有報錯或者崩潰發生,并記錄錯誤發生時界面效果,截取系統運行日志等關鍵信息,根據問題進行分類和優化分析,為手機App 的進一步優化提供依據。

表1 12 306 手機 App 兼容性測試主要內容及測試功能點舉例
12306 手機App 兼容性測試能在最大程度上滿足廣大用戶的使用需求和使用體驗。但是,兼容性測試成本較高,機型的選擇是考慮的重點。
本文分析了12306 在軟件測試各個階段使用的測試方法和測試技術。重點研究了自動化測試、測試模擬器、云測試、手機App 兼容性測試等技術及其在12306 測試中的具體應用。12306 的測試工作伴隨著12306 的成長和發展,是一個持續集成與不斷演進的過程,隨著測試管理、測試技術、測試能力的不斷提高,測試工作將在12306 的發展過程中發揮更加重要的作用。