python游戏测试工具自动化遍历游戏中所有关卡

目录
  • 场景
  • 思路
  • 实现细节
    • 1.卡住的判定和处理
    • 2.GAutomator 调用游戏内部的 GM 指令
      • unity 中:
      • python 中:
    • 3.最终输出的报告
  • 详细代码
    • AutoBattleTest.py 用来实现核心逻辑
    • ExcelTool.py 用来读写表格
  • 后记

场景

游戏里有很多关卡(可能有几百个了),理论上每次发布到外网前都要遍历各关卡看看会不会有异常,上次就有玩家在打某个关卡时卡住不动了,如果每个关卡要人工遍历这样做会非常的耗时,所以考虑用自动化的方式来实现。

思路

游戏的战斗是有时间限制的,到了 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 用来实现核心逻辑

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 用来读写表格

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

后记

这套脚本可以排查出一进入或者中途被卡住或者不结算被卡住的问题,但是如果是某个怪物的某个技能必定能导致关卡卡住,而这个怪物在放技能之前就被杀了,这种情况这套脚本有概率排查不到。

以上就是python游戏测试工具自动化遍历游戏中所有关卡的详细内容,更多关于python游戏测试自动化遍历关卡的资料请关注我们其它相关文章!

(0)

相关推荐

  • Appium+Python+pytest自动化测试框架的实战

    菜鸟一枚,写的不好勿喷,大家一起学习 先简单介绍一下目录,再贴一些代码,代码里有注释 Basic目录下写的是一些公共的方法,Data目录下写的是测试数据,image存的是测试失败截图,Log日志文件,Page测试的定位元素,report测试报告,Test测试用例,pytest.ini是pytest启动配置文件,requirements.txt需要安装的py模块,run.py运行文件 Basic/base.py 里面封装了 一些方法,元素的点击,输入,查找,还有一些自己需要的公共方法也封装在里面,

  • python Airtest自动化测试工具的的使用

    目录 Airtest的官网介绍项目构成 如何上手? 一.安装 二.使用 三.在本地环境中使用及遇到的问题 1.使用"pip install airtest" 进行安装 2.IDE连接不存在设备或被占用设备容易假死 3. 假死期间关闭IDE会造成adb驻留 4.尝试连接不存在设备时,即使设备是不存在的也会加入列表 四.最后啰嗦几句 Airtest全称AirtestProject,是由网易游戏推出的一款自动化测试框架,在软件测试的时候使用到了该框架.这里记录一下安装.使用和遇到的坑的问题…

  • Python与Appium实现手机APP自动化测试的示例代码

    目录 1.什么是Appium 2.启动一个app自动化程序的步骤 3.appium服务介绍 4. appium客户端使用 5.adb的使用 6.Appium启动过程分析 1.什么是Appium appium是一个开源的测试自动化框架,可以与原生的.混合的和移动的web应用程序一直使用.它使用WebDriver协议驱动IOS(内置的测试引擎xcuitest).Android(uiautomator2,Espresso)和Windows应用程序 原生应用程序:安卓程序是用JAVA或kotlin开发出

  • python+appium实现自动化测试的示例代码

    目录 1.什么是Appium 2.启动一个app自动化程序的步骤 3.appium服务介绍 4. appium客户端使用 5.adb的使用 6.Appium启动过程分析 1.什么是Appium appium是一个开源的测试自动化框架,可以与原生的.混合的和移动的web应用程序一直使用.它使用WebDriver协议驱动IOS(内置的测试引擎xcuitest).Android(uiautomator2,Espresso)和Windows应用程序 原生应用程序:安卓程序是用JAVA或kotlin开发出

  • python+appium自动化测试之如何控制App的启动和退出

    目录 一.启动app 二.退出App 三.appium实现原理 四.如何获取deviceName? 五.如何获取apk的appActivity和appPackage? 由于本人使用的是Android设备做自动化测试,所以以下内容均基于Android系统做出的整理 一.启动app 启动app需要设置Capability参数,而Capability参数放在Desired Capalibity中,Desired Capalibity告诉Appium想要的自动化平台和应用程序,这是一组键值对,主要是用于

  • Python + selenium 自动化测试框架详解

    目录 自动化测试框架 1.基础层(通用层) 2.功能层(页面层) 3.业务层 4.用例层 4层框架对应的项目工程 总结 自动化测试框架 项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里. 写通用的代码的. 其他3层想要的话,就可以直接调用. 例如: 读取测试数据的代码,读取配置信息的代码:截图的代码的,定位元素的代码等等 2.功能层(页面层) 功能层: pages 封装页面的. 把页面封装成类.类中包含:属性和方法 把页面上的界面元素定义成类的属

  • python游戏测试工具自动化遍历游戏中所有关卡

    目录 场景 思路 实现细节 1.卡住的判定和处理 2.GAutomator 调用游戏内部的 GM 指令 unity 中: python 中: 3.最终输出的报告 详细代码 AutoBattleTest.py 用来实现核心逻辑 ExcelTool.py 用来读写表格 后记 场景 游戏里有很多关卡(可能有几百个了),理论上每次发布到外网前都要遍历各关卡看看会不会有异常,上次就有玩家在打某个关卡时卡住不动了,如果每个关卡要人工遍历这样做会非常的耗时,所以考虑用自动化的方式来实现. 思路 游戏的战斗是有

  • python实现测试工具(二)——简单的ui测试工具

    本系列教程使用的python版本是3.6.3. 背景 这一节我们实现一个简单的ui测试工具. 该工具的作用是访问某个页面,然后根据css选择器去定位页面上的元素,最后判断页面上元素的个数与我们的预期是否相符. 举一个具体的例子,比如我们去访问www.itest.info这个页面,我们需要判断页面上class = thumbnail-img的元素存在,并且有4个.因为每一个元素代表一门课程,所以这个断言的意思是重定向科技主页上应该有4门主要课程. 视频讲解在这里. 工具设计 我们设计一个命令行工具

  • python实现测试工具(一)——命令行发送get请求

    本系列教程我们将使用python实现一些简单的测试工具,为了尽可能的简单,我们的工具以命令行工具为主. 本系列教程使用的python版本是3.6.3. 背景 这一节我们实现简单的命令行发送get请求的工具,使用方式如下: python get.py www.v2ex.com/api/nodes/show.json\?name\=python 接口地址: http://www.v2ex.com/api/nodes/show.json?name=python 状态码: 200 Headers: Da

  • Selenium(Python web测试工具)基本用法详解

    本文实例讲述了Selenium基本用法.分享给大家供大家参考,具体如下: Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等.这个工具的主要功能包括:测试与浏览器的兼容性--测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上.测试系统功能--创建回归测试检验软件功能和用户需求.

  • 详解Python中的测试工具

    当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试过程,比如: unittest: 一个通用的测试框架: doctest: 一个更简单的模块,是为检查文档而设计的,但也非常适合用来编写单元测试. 下面,笔者将会简单介绍这两个模块在测试中的应用. doctest doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝试执行并验证

  • Python游戏开发之魔塔小游戏的实现

    前言 这一期我们继续完善我们的魔塔小游戏. 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本: 3.7.4 相关模块: cpgames模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 本期我们实现一些之前还没实现的功能,以及做一些功能优化(部分内容为了测试方便,我会把人物设置成无敌状态).首先,是拾取物品等游戏事件的提示效果,核心代码如下: '''游戏事件提示''' def showinfo(self, s

  • 教你用Python写一个植物大战僵尸小游戏

    一.前言 上次写了一个俄罗斯方块,感觉好像大家都看懂了,这次就更新一个植物大战僵尸吧 二.引入模块 import pygame import random 三.完整代码 配置图片地址 IMAGE_PATH = 'imgs/' 设置页面宽高 scrrr_width = 800 scrrr_height = 560 创建控制游戏结束的状态 GAMEOVER = False 图片加载报错处理 LOG = '文件:{}中的方法:{}出错'.format(__file__, __name__) 创建地图类

  • 利用Python模拟谷歌的小恐龙游戏

    目录 前言 开发工具 环境搭建 先睹为快 代码介绍 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 谷歌流量器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏". (如果想要直接进行游戏,可以在地址栏输入:chrome://dino) 今天我们就来给大家演示下,用Python来自己做一个仿制的"小恐龙游戏"! 废话不多说,

  • Python Pygame实战之塔防游戏的实现

    目录 一.环境要求 二.游戏介绍 1.游戏目标 2.先上游戏效果图 三.完整开发流程 1.项目主结构 2.详细配置 3.定义敌人.塔楼.子弹的类 4.游戏开始:选择难度地图 5.游戏开始界面 6.游戏运行 7.游戏暂停 8.游戏结束及分数 9.引入音频.图片.地图.难度json 四.游戏启动方法 一.环境要求 windows系统,python3.6+ 安装模块 pip install pyqt5 pip install pygame 二.游戏介绍 1.游戏目标 按照关卡,设计不同的塔防地图(博主

  • Python+Turtle制作海龟迷宫小游戏

    目录 导语 一.简介 1.什么是Turtle 2.怎么玩转Turtle 3.画布的设置 4.设置背景/画布颜色 二.Turtle的画笔设置 1.turtle绘图的基本方法 三.最后的案例Turtle小游戏 1.设计思路游戏规则 2.准备环节 3.正式敲代码 四.效果图 1.运行代码 2.关卡一 3.关卡二 4.关卡三 导语 哈喽!大家好!我是木木子~ 纵观之前的文章——我发现了一个特点,很多小伙伴儿都喜欢学习Turtle或游戏代码,没错吧~ 那今天这篇文章就是为这2方面的小伙伴儿精心准备滴!Tu

随机推荐