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

如果之前做过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. 使用autotools工具用configure、make、make install编译安装linux工程的详细步骤

    使用autotools工具用configure.make.make install编译安装linux工程的详细步骤 转载tmxkwzy 最后发布于2016-11-24 10:20:15 阅读数 324 ...

  2. Linux_yum工具基本概述

    一.什么是yum 1️⃣:yum是yellowdog update manager的简称,它能够实现rpm管理的所有操作,并能够自动解决各rpm包之间的依赖关系. 2️⃣:yum是rpm的前端工具,是 ...

  3. kubernetes架构及deployment应用(4)

    Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务. 一.master节点 Master 是 Kubernetes Cluster ...

  4. vue实例属性之el,template,render--(转载)

    转载链接:https://www.cnblogs.com/camille666/p/vue_instance_prop_el_template_render.html 一.el,template,re ...

  5. MyBatis 高级查询之多对多查询(十一)

    高级查询之多对多查询 查询条件:根据玩家名,查询游戏信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据玩家名查询游戏 * @param name ...

  6. easyui datagrid 自定义单元格单击与双击事件(Day_38)

    $(function(){ $('#tableId').datagrid({//单击事件   onClickRow:function(rowIndex,rowData){  alert("单 ...

  7. 90%的人都不知道的Node.js 依赖关系管理(下)

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/node-dependency-manage ...

  8. CAS(Compare and Swap)无锁算法-学习笔记

    非阻塞同步算法与CAS(Compare and Swap)无锁算法 这篇问题对java的CAS讲的非常透彻! 锁的代价 1. 内核态的锁的时候需要操作系统进行一次上下文切换,加锁.释放锁会导致比较多的 ...

  9. supervisor 使 celery后台运行

    1.安装 supervisor pip install supervisor  2.创建supervisor配置文件,命令如下: 进入项目文件 echo_supervisord_conf > s ...

  10. GO文件读写01---读文件

    打开文件 package main import ( "fmt" "os" ) /* buffer 缓冲区 utility 便利的工具 util 便捷工具(傻瓜 ...