python实现安卓APP自动化测试
相关软件
PC端:
系统:MAC
python3.9.16
iuautomator2(该工具依赖adb)
介绍:uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试。它本来是Google提供的一个自动化测试的Java库,后来发展了python-uiautomator2,封装了谷歌自带的uiautomator测试框架,提供便利的python接口,用它可以很便捷的编写python脚本来实现app的自动化测试。
adb
介绍:adb是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系,才能让用户在电脑上对手机进行全面的操作;(用这个工具可以直接操作管理android模拟器或者真实的android设备)
移动端:
ATX-agent
介绍:运行在手机的内部,为手机增加了远程控制,自动化的功能。atx-server
最重要的功能,是将atx-agent
汇总到一个网页上展示,并提供一个API可以获取所有设备的列表
软件安装
1:python3.9.16 安装
使用adaconda安装python conda create -n env_name python=3.9
2: iuautomator2安装
pip install uiautomator2
3:adb安装
mac:
brew install android-platform-tools
windows:
https://wwd.lanzoub.com/iy58p07rt3re 下载后将目录地址写入环境变量, 虚拟器需要打开开发者权限,使用adb connect 127.0.0.1:16384 命令链接虚拟机。
3: 移动端ATX-agent安装
执行命令前需要确保adb已安装成功
python -m uiautomator2 init
成功后移动端会显示ATX APP
测试内容
1:推送淘宝apk到移动端
2:安装appp
3:打开app
注意:由于 uiautomator2 默认content_timeout为3秒 需要修改超时时间否则推送大文件会失败
修改方法:https://www.cnblogs.com/fuchenjie/p/17305703.html
import uiautomator2 as u2 class AndroidTest(object): device = None # 已连接的手机对象 # wait_timeout = 300.0 # 链接超时时间 def _get_pkg_name(self): """获取当前已打开的app包名""" pkg_name = self.device.app_current() return pkg_name def connection_by_wifi(self, ip): """通过同局域网的wifi链接手机""" self.device = u2.connect_wifi("ip") # self.device.wait_timeout = self.wait_timeout print(self.device.device_info) def connection_by_num(self, num): """通过usb链接手机后通过手机序列号连接手机""" self.device = u2.connect(num) # self.device.wait_timeout = self.wait_timeout print(self.device.device_info) def install_app(self, apk_url): """下载并安装apk""" print("start install %s" % apk_url) self.device.app_install(apk_url) print("end install %s" % apk_url) def uninstall(self): """卸载app""" # 获取当前打开的app的包名 pkg_name = self._get_pkg_name() self.device.app_uninstall(pkg_name) def open_app(self, app_name): """通过app名称打开app, 点击app进入""" self.device(text=app_name).click() def open_app_by_pkg_name(self, pkg_name=""): """通过pkg名打开app""" if not pkg_name: pkg_name = self._get_pkg_name() self.device.app_start(pkg_name) def close_app(self, pkg_name=""): """关闭app""" if not pkg_name: pkg_name = self._get_pkg_name() self.device.app_stop(pkg_name) def clear_app(self, pkg_name=""): """清空app""" if not pkg_name: pkg_name = self._get_pkg_name() self.device.app_clear(pkg_name) def screenshot(self, img_path): """手机截屏""" self.device.screenshot(img_path) if __name__ == "__main__": my_android = AndroidTest() sg = u"/xxxxx/PycharmProjects/douyin/pkg/taobao.apk" my_android.device.push(sg, "/data/") my_android.install_app(sg) my_android.open_app("淘宝")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)