馮 菲,李天翼,于 澎
(中國鐵道科學研究院 電子計算技術研究所,北京 100081)
鐵路互聯網售票系統自動化測試研究與實現
馮 菲,李天翼,于 澎
(中國鐵道科學研究院 電子計算技術研究所,北京 100081)
鑒于鐵路互聯網售票系統規模龐大、業務復雜、升級頻繁等特點,引入自動化測試以進一步提高測試效率、降低測試成本。本文闡述利用商業軟件QTP和開源軟件Selenium構建互聯網售票系統的自動化測試框架,并從框架設計、測試用例設計和測試數據設計等方面闡述自動化測試的實現。
互聯網售票系統;自動化測試;QTP
鐵路互聯網售票系統是一個大型、高并發的實時交易系統,系統運行的穩定性、可靠性關系到廣大旅客的用戶體驗,因此系統的測試工作尤其重要。目前系統的功能測試主要依靠手工完成,隨著系統規模和業務復雜度的不斷提升,手工測試已經無法滿足系統的測試需求。主要存在以下問題:
(1)升級頻率高,系統的每次升級需要對主要業務流程進行回歸測試。互聯網售票系統主要的基本業務場景多達幾十個,大幅增加了測試工作量,消耗了大量的時間和資源。
(2)多瀏覽器支持,據不完全統計,IE、360、Chrome等6款瀏覽器合計占市場份額的九成,也就是說為了滿足至少90%用戶瀏覽器的兼容性需求,部分測試用例需要至少執行6次,使測試的工作量成倍增加。
(3)精度測試,部分測試場景需要精確操作或精準比對預期結果的測試項不適合手工執行,手工執行造成的誤差將影響測試結果的可靠性。
(4)數據驅動測試。部分場景需要經過大量的數據驗證,手工測試不僅耗費大量的時間和資源,還容易引起測試人員的厭倦情緒,影響到測試質量。
鑒于上述問題,單純的手工測試已經不能滿足需求,為了進一步提高測試效率、降低測試成本,引入自動化測試手段已經成為現實需要。軟件自動化測試是把以人為驅動的測試行為轉化為機器執行的過程,簡言之就是讓機器代替人來執行某些軟件測試過程,并分析對比測試結果。自動化測試通常被應用于軟件系統的回歸測試、兼容性測試、可靠性測試等。
通常軟件自動化測試離不開自動化測試工具,目前最為常用的工具分為兩類:(1)以HP的QTP(QuickTest Professional)為代表的商業自動化測試工具;(2)以Selenium為代表的開源自動化測試工具。為了更好的對手工測試進行補充,將充分結合這兩類工具,以期達到更好的測試效果。
1.1 自動化測試需求
測試腳本是自動化測試的靈魂,腳本的開發、調試和維護需要大量的時間和資源。因此,在提取自動化測試需求時,需要考慮該需求的必要性,是否是一個需要長期運行、多次重復的場景。有些測試需求,既需要長期運行,又需要多次重復,但操作復雜度過高,不利于腳本開發,這樣的需求同樣也不宜作為自動化測試需求。因此,首先整理出互聯網售票系統中的業務需求,并將其劃分為基本業務,如注冊、登錄、車票預訂、改簽、退票等,以及特殊業務,如身份核驗、行程沖突、手機核驗等,并進一步細化。最終篩選出適合引入自動化測試的需求集合。
1.2 自動化測試設計與開發
1.2.1 測試框架設計
考慮到互聯網售票系統的自動化測試是一個長期持續的過程,在測試時既要覆蓋較多的業務場景,又要覆蓋較多的測試數據,在設計自動化測試框架時主要考慮了測試數據和腳本分離、業務流程控制和功能點分離的原則。把測試數據外置在Excel文件中,運行測試時通過測試工具的接口從外部Excel逐行讀取。把單個的功能點,如登錄、查找車次、下訂單、支付訂單、查詢訂單等具體業務封裝成獨立的功能函數。然后通過流程控制函數來調用功能函數,構建不同業務場景,如登錄-訂票-訂單查詢,登錄-訂票-改簽,登錄-訂票-退票等。自動化測試框架如圖1所示。

圖1 自動化測試框架
1.2.2 測試用例設計
測試用例是自動化測試的基石,是開發自動化測試腳本的基礎。總的來說,自動化測試一般重點覆蓋的是一些關鍵路徑,重復操作頻率比較高,腳本開發效率又相對較高的測試用例。
自動化測試用例設計可以參考手工測試用例,但一般不能將手工測試用例直接全部用作自動化測試用例,因為不是所有的手工測試用例都可以通過自動化測試來實現。比如,手機核驗功能的手工測試用例,其中“填寫手機收到的驗證碼”這個步驟是依賴測試人員肉眼從手機上看到驗證碼后填寫來完成的,而這個“看”的動作是自動化測試無法實現的。
自動化測試相比手工測試而言,它的異常處理能力相對較弱,在設計用例時需要全面考慮,以免測試執行完成后報出大量錯誤信息,增加定位問題的難度。比如在車票預訂時,按出發地、目的地和日期查出相關車次,點擊“預訂”按鈕,正常情況下會跳轉到添加乘車人的頁面,但也有可能彈出提示,比如當所選車次距離開車時間很近時,或者所選車次是熱門車次提示需要到車站辦理改簽退票業務時,會有很多類似的提示,都需要在設計用例時考慮在內。
1.2.3 測試數據設計
測試數據是自動化測試的重要組成部分,選擇Excel作為自動化測試數據的載體,便于QTP(Quick Test Professional)、Selenium調用數據,Excel的界面和編輯方式也便于測試人員對數據進行維護。結合互聯網售票系統的實際需要,在Excel中設計了兩個主要的數據表格,分別用來控制循環次數和提供具體的測試參數,并能夠靈活地選用不同的瀏覽器執行測試,還能靈活地控制業務場景循環的次數。例如,“開始行號”規定了自動化測試工具從第幾行開始讀取參數數據并執行測試。“瀏覽器類型”規定了自動化測試工具(主要指Selenium)選用哪種瀏覽器執行本次測試。另外,提供具體測試參數的表格,需要考慮不同業務的通用性及數據維護的便捷性,如圖2所示。

圖2 自動化測試數據-測試參數
通過圖2中的表格,能夠靈活的配置當前行數據是否執行,運行哪種業務模式,并提供了精確的參數。例如,“是否運行”規定了當前行數據是否生效,如果不生效則直接跳過該行數據,繼續執行下一行。“業務模式”規定了本行數據運行的業務場景,例如“A”代表登錄系統后執行訂票業務,“B”代表登錄系統后順序執行訂票→退票業務,“C”代表登錄系統后順序執行訂票→改簽→退票,“D”代表登錄系統后對所有已完成訂單執行退票業務。
1.2.4 自動化測試開發
對象庫(OR,Object Repository)是QTP自動化測試工具的核心,也是QTP在實際項目應用中的樞紐。因此,對于對象庫的建立和維護關系重大,同時為了提高效率選擇使用共享對象庫,并安排指定人員對共享對象庫進行維護,其他測試人員在開發腳本時只能使用對象庫而不能對其進行修改。
除了對象庫之外,測試業務邏輯的開發是完成測試自動化的另外一個重要因素。自動化測試通常覆蓋最重要、最常用、執行頻率較高的業務場景,業務腳本開發的質量決定了自動化測試的成敗。通過前期的探索后決定使用QTP提供的專家視圖,基于對象庫手工開發代碼。另外,為了提高腳本的健壯性,在腳本中覆蓋一些特殊的業務規則,如行程沖突處理、出票失敗處理、訂單中不能只包含兒童票、隨機選取席別等,否則自動化執行時可能會因為這些特殊的業務規則導致測試執行的異常中斷。
自動化測試腳本是該階段的產物,但對于測試腳本的維護是一個貫穿于自動化測試各個階段的工作,是一個持續性的優化過程,通過調試、執行過程中得到的反饋不斷地再優化、改進和修正。
1.3 自動化測試執行
依托QTP強大的整合能力組織完整的測試工作流程,使用QTP開發和維護測試腳本,使用QC平臺集中管理測試腳本,將自動化測試執行過程中發現的缺陷自動提交到QC平臺上。經過前期準備工作,所有的自動化測試腳本開發完畢并通過調試,在完成對測試環境的搭建、部署和配置以后,按照既定的測試流程進行測試,工作時間可以選擇半自動化測試的方式進行,非工作時間進行無人值守的測試,以便發現不同類型的缺陷。
自動化測試執行完畢后,通過對提交的執行情況、測試結果等進行分析比較,得到詳細的分析報表、測試報告和質量情況等,用于評估測試流程和被測對象的質量,幫助組織消除缺陷、改進軟件過程,最終提高軟件質量。
在自動化測試實現過程中發現以下問題:
(1)圖片驗證碼識別。系統在登錄、提交訂單時會有圖片驗證碼,自動化軟件無法有效識別。可以通過程序屏蔽或使用“萬能驗證碼”的方式解決,即無論圖片如何變化都能通過驗證,但是這種方法只適合在測試環境中使用,同時增加了開發人員版本維護難度。
(2)人工干預的操作。測試過程中部分功能需要人工干預,如訂票、改簽業務,會轉到網銀系統或第三方支付平臺,部分銀行需要安裝網銀插件或手機驗證碼完成支付,使得自動化測試無法實現。解決途徑是在測試環境中使用虛擬支付平臺,直接返回支付成功、支付失敗的狀態。
(3)個別對象無法被獲取并加入對象庫。解決方案是通過描述性編程,它是另一種對象識別途經,不依賴于對象庫,而是通過描述來識別對象。
通過在互聯網售票系統功能測試中引入自動化測試,作為對手工測試的補充,實現了快速執行回歸測試,提高了測試效率,減少人工執行的繁瑣測試,并且,提高了測試執行的一致性和可靠性,可以在非工作時間執行大量的測試,將繁瑣的任務轉化為自動化測試,節約人力成本。通過大量長期的測試用例運行,增加了軟件信任度,培養了測試人員開發能力,提高團隊工作技能。但自動化測試還不能完全取代手工測試,手工測試仍然是功能測試中不可或缺的重要手段。
[1]趙 彬.軟件測試技術經典教程[M].北京:科學出版社,2007.
[2]陳能技.QTP自動化測試實踐[M].北京:電子工業出版社,2010.
[3]田艷琴.QTP從實踐到精通[M].北京:電子工業出版社,2010.
[4]黃文高.QTP自動化測試與框架模型設計[M].北京:機械工業出版社,2011.
責任編輯 方 圓
Automated testing in Railway Internet Ticketing and Reservation System
FENG Fei, LI Tianyi, YU Peng
( Institute of Computing and Technologies, China Academy of Railway Sciences, Beijing 100081, China )
Due to characteristics of huge scale, complexity of service logic and frequency of updates for the Internet Ticketing and Reservation System, the article introduced automated testing as a supplement to improve eff i ciency and reduce the cost of testing. The automated testing framework was constructed by using QTP and Selenium. It was illustrated the implementation of automated testing from the aspects of framework design, test case design and test data design.
Internet Ticketing and Reservation System; automated testing; Quick Test Professional(QTP)
U293.22∶TP39
A
1005-8451(2015)11-0024-03
2015-04-10
馮 菲,研究實習員;李天翼,副研究員 。