目录
1、IOS自动化工具概述
2、tidevice工具的原理和使用
2.1、tidevice的原理
2.2、tidevice实现的功能
2.3、tidevice的安装
2.4、tidevice的使用
2.4.1、设备管理
1、查看已连接的设备的列表
2、检测设备连接状态
3、等待设备连接,只要有就连接就结束监听
4、等待指定设备连接
5、实时获取设备操作日志
6、获取设备信息
7、查看设备电源信息
8、系统信息
9、关机
10、重启设备
11、截屏保存在当前目录
12、截屏保存在指定目录
13、设备文件管理
14、应用文件管理
2.4.2、应用管理
1、安装应用
2、卸载应用
3、启动应用
4、关闭应用
5、查看已安装应用列表
2.4.4、fps 数据采集
背景:没有Mac OS设备,需要使用Windows完成iOS app自动化测试,这个过程是如何完成的呢,又是借助什么工具呢。
pip install -U "tidevice[openssl]" (推荐)
pip install -U tidevice (缺少设备配对功能)
tidevice -v
tidevice list
from tidevice import Usbmux
print(Usbmux().device_list())
说明:该功能是实时获取,已连接设备、断开设备的状态,所以运行该命令/程序 会挂起阻塞后面的流程,如果不想阻塞后面进程,使用subprocess模块开启子进程完成监测。
tidevice watch
from tidevice import Usbmux
for data in Usbmux().watch_device():
print(data)
tidevice wait-for-device
tidevice -u $UDID wait-for-device
tidevice -u $UDID syslog
from tidevice import Device
device = Device("$UDID")
# 开启 com.apple.syslog_relay服务 它的作用是用于记录系统日志
socket_proxy = device.start_service("com.apple.syslog_relay")
while True:
print(socket_proxy.get_socket().recv(1024).decode('utf-8'))
tidevice info
from tidevice import Device
print(Device("$UDID").device_info())
tidevice info --domain com.apple.mobile.battery --json
from tidevice import Device
import json
domain_info = Device("$UDID").device_info("com.apple.mobile.battery")
print(json.dumps(domain_info))
tidevice sysinfo
from tidevice import Device
Device("$UDID").instruments.system_info()
tidevice shutdown
from tidevice import Device
Device("$UDID").shutdown()
tidevice reboot
from tidevice import Device
Device("$UDID").reboot()
tidevice screenshot
from tidevice import Device
filename = "screenshot.jpg"
Device("$UDID").screenshot().convert("RGB").save(filename)
tidevice screenshot /xxx/xxx/screenshot.png
from tidevice import Device
file_path = "/xxx/xxx/screenshot.png"
Device("udid").screenshot().convert("PNG").save(file_path)
tidevice -u $UDID fsync
以下是一些常见的文件同步操作及其对应的命令和参数示例:
列出指定路径下的文件: tidevice fsync ls /path/to/directory
删除文件: tidevice fsync rm /path/to/file
查看文件内容: tidevice fsync cat /path/to/file
将文件从设备上拉取到本地: tidevice fsync pull /path/to/device/file /path/to/local/destination
将文件推送到设备上: tidevice fsync push /path/to/local/file /path/to/device/destination
查看文件或目录的详细信息: tidevice fsync stat /path/to/file_or_directory
列出指定路径下的文件和目录树: tidevice fsync tree /path/to/directory
from tidevice import Device
# 示例:获取目录"/"下的文件信息
print(Device("$UDID").sync.listdir_info("/"))
tidevice -u $UDID fsync -B bundle_id
该命令需要提供两个参数:command 和 arguments。
command:指定要执行的文件同步操作,如 ls、rm、cat 等。
arguments:根据所选的文件同步操作,提供相应的参数。以下是一些常见的文件同步操作及其对应的命令和参数示例:
列出指定路径下的文件: tidevice fsync -B com.kingdee.MyMoney ls /path/to/directory
删除文件: tidevice fsync -B com.kingdee.MyMoney rm /path/to/file
查看文件内容: tidevice fsync -B com.kingdee.MyMoney cat /path/to/file
将文件从设备上拉取到本地: tidevice fsync -B com.kingdee.MyMoney pull /path/to/device/file /path/to/local/destination
将文件推送到设备上: tidevice fsync -B com.kingdee.MyMoney push /path/to/local/file /path/to/device/destination
查看文件或目录的详细信息: tidevice fsync -B com.kingdee.MyMoney stat /path/to/file_or_directory
列出指定路径下的文件和目录树: tidevice fsync -B com.kingdee.MyMoney tree /path/to/directory
from tidevice import Device
# 示例:获取目录"/"下的文件信息
print(Device("$UDID").app_sync(bundle_id).listdir_info("/"))
tidevice --udid $UDID install file_or_url
或
tidevice -u $UDID install file_or_url
from tidevice import Device
device = Device("$UDID")
device.app_install(file_or_url)
tidevice --udid $UDID uninstall bundle_id
from tidevice import Device
device = Device("$UDID")
device.app_uninstall(bundle_id)
tidevice --udid $UDID launch bundle_id
from tidevice import Device
# 注意此方式是强制的冷启动,如果应用已打开则先kill旧进程,然后再启动
pid = Device("$UDID").app_start(bundle_id)
则需要改变源码中app_launch()函数下的KillExisting变量,将其改为False,但是请注意,设置KillExisting为False,调用60次以上,instruments服务将崩溃,原因是:多次启动相同的应用程序实例并且不终止旧的进程会导致系统资源耗尽或冲突。这可能会导致 "instruments" 服务无法正常运行,并最终崩溃。
tidevice --udid &UDID kill pid_or_name
from tidevice import Device
Device("$UDID").app_stop(pid_or_name)
# 查看指定设备的应用列表
tidevice --udid &UDID applist
# 只有一个设备连接的情况,可直接查看
tidevice applist
from tidevice import Device
device = Device("$UDID")
# 结果包含设备上全部的应用信息;包括用户应用('Type': 'User'),系统应用('Type': 'System'),插件('Type': 'PluginKit')
apps = device.connect_instruments().app_list()
6、获取指定应用详情应用信息
tidevice appinfo bundle_id
from tidevice import Device
device = Device("$UDID")
app_info = device.installation.lookup(bundle_id)
print(app_info)
1、启动WebDriverAgent服务
tidevice wdaproxy -B WebDriverAgent_bundle_id --port 8100
# 指定设备启动WebDriverAgent tidevice -u &UDID wdaproxy -B WebDriverAgent_bundle_id --port 8100
tidevice dumpfps
from tidevice import Device
device = Device("$UDID")
for data in device.connect_instruments().iter_opengl_data():
print(data)