申明一下,只是在這里拋磚引玉,各位如果有好的方法和建議,歡迎指正。
首先,據我了解,國內的游戲(MMORPG)行業(國外的我不知道哈),幾乎還沒有比較成功的游戲自動化測試體系,或許是我孤陋寡聞吧!有少數公司在做,但是效果都不很明顯,結合我自己的做的一些經歷和實際操作,小小的說說自己的想法。
1.目前市面上的一些測試工具如:lr,wr,qtp什么的不適合做游戲自動化測試,至少我沒找到合適方法。個人理解是因為這個工具實際是通過簡單錄制或定制一些行為來實現自動化測試的,做游戲自動化測試,這些工具有幾個重大缺點:
部署成本高:
自動化體系在server端很難部署,定制行為的時候幾乎不能調用到游戲的接口,無法獲得游戲實際運行的信息,預期結果不方便定制。如果是通過簡單錄制回放的話,效率不如手動操作好,對一些繁瑣的行為,幾乎是不現實的,而且這些工具對tcp/ip協議支持不如http協議好,有興趣的同學可以去研究研究。
效果差強人意:
我之前用lr做了一下游戲自動化,不到一周我就放棄了,后來招了一個lr的新人,我在百般勸說下,他都沒放棄游戲lr的自動化測試,結果3天不到,他也放棄了!游戲自動化測試本質目的是提高測試效率,用lr反而降低了測試效率,那么我們還用lr來干什么呢?這里我也不多說原因了,到后面我會提一下另一種方法的,主要說另一種方法的優勢,而這種方法的優勢恰好是這些工具的劣勢。
2.幾乎所有的游戲在前期架構設計上就沒考慮到游戲自動化測試的需求,所以在游戲后期介入自動化測試幾乎是不現實的。
3.公司沒有足夠的人力物力,或者說項目組就沒有意識到自動化測試的意義,所以也無法開展。
4.測試自身的能力,很多(現在不是幾乎了,有的游戲公司的測試還是很nb的)測試自身能力不足,或者接觸不到游戲代碼或其他需求無法滿足,導致無法進行自動化測試。
接著,我主要說說游戲自動化測試對游戲架構的需求:
首先,如果在一款成熟運營的游戲中,試圖讓測試自動化起來,幾乎是不大現實的。原因不外有二:
1.我要想在游戲世界里刷出一個怪或要取得一個player的信息,如果我們的開發人員沒有暴露接口出來,請問,我們該怎么辦?
2.我們要做一個自動化體系,是我們自己再去開發一個新的系統呢?還是用原來的系統?如果開發一個新系統,那么我可以告訴你,國內幾乎沒有那個項目老大允許你這么做,運營期的游戲,最重要是一個持續穩定,如果你插入你的開發量進去,我可以明確的告訴你,你會完全打亂你老大的計劃。那好,那我們在原來的系統上改吧?對這一點,我相信有經驗的同學都知道,去改別人的代碼的效率遠遠低于自己開發的效率(如果是小改動,可能是達不到自動化的效果的)。
這2個原因是阻礙游戲自動化的主要因素,當然還有其他因素,比如對項目組對測試認識方面等等的問題,這些我不在這里討論,這里只說說技術上的需求。
這一篇,我將會從游戲架構設計上大概談談,游戲自動化對架構的需求,下一篇會說說,成熟運營的游戲自動化可以做些什么。
在項目風格基本確定后,就是程序架構的設計了,如果在這個時候不考慮到測試的一些需求的話,那后期做起來就會很難。
一般來說,游戲設計分3大塊:1.數據庫設計。2游戲邏輯server。3 游戲的邏輯client。這里的server是廣義的server,不同公司的設計是不一樣的,不細分。游戲client就是指平時我們運行的,可以實際“玩”的游戲,運行在我們玩家的pc機上的可執行程序。
對于我們測試來說,其實可以把數據庫獨立出來,數據庫和游戲的交互無非就是存取修改操作。在不考慮的性能情況下,自動化測試可以不考慮數據庫,當然對于數據安全性等的操作其實屬于策略問題。
其實我們實際做的自動化測試主要是游戲server的實際運行和與client的交互。這里再強調一下,自動化的本質是為了提高測試效率,所以我們只讓計算機做他適合做的事情,而不是把所有的測試都交給計算機,那可能就本末倒置了,反而是為了自動化而自動化,沒意義。
設計上要求務必達到:
1低耦合,高內聚
這個能簡化我們實現測試的過程,又能讓我們更準確的定位問題和回歸問題。具體原因這里就不說了,可以去看看軟件設計和測試的一些資料。
2.游戲運行要高透明,游戲運行的對象是可以給定條件獲得,并且運行條件是可編輯的。
這個問題不能太深入,太深入可能公司就要找我麻煩了哈,大家原諒一下。這樣設計的目的就是為了,我們可以定制我們的測試過程和預期結果。
3.通信是是可以設置和編輯的。
其實client與server的交互的本質是通過發送數據包來實現的。我們游戲人員通常說的協議其實是制的一個一個的數據結構,而不是tcp/ip之類的協議。實現這個的目的是我們在部署大量client與server交互的時候不需要運行我們的client,只需要一個發包client就可以了,而不需要弄上幾千幾萬個物理client。
4.所有的接口在發布版本是關閉的。
這個是鑒于某公司之前出現了一次嚴重事故而增加的,之前某公司由于發布失誤,導致外網玩家可以直接編輯游戲運行的一些數據,這個做起來也非常簡單,在server上加一個宏就可以實現:ifdef _Debug define Test endif 就可以了。在編譯發布版本的時候,就不會暴露這些高危數據出來,當然方式有很多,根據自己情況定是最好的。
接著,主要說一下哪些可以用來做自動化測試。
前面我大概說了一下游戲自動化測試的一些現狀需求,這一篇主要談談游戲里面哪些可以做,哪些好做,哪些難做,哪些沒必要做以及一些原因。歡迎拍磚哈,希望大家也談談你們的做法和優點。
我們在做游戲自動化測試之前,我們先假設我們的架構已經設計的足夠好,允許我們能夠通過我們的測試工具,獲取游戲的運行狀態并且修改游戲的狀態。原本打算寫到五就差不多了,后來應一些朋友的要求,我會大概說說游戲架構沒有考慮到自動化測試的時候,自動化測試可以做的一些事情。
原文轉自:http://www.anti-gravitydesign.com