赞
踩
本人测试岗位,在项目不是很忙的时候,还是想写一个可以自动跑的游戏脚本。挂着游戏能够代替一些手动的测试,并且闲时晚上下班的时候挂着手机,第二天再来看报告日志,算是物尽其用了。前期脚本基础功能是要在编辑器上调试,后期会连接手机进行调试,与电脑上调试区别不大,主要是一些坐标的调整或者图标分辨不准确的区别处理,写文记录并分享下思路流程。
需求:全自动进行游戏(自己想的)
第一步大概区分下游戏中的功能模块,但是有一些模块中的子模块也很复杂,如联盟功能,里面还有一些活动或者玩法比较复杂的小功能在里面,后面再详细区分,先把大概的模块框架确定下来。
(方法和内容可以慢慢补充)
分好类了,可以创建AirTest的项目了
1.创建项目根目录
2.再创建按上面类区分出来的目录
3.最后项目层级
大概模拟下需要操作的动作和流程
在脚本编写前,需要模拟下新手引导的操作流程,比如判断那个图片存在时,需要点击某个位置,或者在播放动画时,需要等待几秒钟。其实新手指引很简单和单一的操作,就是出来一个步骤,点击一下,等待下一个步骤出来后,再进行点击一下。实现的话包括一些后面可能用的基础方法,提前封装一下,目前功能比较单一,后续会考虑在弱网或者断开网络的情况下增加突发的响应功能。
AirTestForSLG类用来控制整体的方法实现,主调用类
AirTestForSLG.py
- # -*- encoding=utf8 -*-
- __author__ = "GH"
-
- from airtest.core.api import *
- from airtest.cli.parser import cli_setup
-
- if not cli_setup():
- auto_setup(__file__, logdir=True, devices=["Windows:///722224",], project_root="E:/AirTestForSLG")
-
- import sys
-
- #路径字符
- path1 = 'E:\\AirTestForSLG\\AndroidConsoleSys.air'
- path2 = 'E:\\AirTestForSLG\\BasicsConsoleSys.air'
- path3 = 'E:\\AirTestForSLG\\NoviceGuideSys.air'
- path4 = 'E:\\AirTestForSLG\\HeroSys.air'
- path5 = 'E:\\AirTestForSLG\\BagSys.air'
- path6 = 'E:\\AirTestForSLG\\MailSys.air'
- path7 = 'E:\\AirTestForSLG\\LeagueSys.air'
- path8 = 'E:\\AirTestForSLG\\ChatSys.air'
- path9 = 'E:\\AirTestForSLG\\TaskSys.air'
- path10 = 'E:\\AirTestForSLG\\SkillSys.air'
- path11 = 'E:\\AirTestForSLG\\InformationSys.air'
- path12 = 'E:\\AirTestForSLG\\ActivitySys.air'
- path13 = 'E:\\AirTestForSLG\\GiftSys.air'
- path14 = 'E:\\AirTestForSLG\\BuildingSys.air'
- path15 = 'E:\\AirTestForSLG\\WorldMapSys.air'
-
-
- #同根路径
- sys.path.append(path1)
- sys.path.append(path2)
- sys.path.append(path3)
- sys.path.append(path4)
- sys.path.append(path5)
- sys.path.append(path6)
- sys.path.append(path7)
- sys.path.append(path8)
- sys.path.append(path9)
- sys.path.append(path10)
- sys.path.append(path11)
- sys.path.append(path12)
- sys.path.append(path13)
- sys.path.append(path14)
- sys.path.append(path15)
-
- #py文件名字
- import AndroidConsoleSys
- import BasicsConsoleSys
- import NoviceGuideSys
- import HeroSys
- import BagSys
- import MailSys
- import LeagueSys
- import ChatSys
- import TaskSys
- import SkillSys
- import InformationSys
- import ActivitySys
- import GiftSys
- import BuildingSys
- import WorldMapSys
-
-
- #加载实例,文件名+类名
- androidConsole = AndroidConsoleSys.AndroidConsoleSys()
- basicsConsoleSys = BasicsConsoleSys.BasicsConsoleSys()
- noviceGuideSys = NoviceGuideSys.NoviceGuideSys()
- heroSys = HeroSys.HeroSys()
- bagSys = BagSys.BagSys()
- mailSys = MailSys.MailSys()
- leagueSys = LeagueSys.LeagueSys()
- chatSys = ChatSys.ChatSys()
- taskSys = TaskSys.TaskSys()
- skillSys = SkillSys.SkillSys()
- informationSys = InformationSys.InformationSys()
- activitySys = ActivitySys.ActivitySys()
- giftSys = GiftSys.GiftSys()
- buildingSys = BuildingSys.BuildingSys()
- worldMapSys = WorldMapSys.WorldMapSys()
-
- #整体控制类
- class AirTestForSLG:
-
- #自动游戏方法
- def AutoGame(self):
- print("start...")
- #脚本中的方法调用
- noviceGuideSys.NoviceGuideStory1()
-
- airTestForSLG = AirTestForSLG()
- airTestForSLG.AutoGame()
BasicsConsoleSys类,一些基础的操作,后续一些操作方法会在这里定义
BasicsConsoleSys.py
- # -*- encoding=utf8 -*-
- __author__ = "GH"
-
- from airtest.core.api import *
-
- auto_setup(__file__)
-
- #--基础功能类--
- class BasicsConsoleSys:
-
- #检测图片是否存在(正向);图片,图片名字
- def CheckImageBe(self,imagePath,imageName="图片",mark=False):
- try:
- assert_exists(imagePath, "检测图片是否存在")
- print(imageName+"存在")
- mark = True
- return mark
- except:
- print("抛出异常,"+imageName+"不存在")
- mark = False
- return mark
-
- #检测图片是否存在(快速);图片,图片名字
- def CheckImageBe_Quick(self,imagePath,imageName="图片",mark=False):
- pos = exists(imagePath)
- if pos:
- print(imageName+"存在")
- mark = True
- return mark
- else:
- print(imageName+"不存在")
- mark = False
- return mark
-
- #检测并且点击图片(正向);图片,间隔时间,图片名字
- def CheckAndClikeImage(self,imagePath,sleepTime,imageName="图片"):
- try:
- assert_exists(imagePath, "检测图片是否存在")
- print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击该图片")
- sleep(sleepTime)
- touch(imagePath)
- except:
- print("抛出异常,"+imageName+"不存在,点击失败")
-
- #检测并且点击图片(快速);图片,间隔时间,图片名字
- def CheckAndClikeImage_Quick(self,imagePath,sleepTime,imageName="图片"):
- pos = exists(imagePath)
- if pos:
- print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击该图片")
- sleep(sleepTime)
- touch(pos)
- else:
- print(imageName+"不存在")
-
- #检测并且点击图片(正向);图片,间隔时间,点击位置,图片名字
- def CheckImageAndClikePoint(self,imagePath,sleepTime,clickPoint,imageName="图片"):
- try:
- assert_exists(imagePath, "检测图片是否存在")
- print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击坐标")
- sleep(sleepTime)
- touch(clickPoint)
- except:
- print("抛出异常,"+imageName+"不存在,点击失败")
-
- #检测并且点击图片(快速);图片,间隔时间,点击位置,图片名字
- def CheckImageAndClikePoint_Quick(self,imagePath,sleepTime,clickPoint,imageName="图片"):
- pos = exists(imagePath)
- if pos:
- print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击该坐标")
- sleep(sleepTime)
- touch(clickPoint)
- else:
- print(imageName+"不存在")
-
- #打开当前一级界面;界面名字,功能后面补全
- def OpenScence(self,scenceName):
- if scenceName =="地图":
- print("切换地图")
- elif scenceName=="英雄":
- print("打开英雄")
- elif scenceName=="背包":
- print("打开背包")
- elif scenceName=="邮件":
- print("打开邮件")
- elif scenceName=="联盟":
- print("打开联盟")
- elif scenceName=="聊天":
- print("打开聊天")
- elif scenceName=="任务":
- print("打开任务")
- elif scenceName=="头像":
- print("打开头像")
- elif scenceName=="战力":
- print("打开战力")
- elif scenceName=="vip":
- print("打开vip")
- elif scenceName=="燃油资源":
- print("打开燃油资源")
- elif scenceName=="食物资源":
- print("打开食物资源")
- elif scenceName=="钢铁资源":
- print("打开钢铁资源")
- elif scenceName=="合金资源":
- print("打开合金资源")
- elif scenceName=="充值":
- print("打开充值")
- elif scenceName=="第一建造队列":
- print("点击第一建造队列")
- elif scenceName=="第二建造队列":
- print("点击第二建造队列")
- else:
- print("打开界面输入错误,找不到的界面")
NoviceGuideSys类,实现新手指引中的功能,大部分是一些长片段或者短片段的剧情流程
NoviceGuideSys.py
- # -*- encoding=utf8 -*-
- __author__ = "GH"
-
- from airtest.core.api import *
-
- auto_setup(__file__)
-
- import sys
-
- path2 = 'E:\\AirTestForSLG\\BasicsConsoleSys.air'
- sys.path.append(path2)
-
- #加载其他脚本实例
- import BasicsConsoleSys
- basicsConsoleSys = BasicsConsoleSys.BasicsConsoleSys()
-
- #--新手指引类--
- class NoviceGuideSys:
-
- #关闭角色剧情;剧情人物名字
- def CloseRolePlot(self,name):
- if name == "后勤":
- print("关闭后勤剧情")
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\后勤.png", record_pos=(-0.002, -0.135), resolution=(542, 966)),0.5,"后勤")
- else:
- print("输入名字错误")
-
- #讲解剧情存在时点击坐标;图片路径
- def ClickWhenExplain(self,imagePath,imageName="图片"):
- if(basicsConsoleSys.CheckImageBe(Template(r"Image\\剧情讲解.png", record_pos=(0.033, -0.035), resolution=(542, 966)),"讲解剧情")==True):
- sleep(0.5)
- pos = exists(imagePath)
- if pos:touch(pos)
- else:
- print("没有找到点击的图片")
- else:
- print("讲解剧情不存在")
-
- #新手指引剧情1
- def NoviceGuideStory1(self):
- #关闭后勤剧情
- self.CloseRolePlot("后勤")
- #关闭后勤剧情
- self.CloseRolePlot("后勤")
- #点击市政厅
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\市政厅废弃.png", record_pos=(-0.002, -0.009), resolution=(542, 966)),1,"市政厅废弃")
- #等待播放动画
- sleep(5.0)
- #关闭后勤剧情
- self.CloseRolePlot("后勤")
- #点击英雄图标
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\英雄图标.png", record_pos=(-0.244, 0.814), resolution=(542, 966)),1,"英雄图标")
- #点击招募按钮
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\招募按钮.png", record_pos=(0.332, 0.57), resolution=(542, 966)),1,"招募按钮")
- #等待播放动画
- sleep(3.0)
- #点击英雄海报(小女孩)
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\小女孩海报.png", record_pos=(-0.009, -0.006), resolution=(542, 966)),1,"英雄海报(小女孩)")
- #点击左上角装备栏
- self.ClickWhenExplain(Template(r"Image\\左上角装备栏.png", record_pos=(-0.36, -0.465), resolution=(542, 966)),"左上角装备栏")
- #剧情讲解存在时点击光圈
- self.ClickWhenExplain(Template(r"Image\\属性面板1.png", record_pos=(-0.004, 0.522), resolution=(542, 966)),"属性面板1")
- #点击穿上按钮
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\穿上按钮.png", record_pos=(-0.002, 0.792), resolution=(542, 966)),0.5,"穿上按钮")
- #剧情讲解存在时点击光圈
- self.ClickWhenExplain(Template(r"Image\\返回按钮.png", record_pos=(-0.41, -0.712), resolution=(542, 966)),"返回按钮")
- #点击市政厅完整
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\市政厅完整.png", record_pos=(-0.024, -0.011), resolution=(542, 966)),1,"市政厅完整")
- #点击委任按钮
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\委任按钮.png", record_pos=(0.149, 0.14), resolution=(542, 966)),0.5,"委任按钮")
- #剧情讲解存在时点击光圈
- self.ClickWhenExplain(Template(r"Image\\属性板.png", record_pos=(0.0, 0.197), resolution=(542, 966)),"属性板")
- #点击选择按钮
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\选择按钮.png", record_pos=(-0.002, 0.806), resolution=(542, 966)),0.5,"选择按钮")
- #等待播放动画
- sleep(5.0)
- #关闭后勤剧情
- self.CloseRolePlot("后勤")
- #点击市政厅完整(近)
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\市政厅完整近.png", record_pos=(-0.02, -0.013), resolution=(542, 966)),1,"市政厅完整(近)")
- #点击建筑升级按钮
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建筑升级按钮.png", record_pos=(-0.072, 0.216), resolution=(542, 966)),0.5,"建筑升级按钮")
- #点击建筑升级按钮
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\升级按钮.png", record_pos=(0.22, 0.812), resolution=(542, 966)),0.5,"升级按钮")
- #等待播放动画
- sleep(6.0)
- #关闭升级完成界面;锚点为8
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\关闭升级完成界面.png", target_pos=8, record_pos=(-0.002, 0.131), resolution=(542, 966)),0.5,"关闭升级完成界面")
- #关闭后勤剧情
- self.CloseRolePlot("后勤")
- #点击开放区域
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\开放区域.png", record_pos=(0.0, 0.031), resolution=(542, 966)),0.5,"开放区域")
- #等待播放动画
- sleep(6.0)
- #点击空地1
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\空地1.png", record_pos=(0.004, 0.028), resolution=(542, 966)),1,"空地1")
- #点击建造按钮(建筑列表)
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建造按钮建筑按钮.png", record_pos=(0.0, 0.803), resolution=(542, 966)),1,"建造按钮")
- #点击建造按钮(建筑页)
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建筑页建造按钮.png", record_pos=(0.223, 0.808), resolution=(542, 966)),0.5,"建造按钮")
- #点击气泡
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\气泡.png", record_pos=(0.0, -0.161), resolution=(542, 966)),0.5,"气泡")
- #剧情讲解存在时点击光圈
- self.ClickWhenExplain(Template(r"Image\\任务1.png", record_pos=(-0.17, 0.644), resolution=(542, 966)),"任务")
- #关闭后勤剧情
- self.CloseRolePlot("后勤")
- #点击重返都市
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\重返都市.png", record_pos=(0.203, -0.673), resolution=(542, 966)),0.5,"重返都市")
- #剧情讲解存在时点击光圈
- self.ClickWhenExplain(Template(r"Image\\领取按钮.png", record_pos=(0.334, -0.185), resolution=(542, 966)),"领取按钮")
- #关闭获得奖励界面
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\重返都市确定按钮.png", record_pos=(0.006, 0.395), resolution=(542, 966)),1,"重返都市确定按钮")
- #关闭重返都市界面
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\重返都市关闭按钮.png", record_pos=(0.411, -0.707), resolution=(542, 966)),0.5,"重返都市关闭按钮")
- #关闭后勤剧情
- self.CloseRolePlot("后勤")
- #点击任务
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\任务2.png", record_pos=(-0.173, 0.642), resolution=(542, 966)),0.5,"任务")
- #点击空地2
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\空地2.png", record_pos=(0.007, 0.039), resolution=(542, 966)),1,"空地2")
- #点击建造按钮(建筑列表)
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建造按钮建筑按钮.png", record_pos=(0.0, 0.803), resolution=(542, 966)),1,"建造按钮")
- #点击建造按钮(建筑页)
- basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建筑页建造按钮.png", record_pos=(0.223, 0.808), resolution=(542, 966)),0.5,"建造按钮")
-
-
- #noviceGuideSys =NoviceGuideSys() #单独调试时用
- #noviceGuideSys.NoviceGuideStory1() #单独调试时用
1.双击图片可以打开图片设置,锚点设置为8,即为点击图片的下方位置,默认为5,点击图片正中间
2.图片是通过touch方法或者exists的方法获取到,是一个路径,需要改路径的话需要在路径前面加上图片的上一级菜单,不然会获取图片失败,运行脚本前需要检查一下图片显示正常。
连接游戏画面后,直接运行NoviceGuideSys脚本就自动跑完了新手指引功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。