Python游戲測試工具自動化遍歷游戲中所有關卡

場景

游戲里有很多關卡(可能有幾百個了),理論上每次發布到外網前都要遍歷各關卡看看會不會有異常,上次就有玩家在打某個關卡時卡住不動了,如果每個關卡要人工遍歷這樣做會非常的耗時,所以考慮用自動化的方式來實現。

思路

游戲的戰斗是有時間限制的,到了 5 分鐘打不過就會判負,勝負都會出現結算面板,用 GA 提供的 find_element_wait 函數查找這個結算面板,從進入戰斗到找到了這個面板 element 就是通關時間,如果超過 5 分鐘了就說明被卡住了,最后輸出一張” 關卡通關時間表 “排序看看哪些關卡通關時間>5 分鐘即為有問題的關卡。

實現細節

1.卡住的判定和處理

GAutomator find_element_wait 函數的說明

代碼中設置 5 秒查一次結算面板,超過 60 次其實已經卡住了 。Page.panel_BattleRes 是結算面板,這里采用 PO 模式把所有的 element 都寫入到一個 Page 中。

如果卡住 了游戲會一直停在哪里,卡住后利用 adb 指令重啟游戲并繼續測試下一個關卡一直到遍歷整個關卡列表。

2.GAutomator 調用游戲內部的 GM 指令

GAutomator 可以把游戲里的 C# 函數注冊過來然后在 python 中調用,這是 GA 說明文檔相關部分:

所以把游戲中的 GM 指令方法注冊過去再在腳本里調用,這樣我才能用指令進入各關卡而不會受到等級、入口、前置關卡等限制

unity 中:

python 中:

3.最終輸出的報告

第一列是關卡 id,第二列是通關時間,100014 這個關卡是有問題的,因為已經超過 5 分鐘了

詳細代碼

AutoBattleTest.py 用來實現核心邏輯

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

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("關卡id---->"+level)

????????????engine.call_registered_handler("GoTo", "n"+level) #這里調用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))? # 關卡持續時間

????????????????self.excelWriter.write_excel(index, 0, level)? # 第一列寫關卡名

????????????????self.excelWriter.write_excel(index, 1, duration)? # 第二列寫通關時間

????????????else:

????????????????duration = str(int(time.time() - self.start_time))? # 關卡持續時間

????????????????self.excelWriter.write_excel(index, 0, level)? # 第一列寫關卡名

????????????????self.excelWriter.write_excel(index, 1, duration)? # 第二列寫通關時間

????????????????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):#登錄一次后續直接點擊就可以登錄

????????#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 用來讀寫表格

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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("關卡通過時間記錄")

????????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()

后記

這套腳本可以排查出一進入或者中途被卡住或者不結算被卡住的問題,但是如果是某個怪物的某個技能必定能導致關卡卡住,而這個怪物在放技能之前就被殺了,這種情況這套腳本有概率排查不到。

?現在我也找了很多測試的朋友,做了一個分享技術的交流群,共享了很多我們收集的技術文檔和視頻教程。
如果你不想再體驗自學時找不到資源,沒人解答問題,堅持幾天便放棄的感受
可以加入我們一起交流。而且還有很多在自動化,性能,安全,測試開發等等方面有一定建樹的技術大牛
分享他們的經驗,還會分享很多直播講座和技術沙龍
可以免費學習!劃重點!開源的!!!
qq群號:485187702【暗號:csdn11】

最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!?希望能幫助到你!【100%無套路免費領取】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206978.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言第十六集(后續)(結構體)

1.匿名結構體(即不寫結構體名)只能用一次, 而且匿名結構體寫法特別危險 兩個匿名結構體盡管內容完全相同,但編譯器仍然認為二位是不相同的類型 結構的特殊聲明搜 2.結構體自己給自己里面包含一個結構體變量((此結構體就是當前所處的這個結構體))指針是沒有問題的,但是 結構…

AI專題報告:2022年中國人工智能產業研究報告

今天分享的AI系列深度研究報告:《AI專題報告:2022年中國人工智能產業研究報告》。 (報告出品方:艾瑞咨詢) 報告共計:112頁 人工智能參與社會建設的千行百業 價值性、通用性、效率化為產業發展戰略方向 …

淘寶API接口系列丨商品詳情數據接口丨關鍵詞搜索商品列表接口丨商品評論,銷量接口

要對接淘寶API接口,可以按照以下步驟進行操作: 注冊成為淘寶開放平臺開發者,并創建一個應用。在應用創建頁面,需要填寫應用的名稱、描述等信息,并設置應用的API權限等級。獲取App Key和App Secret。在應用創建后&…

淘寶商品詳情:獲取海量優質商品信息

淘寶商品詳情接口,也稱為淘寶商品詳情API,是一個用于獲取淘寶商品詳情的接口。它可以幫助開發者快速獲取淘寶商品信息,從而構建自己的電商應用程序。 在開始使用淘寶商品詳情接口之前,首先需要了解以下幾個概念和步驟&#xff1a…

jira創建用例,與任務關聯

項目用的jira,但之前的用例放在禪道上,或者歸檔于svn,都不是很好用,所以研究了下jira的用法 1、下載插件: synapseRT - Test management and QA in JIRA 完成后在tab會多出一個test 2、常用的功能 1、建立用例&#…

【華為OD題庫-081】最長的元音子串長度-Java

題目 題目描述: 定義當一個字符串只有元音字母一(a,e,i,o,u,A,E,l,O,U)組成, 稱為元音字符串,現給定一個字符串,請找出其中最長的元音字符串,并返回其長度,如果找不到請返回0, 字符串中任意一個連續字符組成…

Gitlab+GitlabRunner搭建CICD自動化流水線將應用部署上Kubernetes

文章目錄 安裝Gitlab服務器準備安裝版本安裝依賴和暴露端口安裝Gitlab修改Gitlab配置文件訪問Gitlab 安裝Gitlab Runner服務器準備安裝版本安裝依賴安裝Gitlab Runner安裝打包工具安裝docker安裝java17安裝maven 注冊Gitlab Runner 搭建自動化部署準備SpringBoot項目添加一個Co…

驗證碼的多種生成策略

&#x1f60a; 作者&#xff1a; 瓶蓋子io &#x1f496; 主頁&#xff1a; 瓶蓋子io-CSDN博客 第一種 a.導入依賴 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</ver…

【數據結構】字典樹(Trie樹)算法總結

知識概覽 Trie&#xff1a;高效地存儲和查找字符串集合的數據結構數字、漢字可以用二進制位來存 例題展示 題目鏈接 Trie字符串統計&#xff1a; https://www.acwing.com/problem/content/837/ 代碼 #include <cstdio>const int N 100010;int son[N][26], cnt[N],…

zxjy003- Spring Cloud后端工程搭建

1、創建 sprigboot 工程 guli-parent groupId &#xff1a; com.atguigu artifactId &#xff1a; guli-parent 2.刪除src目錄 3.配置pom.xml 修改版本為 &#xff1a;2.2.1.RELEASE<artifactId> 節點后面添加 pom類型 全部依賴&#xff0c;復制下面的即可&#xff0c…

素材創作平臺,解決企業素材供給問題

企業對于高質量素材的需求日益增長。無論是為了提升品牌形象&#xff0c;還是為了推動產品銷售&#xff0c;都需要大量的專業設計素材。然而&#xff0c;素材的獲取、設計和定制往往是一項耗時耗力的工作。這時&#xff0c;美攝科技素材創作平臺應運而生&#xff0c;為企業提供…

LeetCode [中等]矩陣置零

73. 矩陣置零 - 力扣&#xff08;LeetCode&#xff09; 暴力解法 用兩個標記數組分別記錄每一行和每一列是否有零出現。 遍歷該數組一次&#xff0c;如果某個元素為 0&#xff0c;那么就將該元素所在的行和列所對應標記數組的位置置為 true。再次遍歷該數組&#xff0c;用標…

從0到1,手把手帶你開發截圖工具ScreenCap------001實現基本的截圖功能

ScreenCap---Version&#xff1a;001 說明 從0到1&#xff0c;手把手帶你開發windows端的截屏軟件ScreenCap 當前版本&#xff1a;ScreenCap---001 支持全屏截圖 支持鼠標拖動截圖區域 支持拖拽截圖 支持保存全屏截圖 支持另存截圖到其他位置 GitHub 倉庫master下的Scr…

人工智能技術在數據治理中的一些思考

隨著企業信息化系統的快速建設&#xff0c;以及物聯網的規模化的應用&#xff0c;企業數據規模快速增長&#xff0c;與之同時企業數據的治理模式仍然以傳統的治理方式為主&#xff0c;ChatGPT等人工智能的崛起正深刻改變著數據治理的思路&#xff0c;如何將AI技術引入企業數據治…

C++新經典模板與泛型編程:用成員函數重載實現std::is_convertible

用成員函數重載實現is_convertible C標準庫中提供的可變參類模板std::is_convertible&#xff0c;這個類模板的主要能力是判斷能否從某個類型隱式地轉換到另一個類型&#xff0c;返回的是一個布爾值true或false。例如&#xff0c;一般的從int轉換成float或從float轉換成int&am…

使用Plex結合cpolar搭建本地私人媒體站并實現遠程訪問

文章目錄 1.前言2. Plex網站搭建2.1 Plex下載和安裝2.2 Plex網頁測試2.3 cpolar的安裝和注冊 3. 本地網頁發布3.1 Cpolar云端設置3.2 Cpolar本地設置 4. 公網訪問測試5. 結語 1.前言 用手機或者平板電腦看視頻&#xff0c;已經算是生活中稀松平常的場景了&#xff0c;特別是各…

劇本殺小程序搭建:打造線上劇本殺新體驗

劇本殺是一款以角色扮演為主的游戲&#xff0c;一度成為了年輕人的最喜愛的社交游戲。在劇本殺市場需求下&#xff0c;劇本殺規模也迅速上升。今年第一季度&#xff0c;劇本殺市場規模環比增長47%&#xff0c;市場整體消費水平逐漸呈上升趨勢。 隨著劇本殺的不斷發展&#xff…

echarts繪制一個環形圖2

其他echarts&#xff1a; echarts繪制一個環形圖 echarts繪制一個柱狀圖&#xff0c;柱狀折線圖 echarts繪制一個餅圖 效果&#xff1a; 組件代碼&#xff1a; <template><div class"wrapper"><div ref"doughnutChart2" id"dough…

ORACLE數據庫實驗總集 實驗六 SQL 語句應用

一、 實驗目的 &#xff08;1&#xff09; 掌握數據的插入&#xff08;INSERT&#xff09;、 修改&#xff08;UPDATE&#xff09; 和刪除&#xff08;DELETE&#xff09; 操作。 &#xff08;2&#xff09; 掌握不同類型的數據查詢&#xff08;SELECT&#xff09; 操作。 二、…

阿里滴滴之后,騰訊視頻也崩了!網友追問:下一個是誰?

繼滴滴“崩了”一夜后&#xff0c;剛過去不到一周時間&#xff0c;互聯網“崩了”連續劇又迎來了續集。 就在剛剛&#xff0c;也是晚間時分&#xff0c;網友曝出騰訊視頻崩了&#xff0c;不能追劇了。接著&#xff0c;騰訊視頻官方便現身回應&#xff0c;坐實了傳聞。 還是同…