当前位置:   article > 正文

【AirTest实例】1.使用脚本自动跑通游戏引导_airtest auto_setup(__file__)

airtest auto_setup(__file__)

本人测试岗位,在项目不是很忙的时候,还是想写一个可以自动跑的游戏脚本。挂着游戏能够代替一些手动的测试,并且闲时晚上下班的时候挂着手机,第二天再来看报告日志,算是物尽其用了。前期脚本基础功能是要在编辑器上调试,后期会连接手机进行调试,与电脑上调试区别不大,主要是一些坐标的调整或者图标分辨不准确的区别处理,写文记录并分享下思路流程。

需求:全自动进行游戏(自己想的)

一、分解项目功能

第一步大概区分下游戏中的功能模块,但是有一些模块中的子模块也很复杂,如联盟功能,里面还有一些活动或者玩法比较复杂的小功能在里面,后面再详细区分,先把大概的模块框架确定下来。

(方法和内容可以慢慢补充)

分好类了,可以创建AirTest的项目了

1.创建项目根目录

2.再创建按上面类区分出来的目录

3.最后项目层级

 

 二、模拟下自动游戏的操作流程

大概模拟下需要操作的动作和流程

三、脚本编写

    在脚本编写前,需要模拟下新手引导的操作流程,比如判断那个图片存在时,需要点击某个位置,或者在播放动画时,需要等待几秒钟。其实新手指引很简单和单一的操作,就是出来一个步骤,点击一下,等待下一个步骤出来后,再进行点击一下。实现的话包括一些后面可能用的基础方法,提前封装一下,目前功能比较单一,后续会考虑在弱网或者断开网络的情况下增加突发的响应功能。

AirTestForSLG类用来控制整体的方法实现,主调用类

AirTestForSLG.py

  1. # -*- encoding=utf8 -*-
  2. __author__ = "GH"
  3. from airtest.core.api import *
  4. from airtest.cli.parser import cli_setup
  5. if not cli_setup():
  6. auto_setup(__file__, logdir=True, devices=["Windows:///722224",], project_root="E:/AirTestForSLG")
  7. import sys
  8. #路径字符
  9. path1 = 'E:\\AirTestForSLG\\AndroidConsoleSys.air'
  10. path2 = 'E:\\AirTestForSLG\\BasicsConsoleSys.air'
  11. path3 = 'E:\\AirTestForSLG\\NoviceGuideSys.air'
  12. path4 = 'E:\\AirTestForSLG\\HeroSys.air'
  13. path5 = 'E:\\AirTestForSLG\\BagSys.air'
  14. path6 = 'E:\\AirTestForSLG\\MailSys.air'
  15. path7 = 'E:\\AirTestForSLG\\LeagueSys.air'
  16. path8 = 'E:\\AirTestForSLG\\ChatSys.air'
  17. path9 = 'E:\\AirTestForSLG\\TaskSys.air'
  18. path10 = 'E:\\AirTestForSLG\\SkillSys.air'
  19. path11 = 'E:\\AirTestForSLG\\InformationSys.air'
  20. path12 = 'E:\\AirTestForSLG\\ActivitySys.air'
  21. path13 = 'E:\\AirTestForSLG\\GiftSys.air'
  22. path14 = 'E:\\AirTestForSLG\\BuildingSys.air'
  23. path15 = 'E:\\AirTestForSLG\\WorldMapSys.air'
  24. #同根路径
  25. sys.path.append(path1)
  26. sys.path.append(path2)
  27. sys.path.append(path3)
  28. sys.path.append(path4)
  29. sys.path.append(path5)
  30. sys.path.append(path6)
  31. sys.path.append(path7)
  32. sys.path.append(path8)
  33. sys.path.append(path9)
  34. sys.path.append(path10)
  35. sys.path.append(path11)
  36. sys.path.append(path12)
  37. sys.path.append(path13)
  38. sys.path.append(path14)
  39. sys.path.append(path15)
  40. #py文件名字
  41. import AndroidConsoleSys
  42. import BasicsConsoleSys
  43. import NoviceGuideSys
  44. import HeroSys
  45. import BagSys
  46. import MailSys
  47. import LeagueSys
  48. import ChatSys
  49. import TaskSys
  50. import SkillSys
  51. import InformationSys
  52. import ActivitySys
  53. import GiftSys
  54. import BuildingSys
  55. import WorldMapSys
  56. #加载实例,文件名+类名
  57. androidConsole = AndroidConsoleSys.AndroidConsoleSys()
  58. basicsConsoleSys = BasicsConsoleSys.BasicsConsoleSys()
  59. noviceGuideSys = NoviceGuideSys.NoviceGuideSys()
  60. heroSys = HeroSys.HeroSys()
  61. bagSys = BagSys.BagSys()
  62. mailSys = MailSys.MailSys()
  63. leagueSys = LeagueSys.LeagueSys()
  64. chatSys = ChatSys.ChatSys()
  65. taskSys = TaskSys.TaskSys()
  66. skillSys = SkillSys.SkillSys()
  67. informationSys = InformationSys.InformationSys()
  68. activitySys = ActivitySys.ActivitySys()
  69. giftSys = GiftSys.GiftSys()
  70. buildingSys = BuildingSys.BuildingSys()
  71. worldMapSys = WorldMapSys.WorldMapSys()
  72. #整体控制类
  73. class AirTestForSLG:
  74. #自动游戏方法
  75. def AutoGame(self):
  76. print("start...")
  77. #脚本中的方法调用
  78. noviceGuideSys.NoviceGuideStory1()
  79. airTestForSLG = AirTestForSLG()
  80. airTestForSLG.AutoGame()

BasicsConsoleSys类,一些基础的操作,后续一些操作方法会在这里定义 

BasicsConsoleSys.py

  1. # -*- encoding=utf8 -*-
  2. __author__ = "GH"
  3. from airtest.core.api import *
  4. auto_setup(__file__)
  5. #--基础功能类--
  6. class BasicsConsoleSys:
  7. #检测图片是否存在(正向);图片,图片名字
  8. def CheckImageBe(self,imagePath,imageName="图片",mark=False):
  9. try:
  10. assert_exists(imagePath, "检测图片是否存在")
  11. print(imageName+"存在")
  12. mark = True
  13. return mark
  14. except:
  15. print("抛出异常,"+imageName+"不存在")
  16. mark = False
  17. return mark
  18. #检测图片是否存在(快速);图片,图片名字
  19. def CheckImageBe_Quick(self,imagePath,imageName="图片",mark=False):
  20. pos = exists(imagePath)
  21. if pos:
  22. print(imageName+"存在")
  23. mark = True
  24. return mark
  25. else:
  26. print(imageName+"不存在")
  27. mark = False
  28. return mark
  29. #检测并且点击图片(正向);图片,间隔时间,图片名字
  30. def CheckAndClikeImage(self,imagePath,sleepTime,imageName="图片"):
  31. try:
  32. assert_exists(imagePath, "检测图片是否存在")
  33. print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击该图片")
  34. sleep(sleepTime)
  35. touch(imagePath)
  36. except:
  37. print("抛出异常,"+imageName+"不存在,点击失败")
  38. #检测并且点击图片(快速);图片,间隔时间,图片名字
  39. def CheckAndClikeImage_Quick(self,imagePath,sleepTime,imageName="图片"):
  40. pos = exists(imagePath)
  41. if pos:
  42. print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击该图片")
  43. sleep(sleepTime)
  44. touch(pos)
  45. else:
  46. print(imageName+"不存在")
  47. #检测并且点击图片(正向);图片,间隔时间,点击位置,图片名字
  48. def CheckImageAndClikePoint(self,imagePath,sleepTime,clickPoint,imageName="图片"):
  49. try:
  50. assert_exists(imagePath, "检测图片是否存在")
  51. print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击坐标")
  52. sleep(sleepTime)
  53. touch(clickPoint)
  54. except:
  55. print("抛出异常,"+imageName+"不存在,点击失败")
  56. #检测并且点击图片(快速);图片,间隔时间,点击位置,图片名字
  57. def CheckImageAndClikePoint_Quick(self,imagePath,sleepTime,clickPoint,imageName="图片"):
  58. pos = exists(imagePath)
  59. if pos:
  60. print(imageName+"存在,并且等待"+str(sleepTime)+"秒后开始点击该坐标")
  61. sleep(sleepTime)
  62. touch(clickPoint)
  63. else:
  64. print(imageName+"不存在")
  65. #打开当前一级界面;界面名字,功能后面补全
  66. def OpenScence(self,scenceName):
  67. if scenceName =="地图":
  68. print("切换地图")
  69. elif scenceName=="英雄":
  70. print("打开英雄")
  71. elif scenceName=="背包":
  72. print("打开背包")
  73. elif scenceName=="邮件":
  74. print("打开邮件")
  75. elif scenceName=="联盟":
  76. print("打开联盟")
  77. elif scenceName=="聊天":
  78. print("打开聊天")
  79. elif scenceName=="任务":
  80. print("打开任务")
  81. elif scenceName=="头像":
  82. print("打开头像")
  83. elif scenceName=="战力":
  84. print("打开战力")
  85. elif scenceName=="vip":
  86. print("打开vip")
  87. elif scenceName=="燃油资源":
  88. print("打开燃油资源")
  89. elif scenceName=="食物资源":
  90. print("打开食物资源")
  91. elif scenceName=="钢铁资源":
  92. print("打开钢铁资源")
  93. elif scenceName=="合金资源":
  94. print("打开合金资源")
  95. elif scenceName=="充值":
  96. print("打开充值")
  97. elif scenceName=="第一建造队列":
  98. print("点击第一建造队列")
  99. elif scenceName=="第二建造队列":
  100. print("点击第二建造队列")
  101. else:
  102. print("打开界面输入错误,找不到的界面")

NoviceGuideSys类,实现新手指引中的功能,大部分是一些长片段或者短片段的剧情流程

NoviceGuideSys.py

  1. # -*- encoding=utf8 -*-
  2. __author__ = "GH"
  3. from airtest.core.api import *
  4. auto_setup(__file__)
  5. import sys
  6. path2 = 'E:\\AirTestForSLG\\BasicsConsoleSys.air'
  7. sys.path.append(path2)
  8. #加载其他脚本实例
  9. import BasicsConsoleSys
  10. basicsConsoleSys = BasicsConsoleSys.BasicsConsoleSys()
  11. #--新手指引类--
  12. class NoviceGuideSys:
  13. #关闭角色剧情;剧情人物名字
  14. def CloseRolePlot(self,name):
  15. if name == "后勤":
  16. print("关闭后勤剧情")
  17. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\后勤.png", record_pos=(-0.002, -0.135), resolution=(542, 966)),0.5,"后勤")
  18. else:
  19. print("输入名字错误")
  20. #讲解剧情存在时点击坐标;图片路径
  21. def ClickWhenExplain(self,imagePath,imageName="图片"):
  22. if(basicsConsoleSys.CheckImageBe(Template(r"Image\\剧情讲解.png", record_pos=(0.033, -0.035), resolution=(542, 966)),"讲解剧情")==True):
  23. sleep(0.5)
  24. pos = exists(imagePath)
  25. if pos:touch(pos)
  26. else:
  27. print("没有找到点击的图片")
  28. else:
  29. print("讲解剧情不存在")
  30. #新手指引剧情1
  31. def NoviceGuideStory1(self):
  32. #关闭后勤剧情
  33. self.CloseRolePlot("后勤")
  34. #关闭后勤剧情
  35. self.CloseRolePlot("后勤")
  36. #点击市政厅
  37. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\市政厅废弃.png", record_pos=(-0.002, -0.009), resolution=(542, 966)),1,"市政厅废弃")
  38. #等待播放动画
  39. sleep(5.0)
  40. #关闭后勤剧情
  41. self.CloseRolePlot("后勤")
  42. #点击英雄图标
  43. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\英雄图标.png", record_pos=(-0.244, 0.814), resolution=(542, 966)),1,"英雄图标")
  44. #点击招募按钮
  45. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\招募按钮.png", record_pos=(0.332, 0.57), resolution=(542, 966)),1,"招募按钮")
  46. #等待播放动画
  47. sleep(3.0)
  48. #点击英雄海报(小女孩)
  49. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\小女孩海报.png", record_pos=(-0.009, -0.006), resolution=(542, 966)),1,"英雄海报(小女孩)")
  50. #点击左上角装备栏
  51. self.ClickWhenExplain(Template(r"Image\\左上角装备栏.png", record_pos=(-0.36, -0.465), resolution=(542, 966)),"左上角装备栏")
  52. #剧情讲解存在时点击光圈
  53. self.ClickWhenExplain(Template(r"Image\\属性面板1.png", record_pos=(-0.004, 0.522), resolution=(542, 966)),"属性面板1")
  54. #点击穿上按钮
  55. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\穿上按钮.png", record_pos=(-0.002, 0.792), resolution=(542, 966)),0.5,"穿上按钮")
  56. #剧情讲解存在时点击光圈
  57. self.ClickWhenExplain(Template(r"Image\\返回按钮.png", record_pos=(-0.41, -0.712), resolution=(542, 966)),"返回按钮")
  58. #点击市政厅完整
  59. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\市政厅完整.png", record_pos=(-0.024, -0.011), resolution=(542, 966)),1,"市政厅完整")
  60. #点击委任按钮
  61. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\委任按钮.png", record_pos=(0.149, 0.14), resolution=(542, 966)),0.5,"委任按钮")
  62. #剧情讲解存在时点击光圈
  63. self.ClickWhenExplain(Template(r"Image\\属性板.png", record_pos=(0.0, 0.197), resolution=(542, 966)),"属性板")
  64. #点击选择按钮
  65. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\选择按钮.png", record_pos=(-0.002, 0.806), resolution=(542, 966)),0.5,"选择按钮")
  66. #等待播放动画
  67. sleep(5.0)
  68. #关闭后勤剧情
  69. self.CloseRolePlot("后勤")
  70. #点击市政厅完整(近)
  71. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\市政厅完整近.png", record_pos=(-0.02, -0.013), resolution=(542, 966)),1,"市政厅完整(近)")
  72. #点击建筑升级按钮
  73. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建筑升级按钮.png", record_pos=(-0.072, 0.216), resolution=(542, 966)),0.5,"建筑升级按钮")
  74. #点击建筑升级按钮
  75. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\升级按钮.png", record_pos=(0.22, 0.812), resolution=(542, 966)),0.5,"升级按钮")
  76. #等待播放动画
  77. sleep(6.0)
  78. #关闭升级完成界面;锚点为8
  79. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\关闭升级完成界面.png", target_pos=8, record_pos=(-0.002, 0.131), resolution=(542, 966)),0.5,"关闭升级完成界面")
  80. #关闭后勤剧情
  81. self.CloseRolePlot("后勤")
  82. #点击开放区域
  83. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\开放区域.png", record_pos=(0.0, 0.031), resolution=(542, 966)),0.5,"开放区域")
  84. #等待播放动画
  85. sleep(6.0)
  86. #点击空地1
  87. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\空地1.png", record_pos=(0.004, 0.028), resolution=(542, 966)),1,"空地1")
  88. #点击建造按钮(建筑列表)
  89. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建造按钮建筑按钮.png", record_pos=(0.0, 0.803), resolution=(542, 966)),1,"建造按钮")
  90. #点击建造按钮(建筑页)
  91. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建筑页建造按钮.png", record_pos=(0.223, 0.808), resolution=(542, 966)),0.5,"建造按钮")
  92. #点击气泡
  93. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\气泡.png", record_pos=(0.0, -0.161), resolution=(542, 966)),0.5,"气泡")
  94. #剧情讲解存在时点击光圈
  95. self.ClickWhenExplain(Template(r"Image\\任务1.png", record_pos=(-0.17, 0.644), resolution=(542, 966)),"任务")
  96. #关闭后勤剧情
  97. self.CloseRolePlot("后勤")
  98. #点击重返都市
  99. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\重返都市.png", record_pos=(0.203, -0.673), resolution=(542, 966)),0.5,"重返都市")
  100. #剧情讲解存在时点击光圈
  101. self.ClickWhenExplain(Template(r"Image\\领取按钮.png", record_pos=(0.334, -0.185), resolution=(542, 966)),"领取按钮")
  102. #关闭获得奖励界面
  103. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\重返都市确定按钮.png", record_pos=(0.006, 0.395), resolution=(542, 966)),1,"重返都市确定按钮")
  104. #关闭重返都市界面
  105. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\重返都市关闭按钮.png", record_pos=(0.411, -0.707), resolution=(542, 966)),0.5,"重返都市关闭按钮")
  106. #关闭后勤剧情
  107. self.CloseRolePlot("后勤")
  108. #点击任务
  109. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\任务2.png", record_pos=(-0.173, 0.642), resolution=(542, 966)),0.5,"任务")
  110. #点击空地2
  111. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\空地2.png", record_pos=(0.007, 0.039), resolution=(542, 966)),1,"空地2")
  112. #点击建造按钮(建筑列表)
  113. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建造按钮建筑按钮.png", record_pos=(0.0, 0.803), resolution=(542, 966)),1,"建造按钮")
  114. #点击建造按钮(建筑页)
  115. basicsConsoleSys.CheckAndClikeImage(Template(r"Image\\建筑页建造按钮.png", record_pos=(0.223, 0.808), resolution=(542, 966)),0.5,"建造按钮")
  116. #noviceGuideSys =NoviceGuideSys() #单独调试时用
  117. #noviceGuideSys.NoviceGuideStory1() #单独调试时用

四、其他备注

1.双击图片可以打开图片设置,锚点设置为8,即为点击图片的下方位置,默认为5,点击图片正中间

2.图片是通过touch方法或者exists的方法获取到,是一个路径,需要改路径的话需要在路径前面加上图片的上一级菜单,不然会获取图片失败,运行脚本前需要检查一下图片显示正常。

连接游戏画面后,直接运行NoviceGuideSys脚本就自动跑完了新手指引功能。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/346849
推荐阅读
相关标签
  

闽ICP备14008679号