大家好,我是麦小米,是狂师老师全栈测开训练营中的一名学员。

如果之前做过iOS自动化的同学相信都知道,一直以来,iOS自动化的实现&执行都必须依赖 Mac 系统,其主要原因是因为需要通过 xcodebuild 编译&安装WDA (WebDriverAgent)iOS 设备中,通过WDA实现对被测应用进行操作。导致想要做iOS自动化 就必须拥有 Mac 设备的现象。

作为一名测开新手,在学习完移动端自动化测试后,兴致满满要实践一番,无奈公司只配备了windows电脑,怎样进行iOS自动化测试成了一大难题,而今天给大家分享一款新面市不久的iOS自动化工具:tidevice ,正好是弥补了这块空缺。

一、tidevice介绍

tidevice 是阿里内部小组前不久,刚开源的一款针对用来做iOS自动化测试用途的工具,可用于iOS应用的性能采集和UI自动化。不依赖Xcodebuild,可以运行在 MacLinuxWindows 上,即使你没有Mac电脑,也能跑iOS自动化

一句话概况:tidevice它是一款跨平台的自动化开源工具,不依赖 Xcode 就可以启动 WebDriverAgent( WDA ),这也就意味着以后在Windows 可以直接运行 iOS 自动化脚本了。

项目地址:

https://github.com/alibaba/taobao-iphone-device

二、tidevice能些什么?

从上述的介绍中,可以知道tidevice定位就是一款iOS自动化测试工具,主要用途有:

  • iOS UI自动化测试
  • 设备信息获取
  • 应用安装、卸载、启动、停止、查看应用信息、已安装应用列表
  • 启动 WebDriverAgent (不依赖 xcodebuild , 跨平台)
  • 性能数据采集
  • 设备截图、设备日志等

三、 tidevice自动化环境准备

1.安装tidevice(依赖Python3.6+)

pip3 install -U "tidevice[openssl]" (推荐)
pip3 install -U tidevice (缺少设备配对功能)

2.查看是否安装成功

tidevice -v

3.在设备上安装WebDriverAgent

除了上述两步,要完成 iOS 端的自动化,我们还需要做一些准备工作

  • 3.1 . 下载WebDriverAgent,将 WebDriverAgent 安装到 iOS 设备上,通过它驱动手机进行一系列自动化操作,由于 Facebook WDA 很长时间没有更新了,这里建议直接使用 Appium WDA
https://github.com/appium/WebDriverAgent
  • 3.2. 切换到WebDriverAgent目录下,执行./Scripts/bootstrap.sh

  • 3.3. 依赖安装完成后,双击WebDriverAgent目录下的WebDriverAgent.xcodeproj在Xcode中打开

  • 3.4. WebDriverAgent的Bundle Identifier更改为自己命名的Identifier

  • 3.5. WebDriverAgentLib的Bundle Identifier更改为自己命名的Identifier

  • 3.6. WebDriverAgentRunner的Bundle Identifier更改为自己命名的Identifier

  • 3.7. 连接手机,点击Bulid

  • 3.8. 提示Build Succeeded表示成功,点击Product-->Test

  • 3.9. 提示Succeeded后打开手机-通用-设备管理-点击信任即可。

四、tidevice常用功能

准备好上述环境后,将 iPhone 设备连接到电脑上,就可以使用 tidevice 提供的功能了

1. 查看已连接设备列表

tidevice list
# json数据显示
tidevice list --json

由于tidevice 支持的所有cmd命令 都是在 tidevice.main 中定义实现,可以直接与自己的工程代码集成在一起。

Python代码:

from tidevice import Usbmux
print(Usbmux().device_list())

利用tidevice info可以查看设备信息,比如:设备序列号、系统版本、CPU、本机号码、时间戳、蓝牙地址、MAC 地址等信息

2. 查看手机上安装的应用

tidevice applist

Python代码:

from tidevice import Device
Instruments = Device("udid").connect_instruments()
# 设备上全部App信息列表 包含 系统应用和插件,通过 Type 可以区分App
apps = instruments.app_list()
# 只筛选用户安装的App列表
user_app_list = [app for app in apps if app["Type"] == "User"]

3. 安装、卸载应用

tidevice 支持安装本地 ipa 包和远程包,另外,tidevice 可以使用「 --udid 」参数将应用安装到某一台设备中

# 安装本地应用
tidevice install test.ipa # 根据udid参数,指定设备安装应用
tidevice --udid $UDID install https://xxx.org/mikezhou.ipa # 卸载应用(通过包名)
# 比如:微信App包名为:com.tencent.xin
tidevice uninstall com.tencent.xin

Python代码:

from tidevice import Device
Device("udid").app_install(ipa_url_or_path)

4. 获取设备信息

tidevice info

Python代码:

from tidevice import Device
# 内容会比cmd 全很多, 但是需要理解每个字段的含义
Device("udid").device_info()

查看设备电源信息

tidevice info --domain com.apple.mobile.battery --json

可以执行 ideviceinfo -h 查看都有哪些domain

5. fps 数据采集

tidevice dumpsfps

四.执行自动化测试

在执行iOS自动化测试之前,首先要提前将 WDA 安装到 iOS设备中 并在设置中信任开发者,确保WDA可以正常启动,并且知道bundleId

1、启动WDA

真机设备安装完 WDA 后,就可以脱离 Mac,使用 Windows 进行自动化操作了

tidevice -u(设备 udid)wdaproxy -B(wda 的 bundleId) --port 8100
# 只连接了一台手机,例如:
tidevice wdaproxy -B com.facebook.WebDriverAgent1.xctrunner --port 8100

当看到以下信息表示启动成功

此时可以访问http://127.0.0.1:8100/status

2.weditor安装查看元素工具

# weditor安装
pip3 install -U weditor
# weditor启动
控制台输入weditor或者python3 -m weditor

3.查看元素

  • Windows: cmd-->ipconfig-->获取本机ip,系统选择iOS,输入http://本机ip:8100,点击Connect

  • Mac电脑:系统选择iOS, 输入http://localhost:8100,点击Connect

  1. 接下来,就可以使用 Appium 或 facebook-wda 编写脚本并运行到 iOS 设备上了,首先,我们安装对应的依赖,比如安装facebook-wda依赖
pip3 install -U facebook-wda

接着,以酷狗App为例,编写自动化脚本并运行测试,代码如下:

# -*- coding:utf-8 -*-
import wda
import allure d = wda.USBClient() class TestDemo:
def setup(self):
d.session('com.kugou.kugou1002') def test_loginDemo(self):
with allure.step('点击我的'):
d(label='我的').click_exists(10)
with allure.step('点击登录'):
d.xpath('//*[@label="空列表"]/Other[1]/Button[1]/StaticText[3]').click_exists(10)
with allure.step('点击其他登录方式'):
d(label="其他登录方式").click_exists(10)
with allure.step('输入账号'):
d.xpath('//*[@label="帐号"]/following-sibling::*[1]').get(10).set_text('17622222333')
with allure.step('输入密码'):
d.xpath('//*[@label="密码"]/following-sibling::*[1]').get(10).set_text('000000')
with allure.step('点击登录'):
d.xpath('//*[@label="密码"]/parent::*/parent::*/following-sibling::*[2]').click_exists(10)
assert d(label="请先勾选页面下方的“同意《用户协议》和《隐私政策》”").wait(10) != None def teardown(self):
d.app_stop('com.kugou.kugou1002')

五. 最后

阿里开源的tidevice这款工具,占用内存小,且支持跨平台,使iOS自动化摆脱了Mac的限制,也给iOS自动化方案建设更多的可能性,但由于刚开源不久,可能还存在一些不稳定的因素,但这并阻止不了大家尝鲜的脚步。

测试开发:推荐一款阿里最新 Python 自动化开源工具!的更多相关文章

  1. 推荐一款最强Python自动化神器!不用写一行代码!

    搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: selenium.结合标准的WebDriver API来编写Python自动化脚本,可以实现解放双手,让脚本代替人 ...

  2. 推荐一款最强Python自动化神器!再也不用写代码了!

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: seleniu ...

  3. 推荐一款优秀的web自动化测工具

    在业务使用的自动化测试工具很多.有开源的,有商业化的,各有各得特色,各有各得优点!下面我就介绍几个我用过的一款非常优秀的国产自动化测试工具.在现有的自动化软件当中,都是以元素的name.id.xpat ...

  4. [转帖]22款让Kubernetes锦上添花的开源工具

    22款让Kubernetes锦上添花的开源工具 http://soft.zhiding.cn/software_zone/2019/0506/3117650.shtml 找时间尝试一下. 至顶网软件频 ...

  5. 【python测试开发栈】—帮你总结Python os模块高频使用的方法

    Python中的os模块是主要和系统操作相关的模块,在平时的工作中会经常用到,花时间整理了os模块的高频使用方法,同时整理出使用时需要注意的点.归纳来讲,os模块的方法可以分为:目录操作.文件操作.路 ...

  6. 【python测试开发栈】帮你总结python random模块高频使用方法

    随机数据在平时写python脚本时会经常被用到,比如随机生成0和1来控制逻辑.或者从列表中随机选择一个元素(其实抽奖程序也类似,就是从公司所有人中随机选择中奖用户)等等.这篇文章,就帮大家整理在pyt ...

  7. 推荐一款Diffy:Twitter的开源自动化测试工具

    1. Diffy是什么 Diffy是一个开源的自动化测试工具,是一种Diff测试技术.它能够自动检测基于Apache Thrift或者基于HTTP的服务.通过同时运行新/老代码,对比运行结果,发现潜在 ...

  8. 推荐五款优秀的PHP代码重构工具

    在软件工程学里,重构代码一词通常是指在不改变代码的外部行为情况下而修改源代码.软件重构需要借助工具完成,而重构工具能够修改代码同时修改所有引用该代码的地方.本文收集了五款出色的PHP代码重构工具,以帮 ...

  9. 推荐两款好用的反编译工具(Luyten,Jadx)

    使用JD-Gui打开单个.class文件,总是报错// INTERNAL ERROR 但当我用jd-gui反编译前面操作获得的jar文件的时,但有一部分类不能显示出来--constants类,仅仅显示 ...

随机推荐

  1. 微信小程序组件设计规范

    微信小程序组件设计规范 组件化开发的思想贯穿着我开发设计过程的始终.在过去很长一段时间里,我都受益于这种思想. 组件可复用 - 减少了重复代码量 组件做为抽离的功能单元 - 方便维护 组件作为temp ...

  2. SSH实现免密登陆

    SSH实现免密登陆配置 ssh实现免密码登录的配置过程,主要分为以下几个步骤: serverA生成密钥,包括私钥和公钥 serverA将公钥传到serverB上 serverA上配置serverB登陆 ...

  3. Linux_配置加密的https

    一.配置https 1.安装好httpd服务后,安装mod_ssl模块 //首先查看是否安装mod_ssl [root@localhost ~]# rpm -qa | grep mod_ssl //安 ...

  4. shell 读取某个目录下的所有文件

    #!/bin/shFILE_PATH="xxx" xxx:路径cd $FILE_PATHfor FILE in `ls` do echo $FILE done

  5. STM32串口编程易错点

    注意   串口发送函数 使用STM官方的LIB 中的库函数发送之后 加一点延时   否则会错误  接收数据不正常 正确做法是  加上等待发送完成

  6. Linux Access.conf安全配置

    access.conf is the configuration file used to logins to the Linux or Unix systems. This file is loca ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十五)——集中式接口文档实现

    之前有小伙伴在评论区留言说如何集成swagger,最开始没有想透给了对方一个似是而非的回答.实际上后来下来想了一下,用.NET5 提供的Source Generator其实可以很方便的实现接口集成.今 ...

  8. 解决latex数学公式渲染不正确及行内公式中文渲染乱码问题

    问题 之前数学OCR渲染数学公式用的 katex 来渲染,前端解决方案,我们的进行公式编写的时候是需要输入中文的,如: Fe_{2}O_{3} + 3 C O \stackrel{高温}{=} 2 F ...

  9. MegEngine推理性能优化

    MegEngine推理性能优化 MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案 ...

  10. MindSpore平台系统类

    MindSpore平台系统类 Q:MindSpore只能在华为自己的NPU上跑么? A: MindSpore同时支持华为自己的Ascend NPU.GPU与CPU,是支持异构算力的. Q:MindSp ...