前言
游戲的協議測試,如果只是單協議的測試,只需要用socket/websocket進行協議收發即可。如果要以框架的形式實現,主要需要解決協議返回不確定這個問題,這里可以提供一個思路,當然,這只是我個人的見解,僅供參考,思路如下:
游戲的協議測試,其目的主要是為了防止出現后端邏輯處理不當被玩家通過修改發送協議手段進行刷貨幣、刷道具等操作的問題。所以我們的協議測試,主要是集中在貨幣變更、獎勵獲取等處,其中獎勵發放的形式主要有兩種,其一為直接進入背包,其二為通過郵件發放,因此,我們需要監控的協議有,
一、背包新增道具;
二、背包道具數量變更;
三、新郵件的獲取;
四、玩家屬性變化(大部分的游戲中,其玩家貨幣直接以屬性的形式記錄);
五、發送協議的返回
例子1:發送協議,內容為貨幣充足購買次數充足情況下購買1個商城道具,我們的預期顯而易見,收到的返回協議有:一、發送協議的返回;二、背包內道具的變化(新增或數量更改);三、玩家屬性的變化(對應貨幣減少)。
例子2:發送協議,內容為貨幣充足購買次數充足情況下購買0個商城道具,其返回內容為:無返回
上面已經監控了五個主要協議,程序在收到返回后,將返回狀態記錄為“服務器返回數據”並將收到的協議內容記錄並顯現出來,以方便我們查看返回內容是否符合預期;若無返回,則將返回狀態記錄為“服務器未返回數據”。這便是單協議的測試框架思路。
協議自動化
通過asyncio+socket/websoket實現后端邏輯,asyncio的異步、並發、協程對於自動化來說非常實用,可以在完成自動化的同時順帶實現模擬多用戶同時在線的效果,具體的庫代碼可以自行去google上查閱
async def main(firstusr, lastusr): if isinstance(firstusr, int): if isinstance(lastusr, int): for i in range(firstusr, lastusr): # your program ... if __name__ == '__main__': asyncio.run(main(firstusr, lastusr))
后端邏輯中的思路也很簡單,便是收到協議A->發送協議B(或B+C多重協議組合),因為每次測試角色登錄是必不可以少的行為,可以直接將登錄的協議收發寫進框架里面
由於發送協議的內容是不定的,可能需要根據不同的標識發送不同的協議,也有可能是根據一個標識發送多個協議,如果將全部的標識和協議都設置為測試人員去創建,會顯得太過於繁瑣,違背了簡捷的原則,因此需要將多條測試用例合並以提升用例創建的效率,以下,便是一個可以參考的思路
其中TESTPROJECT行,為整個自動化測試用例的用例名。
其子行為自動化測試的操作,即發送的協議,內容主要有收到的協議標識(協議號系統號)、發送的協議標識(協議號系統號)、具體的協議內容、等待時間。
子行的子行,為相同協議的合並,內容主要有具體的協議內容、等待時間。
舉個例子,比如說玩家行走到某一地點后釋放技能的自動化測試,首先在拿到服務器發給程序的協議標識時(如協議0,6),需要在發送一個目的地坐標后(如協議10,2),不停地發送當前坐標給后端進行坐標更新,這不停的定時發送新坐標,就可以在子行的子行中添加,在到達目的坐標時收到到達的協議(如協議10,3),發送釋放技能的協議(如11,1),這樣便省去了輸入協議標識的時間,用例也內容也更簡潔可觀。
Creator中的5為等待時間,由於頁面設計的缺陷,空間不足,只能先將等待時間放於此處,后續再進行改進
以上,便是關於游戲協議測試的自動化一部分見解,關於前后端如何交互的問題,便等后面有機會再寫了,咕咕咕