qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          Webgame自動(dòng)化測(cè)試之旅

           最近兩個(gè)項(xiàng)目中游蕩,首次接觸facebook游戲的測(cè)試,感觸還是很多的。與之前的web2.0的互聯(lián)網(wǎng)應(yīng)用相比,webgame的測(cè)試更多樣,也更加的復(fù)雜。留下點(diǎn)Memory,對(duì)Webgame進(jìn)行自動(dòng)化測(cè)試是挑戰(zhàn)新的開(kāi)始。 根據(jù)游戲整體架構(gòu)的不同,在協(xié)議測(cè)試方面還是可以有很大的發(fā)展余地的。比較流行的facebook游戲進(jìn)行自動(dòng)化測(cè)試的還是比較多的,不過(guò)由于游戲UI方面的修改比較的多,所以在一開(kāi)始選取好的測(cè)試方法是很重要的。

            在游戲測(cè)試中用的比較多的是類似于按鍵精靈的這樣的方式hook,利用windows api進(jìn)行屏幕點(diǎn)的操作,以下是比較簡(jiǎn)單的實(shí)現(xiàn),是通過(guò)autoit3對(duì)游戲FARMVILLE進(jìn)行的操作,點(diǎn)擊這里下載。

            自動(dòng)化的實(shí)現(xiàn)主要是將FARM中的田地size化,通過(guò)在1280x800的屏幕中,進(jìn)行模擬對(duì)屏幕點(diǎn)的操作。實(shí)際效果還是很棒的,測(cè)試時(shí)遇到修改的情況的話可以通過(guò)修改excel中FARM的田地參數(shù)進(jìn)行修改。可以使用更多的API進(jìn)行定時(shí),定點(diǎn)的收割。

            以上提到的是使用windows api半hook的方式進(jìn)行的自動(dòng)化測(cè)試。

            我們還可以通過(guò)真實(shí)的tcp,http或者h(yuǎn)ttps的協(xié)議來(lái)進(jìn)行相關(guān)的自動(dòng)化測(cè)試。

            主要看在facebook中的游戲整體架構(gòu),使用flash前臺(tái)通過(guò)json或者amf協(xié)議進(jìn)行協(xié)議發(fā)送的話可以利用python的pyamf或者 perl的amf3解析包解析后進(jìn)行協(xié)議層的自動(dòng)化測(cè)試,這樣可以減輕前段UI測(cè)試的壓力,一般游戲的UI測(cè)試用例非常的多,很多涉及購(gòu)買(mǎi)等操作的可以利 用協(xié)議自動(dòng)化測(cè)試進(jìn)行。

            flash的自動(dòng)化測(cè)試可以分為UI層面的測(cè)試及協(xié)議層面的測(cè)試。

            flash的UI層面的測(cè)試:

            UI層面的測(cè)試建議在基本UI及核心玩法已經(jīng)確定的情況下運(yùn)用,這樣比較有實(shí)效性,返工率比較低。

            主要實(shí)現(xiàn)的手法之前的Jason已經(jīng)介紹過(guò)了,windows hook技術(shù)及Browsers本身的特性。

            關(guān)于Browers本身的特性,這里需要提下iMacros這個(gè)在FF中的插件,iMacros插件版不支持flash的自動(dòng)化,pro版可以通過(guò)代碼實(shí)現(xiàn)很多的邏輯性操作。

            Pro版實(shí)現(xiàn)flash自動(dòng)化的效果也可分為屏幕定位及元素定位的方法,在整體實(shí)現(xiàn)上還是很有效果的。

            flash的協(xié)議層面測(cè)試:

            協(xié)議層面的測(cè)試做自動(dòng)化測(cè)試的效果比較好,使用性比較高。主要的做法為,通過(guò)各種編程手段及輔助工具(http watch或者charles)來(lái)共同實(shí)現(xiàn)。

            簡(jiǎn)單介紹下python下的framework:

            首先需要python的pyamf包,可以通過(guò)這里來(lái)安裝。

            之后我們需要Mechanize包,這是發(fā)送http及https包比較easy的類。

            通過(guò)已有的python test framework框架將測(cè)試用例變量化,最后輸出報(bào)告格式化,這樣整體的測(cè)試框架就出來(lái)了。

            做協(xié)議測(cè)試的另一個(gè)方面是驗(yàn)證UI無(wú)法放松的邊界值對(duì)后臺(tái)邏輯的影響,很多游戲的失敗就是因?yàn)檫@個(gè)原因。

            pythonPyamf 解析包是對(duì)amf協(xié)議的解析利器,可以使你輕松的實(shí)現(xiàn)類似于對(duì)html-text的操作,我們也可以利用Mechanize來(lái)進(jìn)行相應(yīng)的協(xié)議自動(dòng)化測(cè)試。

            Pyamf在協(xié)議測(cè)試中我們主要需要用到的類有三類:

            1、amf3協(xié)議包體類:

            envelope = pyamf.remoting.Envelope(amfVersion=3)

            產(chǎn)生的envelope對(duì)象就是之后對(duì)你需要傳遞數(shù)據(jù)的封裝對(duì)象。

            2、pyamf amf3協(xié)議的轉(zhuǎn)換類:

            message = pyamf.remoting.encode(envelope)

            產(chǎn)生的message 就可以利用urllib2.Request進(jìn)行傳遞了。

            3、pyamf amf3協(xié)議的解碼類:

            res = urllib2.urlopen(req);

            content = res.read();

            content = pyamf.remoting.decode(content)

            這里最后產(chǎn)生的content就是返回amf3整體解析好的數(shù)據(jù),可以根據(jù)需要將返回值進(jìn)行解析,返回值可能是list{list{……},”jason”=jason},可以根據(jù)需要最后做相應(yīng)的assert。更多pyamf類相關(guān)信息,查詢這里。

            之前介紹了如何進(jìn)行webgame自動(dòng)化測(cè)試的 思路及針對(duì)flash進(jìn)行的自動(dòng)化測(cè)試的框架。在對(duì)游戲進(jìn)行自動(dòng)化測(cè)試的時(shí)候,總是會(huì)思考大部分的致命BUG都來(lái)源于隨機(jī)的操作,那么我們?nèi)绾芜M(jìn)行這些方 面的自動(dòng)化測(cè)試呢。這時(shí)FUZZ模糊的思想又體現(xiàn)到我們的面前,我們可以將需要生成的測(cè)試用例交給COMPUTER來(lái)自動(dòng)生成,并且自動(dòng)執(zhí)行得到相應(yīng)的報(bào) 告,整體FUZZ模糊測(cè)試的概念就比較清晰了。

            我們主要使用的是模糊測(cè)試中的自動(dòng)協(xié)議生成測(cè)試并與協(xié)議測(cè)試相結(jié)合進(jìn)行自動(dòng)化測(cè)試。

            利用pairwise的思想進(jìn)行模糊測(cè)試。

            我們需要考慮的模糊因素有以下幾點(diǎn)。

            1、各種類型的對(duì)象的模糊參數(shù)設(shè)計(jì),模糊參數(shù)默認(rèn)值。

            2、組合參數(shù)對(duì)象的順序模糊。

            3、非正常類型的參數(shù)模糊,針對(duì)XSS。

            利用設(shè)計(jì)的用例組合進(jìn)行窮舉算法生成相應(yīng)的用例。

            以下以最簡(jiǎn)單的用例做個(gè)實(shí)例:假設(shè)需要參數(shù):”id=12&Goodid=12300&name=jason”。

            針對(duì)ID的設(shè)計(jì)可以為{-65536,-1,0,12,65536},針對(duì)Goodid的設(shè)計(jì)可以為 {-65536,-1,0,12300,65536},針對(duì)name的設(shè)計(jì)可以為{jason,null,None,”",…………},針對(duì)參數(shù)順序 {(id,goodid,name),(id,name,goodid)……}

            根據(jù)上面的測(cè)試用例集合自動(dòng)產(chǎn)生相應(yīng)的測(cè)試用例,然后進(jìn)行相應(yīng)的協(xié)議自動(dòng)化測(cè)試。當(dāng)然這里設(shè)計(jì)的用例不完善僅供參考思路。

            模糊測(cè)試的使用可以借助很多已有的測(cè)試用例類,類似之前Jason介紹的sulley一樣,它的用例庫(kù)比較的全,這樣測(cè)試覆蓋率會(huì)比較高。



          posted on 2012-11-05 10:04 順其自然EVO 閱讀(439) 評(píng)論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動(dòng)化測(cè)試學(xué)習(xí)

          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 青河县| 建平县| 青神县| 都兰县| 博湖县| 湛江市| 漳州市| 都匀市| 哈密市| 恭城| 武乡县| 新沂市| 获嘉县| 蚌埠市| 唐山市| 山东| 甘泉县| 高密市| 平潭县| 图片| 鹤峰县| 济宁市| 方正县| 霸州市| 上林县| 襄汾县| 玉门市| 丹棱县| 阿鲁科尔沁旗| 德州市| 伊金霍洛旗| 高台县| 台州市| 大渡口区| 博野县| 婺源县| 汝城县| 博兴县| 叙永县| 潮安县| 竹溪县|