周紹凱,姚礪
(1.東華大學計算機科學與技術學院,上海 200051;2.東華大學計算機軟件與理論系,上海 200051)
2016年6月,國家新聞出版廣電總局發布了《關于移動游戲出版服務管理的通知》;2016年12月5日,文化部發布了《關于規范網絡游戲運營加強事中事后監管工作的通知》。一系列的通知出臺,不斷地為我國的網絡游戲創造更加良好的市場環境。
2017年,游戲市場銷售收入已經突破2000億元,占據了整個泛娛樂產業中四成收入,并且依然處于快速增長階段,市場三年復合增長率達到21.2%。中國上市游戲企業數量,從2016年底的158家增長到2017年底的185家。
網絡游戲本質上是一套強反饋且有社交功能的意義系統,游戲+社交正在以不可忽視的姿態進入人們生活,網絡游戲也逐漸成為繼文字、圖片、視頻之后的第四媒介。在各個社交平臺上,網絡游戲已經成為了社交的一部分,隨著社交平臺的催化和傳播,其也進一步促進了網絡游戲的火熱。
整個市場越發成熟,網絡游戲用戶對產品的要求也日趨提高,行業競爭狀況也日趨激烈。而對游戲企業而言,提供游戲產品質量保證的重要性不言而喻,其直接影響到公司的聲譽及收益。因此,游戲測試已經成為游戲開發過程中極其重要的一個環節,也直接決定著游戲產品的最終質量。
對于更新迭代頻繁的網絡游戲,在數十個版本之后的內容會非常繁雜,游戲的測試任務復雜、工作量大,對于接口測試、歷史功能回歸測試和操作多角色測試等,采用自動化的接口測試方案就非常必要。
目前通用的接口測試工具如:Jmeter、SoapUI、Post-Man,其在使用初期效率高、對于測試人員入門較容易,但方式固定、擴展差、二次開發困難,難以用于復雜用例中的接口交互、數據更改等操作。
本文提出并實現了一個用于網絡游戲的測試用例自動化執行的測試系統,可以通過獨立和簡單的測試用例編寫,對復雜的網絡游戲項目進行自動化接口測試。
對于自動化測試用例的設計,需要考慮到測試的針對性和用例的可復用性。本文設計的測試系統所面向的游戲公司,其已有多款三至五年版本內容的線上游戲,積累有大量的測試用例以及所遇到的各種問題,但實際測試時仍以手工測試為主。本文針對手工測試的成本高及測試覆蓋局限性,基于混合式測試自動化框架思想,提出了以測試用例為驅動的自動化測試系統,能有效提高網絡游戲的測試效率。
為進一步降低該自動化接口測試系統的開發和使用成本,從開發維護和實際使用兩方面入手。
開發維護:(1)自動化接口測試系統的開發,結合游戲公司中已有的工具和腳本進行開展,一方面減少開發時間,另一方面降低使用人員的學習成本;(2)開發生成測試用例模板的工具,通過對游戲公司內已有的測試用例進行整理,歸類出不同類型的測試用例模板,并結合后續的自動化測試進行適當的調整;(3)獨立的自動化接口測試執行工具,測試用例與測試執行工具分離,便于各自的單獨升級和維護。
實際使用:(1)自動化接口測試執行工具與測試用例,可任意組合,切換內外網環境、不同通信協議后進行測試;(2)根據具體游戲項目,調整被測游戲的IP地址、端口等信息后,便可根據測試用例對不同的游戲執行自動化接口測試;(3)通過對測試執行工具的升級,不斷地將新的事件驅動、關鍵字驅動等進行持續集成;(4)通過對用例模板的補充完善,能進一步提升測試用例編寫的針對性和覆蓋率。
本文所述的自動化接口測試系統,由測試用例模板生成工具、接口測試工具、自動化測試執行工具構成。其中用例模板生成工具、接口測試工具可獨立運行,自動化測試執行工具的使用基于測試用例而實現。根據測試用例與測試工具的不同組合,可在內外網環境、不同通信協議下對網絡游戲進行測試。
根據網絡游戲的手工測試過程,而設計的自動化測試系統執行流程,如圖1所示。
自動化測試的執行流程:由讀取以Excel形式保存的測試用例開始,根據需求連接所需測試的游戲服務器,并查詢或創建測試所需的游戲角色,將測試用例內的測試步驟解析成相應的測試執行腳本,在游戲服務器內執行測試后,將測試結果保存到測試用例內,待所有測試需求都執行后,最終完成自動化測試。

圖1 自動化測試流程圖
為使測試用例能更加靈活和具有針對性,設計了通用和特殊的兩種測試用例模板。
通用的測試用例模板,是根據該網絡游戲項目的測試工作業務積累和測試方法,預先制作并提供一部分的測試用例模板,需求及測試人員僅需對差異內容略作修改便可進行測試工作,用以完成相似的測試業務內容,充分體現了測試用例的復用價值和測試用例模板的實用價值,對測試用例模板內已提供的測試數據略作相應調整后即可。
特殊的測試用例模板僅提供填寫的樣例,需要需求及測試人員對用例進行完善,用以開展新的測試業務執行。如該新的測試業務和測試用例(特殊的測試用例)有再次利用的價值,會通過將其增加到測試用例數據庫中,用以豐富和完善該項目的測試用例。
為使測試用例可自動化執行,需要將測試用例中填寫的內容,按照一定的格式進行填寫。在讀取到測試用例文件之后,會依次解析各個測試用例表格內填寫的內容,然后將文字轉化為相應的操作步驟,并在測試信息驗證通過后才會執行自動測試。
在測試開始前,從測試用例的Excel文件內讀取所測試游戲的信息和測試所需執行的步驟(如Python的openpyxl模塊)。測試用例的數據轉換,以接口返回值的檢查操作轉換為例,測試用例內的文字如下:
查看接口返回值|接口名#
發接口|接口名#
核對接口返回值|接口名#參數1;參數2|返回值字段名#預期值
測試執行工具中,將其轉化為執行操作的代碼如下:


在測試過程中,模仿客戶端進而實現與服務器的接口交互操作。根據測試需要的不同,提供了http與socket兩種與服務器連接通信的方式(如Python的httplib、urllib、socket模塊)。
在測試驗證時,通過單元測試的執行工具,對服務器返回的接口信息進行驗證、通過SSH(Secure Shell)的方式進入服務器(如Python的Paramiko模塊)對操作結果日志進行驗證、連入游戲服數據庫(如python的MySQLdb模塊)后核對相應表內和字段的數據變化。
在測試完成后,將測試結果寫入到測試用例內相應的位置。
通過使用用例模板工具,在項目開發過程中可完成60%的自動化用例開發,并為之后的冒煙測試提供測試用例,在測試階段完善30%的自動化用例,較之前減少50%以上的用例編寫時間。使用自動化接口測試,在歷史功能的回歸測試和需要多接口交互及數據更改的復雜測試時,減少了80%以上的測試時間。
本文設計了生成測試用例模板所用的工具,以及基于測試用例的自動化接口測試系統,并利用Python語言編程實現了該自動化接口測試系統設計。該自動化接口測試系統可應用于實際網絡游戲測試工作,并能用于解決一些相關問題,具有一定的實際意義。本文介紹了該自動化接口測試系統設計中一些關鍵技術的實現原理,有助于讀者更好地理解和把握該自動化接口測試系統的基本思想和實現過程。
在之后的工作中,隨著被測項目的更新迭代和新的測試理論與技術出現,也可以通過不斷地升級和完善該自動化測試系統,在與現有功能相結合后,達到測試系統持續集成的目的。
參考文獻:
[1]趙家剛,狄光智,吳丹桔.計算機編程導論—Python程序設計[M].北京:人民郵電出版社,2013.10.
[2]Wesley J.Chun著.Python核心編程(第二版)[M].宋吉廣譯.北京:人民郵電出版社,2008.7.
[3]Alex Martelli,Anna Martelli Ravenscroft,David Ascher編.Python Cookbook(第 2 版)中文版[M].高鐵軍譯.北京:人民郵電出版社,2014.10
[4]Ron Patton著,張小松,王鈺,曹躍等譯.軟件測試[M].北京:機械工業出版社,2015,9.
[5]姚礪,束永安.軟件測試自動化關鍵技術的研究[J].安徽大學學報(自然科學版),2003(04).
[6]王世俊.軟件自動化測試框架的研究和實現[D].華東師范大學,2006
[7]王東剛.自動化測試結構論[J].程序員,2009(11).
[8]梁家安.自動化軟件測試技術研究[D].江南大學,2011.
[9]張浩.一種自動化測試系統集成方案的設計與實現[D].東南大學,2015