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("淘宝")
复制代码

 

posted @   你看起来真的很好吃  阅读(762)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示