最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python游戲測(cè)試工具自動(dòng)化遍歷游戲中所有關(guān)卡

 更新時(shí)間:2022年06月21日 11:49:50   作者:特爾斯特  
這篇文章主要為大家介紹了python游戲測(cè)試工具自動(dòng)化遍歷游戲中所有關(guān)卡示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

場(chǎng)景

游戲里有很多關(guān)卡(可能有幾百個(gè)了),理論上每次發(fā)布到外網(wǎng)前都要遍歷各關(guān)卡看看會(huì)不會(huì)有異常,上次就有玩家在打某個(gè)關(guān)卡時(shí)卡住不動(dòng)了,如果每個(gè)關(guān)卡要人工遍歷這樣做會(huì)非常的耗時(shí),所以考慮用自動(dòng)化的方式來(lái)實(shí)現(xiàn)。

思路

游戲的戰(zhàn)斗是有時(shí)間限制的,到了 5 分鐘打不過(guò)就會(huì)判負(fù),勝負(fù)都會(huì)出現(xiàn)結(jié)算面板,用 GA 提供的 find_element_wait 函數(shù)查找這個(gè)結(jié)算面板,從進(jìn)入戰(zhàn)斗到找到了這個(gè)面板 element 就是通關(guān)時(shí)間,如果超過(guò) 5 分鐘了就說(shuō)明被卡住了,最后輸出一張” 關(guān)卡通關(guān)時(shí)間表 “排序看看哪些關(guān)卡通關(guān)時(shí)間>5 分鐘即為有問(wèn)題的關(guān)卡。

實(shí)現(xiàn)細(xì)節(jié)

1.卡住的判定和處理

GAutomator find_element_wait 函數(shù)的說(shuō)明

代碼中設(shè)置 5 秒查一次結(jié)算面板,超過(guò) 60 次其實(shí)已經(jīng)卡住了 。Page.panel_BattleRes 是結(jié)算面板,這里采用 PO 模式把所有的 element 都寫(xiě)入到一個(gè) Page 中。

如果卡住 了游戲會(huì)一直停在哪里,卡住后利用 adb 指令重啟游戲并繼續(xù)測(cè)試下一個(gè)關(guān)卡一直到遍歷整個(gè)關(guān)卡列表。

2.GAutomator 調(diào)用游戲內(nèi)部的 GM 指令

GAutomator 可以把游戲里的 C# 函數(shù)注冊(cè)過(guò)來(lái)然后在 python 中調(diào)用,這是 GA 說(shuō)明文檔相關(guān)部分:

所以把游戲中的 GM 指令方法注冊(cè)過(guò)去再在腳本里調(diào)用,這樣我才能用指令進(jìn)入各關(guān)卡而不會(huì)受到等級(jí)、入口、前置關(guān)卡等限制

unity 中:

python 中:

3.最終輸出的報(bào)告

第一列是關(guān)卡 id,第二列是通關(guān)時(shí)間,100014 這個(gè)關(guān)卡是有問(wèn)題的,因?yàn)橐呀?jīng)超過(guò) 5 分鐘了

詳細(xì)代碼

AutoBattleTest.py 用來(lái)實(shí)現(xiàn)核心邏輯

from testcase.tools import *
from testcase.ExcelTool import ExcelReader,ExcelWriter
from testcase.Page import Page
class AutoBattle:
    def __init__(self,level_excel_path):
        self.start_time=0
        self.levelList=ExcelReader(level_excel_path).read_first_sheet_first_col()
        self.excelWriter =  ExcelWriter()
        print(self.levelList)
    def start_battle(self):
        self.start_time=time.time()
        m_btnStartGame = engine.find_element(Page.btn_BeginFight)
        screen_shot_click(m_btnStartGame)
        #auto fight
        m_autoFight = engine.find_element(Page.btn_AutoFight)
        screen_shot_click(m_autoFight)
    def test_each_level(self):
        for index,level in enumerate(self.levelList):
            print("關(guān)卡id---->"+level)
            engine.call_registered_handler("GoTo", "n"+level) #這里調(diào)用unity里的GM指令
            self.start_battle()
            battleResult = find_element_wait(Page.panel_BattleRes, 65, 5)
            if (battleResult):
                screen_shot_click(battleResult)
                duration = str(int(time.time() - self.start_time))  # 關(guān)卡持續(xù)時(shí)間
                self.excelWriter.write_excel(index, 0, level)  # 第一列寫(xiě)關(guān)卡名
                self.excelWriter.write_excel(index, 1, duration)  # 第二列寫(xiě)通關(guān)時(shí)間
            else:
                duration = str(int(time.time() - self.start_time))  # 關(guān)卡持續(xù)時(shí)間
                self.excelWriter.write_excel(index, 0, level)  # 第一列寫(xiě)關(guān)卡名
                self.excelWriter.write_excel(index, 1, duration)  # 第二列寫(xiě)通關(guān)時(shí)間
                self.restart_game()
                self.default_login()
                find_element_wait(Page.btn_Battle)
        self.excelWriter.save_excel()
    def restart_game(self): #重啟游戲
        os.system("adb shell am force-stop  %s"%Page.package_name)
        time.sleep(2)
        os.system("adb shell am start -n %s/.NativeUnityPlayerActivity"%Page.package_name)
    def default_login(self):#登錄一次后續(xù)直接點(diǎn)擊就可以登錄
        #m_BtnSart2
        start_btn = find_element_wait(Page.btn_LogIn)
        screen_shot_click(start_btn)
if __name__ == "__main__":
    ab = AutoBattle("level.xls")
    ab.test_each_level()

ExcelTool.py 用來(lái)讀寫(xiě)表格

import xlrd
import time
import xlwt
class ExcelReader:
    def __init__(self,excel_path):
        self.excel_path = excel_path;
    def read_first_sheet_first_col(self):
        data = xlrd.open_workbook(self.excel_path)
        st = data.sheet_by_index(0)
        col  = [str(st.cell_value(i, 0)).replace(".0","") for i in range(0, st.nrows)]
        return col
class ExcelWriter:
    def __init__(self):
        self.wb = xlwt.Workbook()
        self.sh = self.wb.add_sheet("關(guān)卡通過(guò)時(shí)間記錄")
        self.cur_col  =0
    def write_excel(self,row ,col,record_str):
        self.sh.write(row, col, record_str)
    def save_excel(self):
        date_string = time.strftime("%Y%m%d%H%M")
        excel_name ="TestResult"+date_string+".xls"
        self.wb.save(excel_name)
if __name__=="__main__":
    ew = ExcelWriter()
    ew.save_excel()

后記

這套腳本可以排查出一進(jìn)入或者中途被卡住或者不結(jié)算被卡住的問(wèn)題,但是如果是某個(gè)怪物的某個(gè)技能必定能導(dǎo)致關(guān)卡卡住,而這個(gè)怪物在放技能之前就被殺了,這種情況這套腳本有概率排查不到。

以上就是python游戲測(cè)試工具自動(dòng)化遍歷游戲中所有關(guān)卡的詳細(xì)內(nèi)容,更多關(guān)于python游戲測(cè)試自動(dòng)化遍歷關(guān)卡的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

清徐县| 大足县| 金门县| 高碑店市| 兴宁市| 芜湖市| 奉贤区| 闻喜县| 深圳市| 晋州市| 商水县| 读书| 新蔡县| 维西| 浦城县| 西宁市| 永嘉县| 青神县| 广安市| 湾仔区| 探索| 顺义区| 云霄县| 长海县| 黄浦区| 托克托县| 本溪市| 敖汉旗| 沙雅县| 江油市| 新安县| 隆化县| 霍州市| 平昌县| 泰顺县| 延安市| 光山县| 板桥市| 阆中市| 榆中县| 河津市|