周紹凱,姚礪
(1.東華大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,上海 200051;2.東華大學(xué)計算機(jī)軟件與理論系,上海 200051)
2016年6月,國家新聞出版廣電總局發(fā)布了《關(guān)于移動游戲出版服務(wù)管理的通知》;2016年12月5日,文化部發(fā)布了《關(guān)于規(guī)范網(wǎng)絡(luò)游戲運(yùn)營加強(qiáng)事中事后監(jiān)管工作的通知》。一系列的通知出臺,不斷地為我國的網(wǎng)絡(luò)游戲創(chuàng)造更加良好的市場環(huán)境。
2017年,游戲市場銷售收入已經(jīng)突破2000億元,占據(jù)了整個泛娛樂產(chǎn)業(yè)中四成收入,并且依然處于快速增長階段,市場三年復(fù)合增長率達(dá)到21.2%。中國上市游戲企業(yè)數(shù)量,從2016年底的158家增長到2017年底的185家。
網(wǎng)絡(luò)游戲本質(zhì)上是一套強(qiáng)反饋且有社交功能的意義系統(tǒng),游戲+社交正在以不可忽視的姿態(tài)進(jìn)入人們生活,網(wǎng)絡(luò)游戲也逐漸成為繼文字、圖片、視頻之后的第四媒介。在各個社交平臺上,網(wǎng)絡(luò)游戲已經(jīng)成為了社交的一部分,隨著社交平臺的催化和傳播,其也進(jìn)一步促進(jìn)了網(wǎng)絡(luò)游戲的火熱。
整個市場越發(fā)成熟,網(wǎng)絡(luò)游戲用戶對產(chǎn)品的要求也日趨提高,行業(yè)競爭狀況也日趨激烈。而對游戲企業(yè)而言,提供游戲產(chǎn)品質(zhì)量保證的重要性不言而喻,其直接影響到公司的聲譽(yù)及收益。因此,游戲測試已經(jīng)成為游戲開發(fā)過程中極其重要的一個環(huán)節(jié),也直接決定著游戲產(chǎn)品的最終質(zhì)量。
對于更新迭代頻繁的網(wǎng)絡(luò)游戲,在數(shù)十個版本之后的內(nèi)容會非常繁雜,游戲的測試任務(wù)復(fù)雜、工作量大,對于接口測試、歷史功能回歸測試和操作多角色測試等,采用自動化的接口測試方案就非常必要。
目前通用的接口測試工具如:Jmeter、SoapUI、Post-Man,其在使用初期效率高、對于測試人員入門較容易,但方式固定、擴(kuò)展差、二次開發(fā)困難,難以用于復(fù)雜用例中的接口交互、數(shù)據(jù)更改等操作。
本文提出并實(shí)現(xiàn)了一個用于網(wǎng)絡(luò)游戲的測試用例自動化執(zhí)行的測試系統(tǒng),可以通過獨(dú)立和簡單的測試用例編寫,對復(fù)雜的網(wǎng)絡(luò)游戲項(xiàng)目進(jìn)行自動化接口測試。
對于自動化測試用例的設(shè)計,需要考慮到測試的針對性和用例的可復(fù)用性。本文設(shè)計的測試系統(tǒng)所面向的游戲公司,其已有多款三至五年版本內(nèi)容的線上游戲,積累有大量的測試用例以及所遇到的各種問題,但實(shí)際測試時仍以手工測試為主。本文針對手工測試的成本高及測試覆蓋局限性,基于混合式測試自動化框架思想,提出了以測試用例為驅(qū)動的自動化測試系統(tǒng),能有效提高網(wǎng)絡(luò)游戲的測試效率。
為進(jìn)一步降低該自動化接口測試系統(tǒng)的開發(fā)和使用成本,從開發(fā)維護(hù)和實(shí)際使用兩方面入手。
開發(fā)維護(hù):(1)自動化接口測試系統(tǒng)的開發(fā),結(jié)合游戲公司中已有的工具和腳本進(jìn)行開展,一方面減少開發(fā)時間,另一方面降低使用人員的學(xué)習(xí)成本;(2)開發(fā)生成測試用例模板的工具,通過對游戲公司內(nèi)已有的測試用例進(jìn)行整理,歸類出不同類型的測試用例模板,并結(jié)合后續(xù)的自動化測試進(jìn)行適當(dāng)?shù)恼{(diào)整;(3)獨(dú)立的自動化接口測試執(zhí)行工具,測試用例與測試執(zhí)行工具分離,便于各自的單獨(dú)升級和維護(hù)。
實(shí)際使用:(1)自動化接口測試執(zhí)行工具與測試用例,可任意組合,切換內(nèi)外網(wǎng)環(huán)境、不同通信協(xié)議后進(jìn)行測試;(2)根據(jù)具體游戲項(xiàng)目,調(diào)整被測游戲的IP地址、端口等信息后,便可根據(jù)測試用例對不同的游戲執(zhí)行自動化接口測試;(3)通過對測試執(zhí)行工具的升級,不斷地將新的事件驅(qū)動、關(guān)鍵字驅(qū)動等進(jìn)行持續(xù)集成;(4)通過對用例模板的補(bǔ)充完善,能進(jìn)一步提升測試用例編寫的針對性和覆蓋率。
本文所述的自動化接口測試系統(tǒng),由測試用例模板生成工具、接口測試工具、自動化測試執(zhí)行工具構(gòu)成。其中用例模板生成工具、接口測試工具可獨(dú)立運(yùn)行,自動化測試執(zhí)行工具的使用基于測試用例而實(shí)現(xiàn)。根據(jù)測試用例與測試工具的不同組合,可在內(nèi)外網(wǎng)環(huán)境、不同通信協(xié)議下對網(wǎng)絡(luò)游戲進(jìn)行測試。
根據(jù)網(wǎng)絡(luò)游戲的手工測試過程,而設(shè)計的自動化測試系統(tǒng)執(zhí)行流程,如圖1所示。
自動化測試的執(zhí)行流程:由讀取以Excel形式保存的測試用例開始,根據(jù)需求連接所需測試的游戲服務(wù)器,并查詢或創(chuàng)建測試所需的游戲角色,將測試用例內(nèi)的測試步驟解析成相應(yīng)的測試執(zhí)行腳本,在游戲服務(wù)器內(nèi)執(zhí)行測試后,將測試結(jié)果保存到測試用例內(nèi),待所有測試需求都執(zhí)行后,最終完成自動化測試。
圖1 自動化測試流程圖
為使測試用例能更加靈活和具有針對性,設(shè)計了通用和特殊的兩種測試用例模板。
通用的測試用例模板,是根據(jù)該網(wǎng)絡(luò)游戲項(xiàng)目的測試工作業(yè)務(wù)積累和測試方法,預(yù)先制作并提供一部分的測試用例模板,需求及測試人員僅需對差異內(nèi)容略作修改便可進(jìn)行測試工作,用以完成相似的測試業(yè)務(wù)內(nèi)容,充分體現(xiàn)了測試用例的復(fù)用價值和測試用例模板的實(shí)用價值,對測試用例模板內(nèi)已提供的測試數(shù)據(jù)略作相應(yīng)調(diào)整后即可。
特殊的測試用例模板僅提供填寫的樣例,需要需求及測試人員對用例進(jìn)行完善,用以開展新的測試業(yè)務(wù)執(zhí)行。如該新的測試業(yè)務(wù)和測試用例(特殊的測試用例)有再次利用的價值,會通過將其增加到測試用例數(shù)據(jù)庫中,用以豐富和完善該項(xiàng)目的測試用例。
為使測試用例可自動化執(zhí)行,需要將測試用例中填寫的內(nèi)容,按照一定的格式進(jìn)行填寫。在讀取到測試用例文件之后,會依次解析各個測試用例表格內(nèi)填寫的內(nèi)容,然后將文字轉(zhuǎn)化為相應(yīng)的操作步驟,并在測試信息驗(yàn)證通過后才會執(zhí)行自動測試。
在測試開始前,從測試用例的Excel文件內(nèi)讀取所測試游戲的信息和測試所需執(zhí)行的步驟(如Python的openpyxl模塊)。測試用例的數(shù)據(jù)轉(zhuǎn)換,以接口返回值的檢查操作轉(zhuǎn)換為例,測試用例內(nèi)的文字如下:
查看接口返回值|接口名#
發(fā)接口|接口名#
核對接口返回值|接口名#參數(shù)1;參數(shù)2|返回值字段名#預(yù)期值
測試執(zhí)行工具中,將其轉(zhuǎn)化為執(zhí)行操作的代碼如下:
在測試過程中,模仿客戶端進(jìn)而實(shí)現(xiàn)與服務(wù)器的接口交互操作。根據(jù)測試需要的不同,提供了http與socket兩種與服務(wù)器連接通信的方式(如Python的httplib、urllib、socket模塊)。
在測試驗(yàn)證時,通過單元測試的執(zhí)行工具,對服務(wù)器返回的接口信息進(jìn)行驗(yàn)證、通過SSH(Secure Shell)的方式進(jìn)入服務(wù)器(如Python的Paramiko模塊)對操作結(jié)果日志進(jìn)行驗(yàn)證、連入游戲服數(shù)據(jù)庫(如python的MySQLdb模塊)后核對相應(yīng)表內(nèi)和字段的數(shù)據(jù)變化。
在測試完成后,將測試結(jié)果寫入到測試用例內(nèi)相應(yīng)的位置。
通過使用用例模板工具,在項(xiàng)目開發(fā)過程中可完成60%的自動化用例開發(fā),并為之后的冒煙測試提供測試用例,在測試階段完善30%的自動化用例,較之前減少50%以上的用例編寫時間。使用自動化接口測試,在歷史功能的回歸測試和需要多接口交互及數(shù)據(jù)更改的復(fù)雜測試時,減少了80%以上的測試時間。
本文設(shè)計了生成測試用例模板所用的工具,以及基于測試用例的自動化接口測試系統(tǒng),并利用Python語言編程實(shí)現(xiàn)了該自動化接口測試系統(tǒng)設(shè)計。該自動化接口測試系統(tǒng)可應(yīng)用于實(shí)際網(wǎng)絡(luò)游戲測試工作,并能用于解決一些相關(guān)問題,具有一定的實(shí)際意義。本文介紹了該自動化接口測試系統(tǒng)設(shè)計中一些關(guān)鍵技術(shù)的實(shí)現(xiàn)原理,有助于讀者更好地理解和把握該自動化接口測試系統(tǒng)的基本思想和實(shí)現(xiàn)過程。
在之后的工作中,隨著被測項(xiàng)目的更新迭代和新的測試?yán)碚撆c技術(shù)出現(xiàn),也可以通過不斷地升級和完善該自動化測試系統(tǒng),在與現(xiàn)有功能相結(jié)合后,達(dá)到測試系統(tǒng)持續(xù)集成的目的。
參考文獻(xiàn):
[1]趙家剛,狄光智,吳丹桔.計算機(jī)編程導(dǎo)論—Python程序設(shè)計[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].北京:機(jī)械工業(yè)出版社,2015,9.
[5]姚礪,束永安.軟件測試自動化關(guān)鍵技術(shù)的研究[J].安徽大學(xué)學(xué)報(自然科學(xué)版),2003(04).
[6]王世俊.軟件自動化測試框架的研究和實(shí)現(xiàn)[D].華東師范大學(xué),2006
[7]王東剛.自動化測試結(jié)構(gòu)論[J].程序員,2009(11).
[8]梁家安.自動化軟件測試技術(shù)研究[D].江南大學(xué),2011.
[9]張浩.一種自動化測試系統(tǒng)集成方案的設(shè)計與實(shí)現(xiàn)[D].東南大學(xué),2015