GAutomator是一个针对Unity手游的UI自动化测试框架。设计理念与使用方式,类似于Android的UIAutomator。GAutomator以Unity中的GameObject为操作对象,通过操作GameObject实现UI自动化测试。基于GameObject的方式,不存在手机分辨率适配的问题,一份脚本能够运行在不同手机之上,基于GameObject的另外一个优点为鲁棒性较强,游戏的UI界面经常发生变化,GameObject变化频率相对较低。
window平台下运行,linux可运行脚本(GAutomator)。
- python 2.7版本
- 环境变量中包含有adb
工程中已包含所有的库,打开即可编写测试用例,写完即可运行(考虑到国内公司网络限制较多,python库的安装非常麻烦)。
GAutomator被测试的游戏需要集成SDK,WeTest SDK及打包方式。GAutomator中在Sample目录下自带了一个集成有WeTest SDK的demo游戏,可以使用该游戏进行自动化的练习。GAutomator使用说明文档,在doc下面也有详细的接入文档与使用说明文档。GAutomator与UIAutomator类似,提供了一个UI控件信息查看器GAutomatorView,可以查看UI对于的GameObject及相关信息,GAutomatorView使用说明文档。
强烈建议使用pycharm编写python代码
import wpyscripts.manager as manager
from testcase.tools import *
def test():
engine=manager.get_engine()
logger=manager.get_logger()
version=engine.get_sdk_version()
logger.debug("Version Information : {0}".format(version))
scene=engine.get_scene()
logger.debug("Scene : {0}".format(scene))
sample_button=engine.find_element("/Canvas/Panel/Sample")
logger.debug("Button : {0}".format(sample_button))
#engine.click(sample_button)
screen_shot_click(sample_button)
test()
- step 1:代码保存为sample.py,位置与main.py同级目录,这样能够查找到GAutomator的相关库;
- step 2:拉起游戏,然后运行上面的代码;
- step 3:点击sample,跳出一个气球
GAutomator目前仅支持Unity。GAutomator是非跨进程的,所以需要在游戏中集成SDK。集成SDK之后会在游戏中启动一个socket服务,GAutomator Python端通过adb与wetest sdk建立端口映射。GAutomator通过socket向WeTest SDK发送请求,包括查询GameObject、获取UI的位置信息、执行点击操作等。手游自动化测试过程中,还需要操作Android标准控件,如QQ登录等。GAutomator使用xiaocong uiautomator作为pc端调用uiautomator的解决方案。
严格意义上来说,GAutomator并不算一个库,算是一个工程。GAutomator并没有采用setup.py安装的方式。主要在公司网络环境下,安装Python库可能并不是一件容易的事情。我们想提供一种方式,编写完拷贝到任何一台安装有python环境的电脑上都能运行,免去打包和安装库的烦恼。
Unity引擎相关的API均放在engine.py模块中
Engine API | 说明 |
---|---|
find_element | 根据GameObject名称或者全路径查找,GameObject实例Eelement |
find_elements_path | 根据图片名称、文字内容、子节点顺序查找GameObject实例集合,对find_element功能的补充 |
find_elements_by_component | 根据Component名称查找所有符合的GameObject集合 |
get_element_bound | 查找GameObject在手机屏幕上的位置及长宽 |
get_element_text | 获取GameObject上的文字内容 |
get_element_image | 获取GameObject上的绑定的图片名称 |
get_scene | 获取游戏当前的Scene名称 |
get_element_world_bound | 获取3D物体在游戏世界坐标中的位置及体积,编写3D游戏测试用例经常用到 |
click_position | 点击手机屏幕指定位置 |
click | 点击GameObject的中心位置。查找到GameObject的位置和长宽后,计算中心点并进行点击操作 |
press_position | 长按手机屏幕指定位置 |
press | 长按GameObject的中心位置。查找到GameObejct在手机上的位置和长宽,计算中心点并进行长按操作 |
swipe_position | 滑动操作 |
swipe | 从开始的GameObject滑动到结束的GameObject |
swipe_and_press | 滑动并且长按一段时间,主要用于模拟摇杆 |
input | NGUI或UGUI的Input输入框,修改输入内容 |
get_touchable_elements_bound | 获取当前游戏界面的可点击节点(能有效过滤弹出框下的按钮),NGUI源码有修改的游戏可能会无效 |
get_registered_handlers | 游戏开发人员可在WeTest SDK注册方法供脚本调用,完成复杂功能,如GM命令、人物移动等。该接口获取所有注册的方法 |
call_registered_handler | 调用游戏开发人员注册的方法,如发送GM命令、人物移动到指定位置 |
get_component_methods | 获取游戏组件上的public方法信息 |
call_component_method | 调用游戏组件上的public方法,需要传入组件名称方法名称和参数列表 |
手机相关的接口均放在device.py中,主要通过uiautomator实现
Device API | 说明 |
---|---|
back | 回退键 |
get_current_package | 获取手机当前应用的package名称 |
get_rotation | 获取屏幕转向 |
get_display_size | 获取屏幕尺寸,长宽高 |
login_qq_wechat_wait | QQ或微信登录,环境变量或者main.py控制账号密码,完成登录过程 |
自动化测试报告相关功能,目前部分功能仅支持云端运行,后续将陆续在本地运行实现
Reporter API | 说明 |
---|---|
add_start_scene_tag\add_end_scene_tag | 性能数据标签(仅支持wetest云端报告) |
screenshot | 截图,保存在screenshot目录中,云端显示在报告中 |
capture_and_mark | 截图并标记红点,主要可用于跟踪测试过程 |
bug、需求使用过程中的疑问均可直接发布在Issues,有专人负责回答。也可直接联系wetest助手(800024531)