这篇博文内容,是基于之前的配置而来的。我们可以先回顾一下之前博文,Windows搭建mac黑苹果系统WebDriverAgent重签名爬坑记

今天来分享下如何通过 tidevice实现IOS自动化测试,在之前的博文,也有介绍过Airtest基本使用。针对Airtest暂且就不过多介绍了,今天主角是tidevice,具体我们来看。

tidevice

了解到tidevice,是在2021 MTSC 上海站 的议题中看到的,新知识,就来琢磨一番。

tidevice简介

在使用工具之前,都得先了解下其特性,这样才能更好的运用。

tidevice是阿里开源的一款工具,项目地址。详细可以看项目中的描述,简单概括就是,该工具基于python语言,可以跨平台、开源脱离Mac进行IOS自动化测试。

tidevice命令

tidevice安装

python版本3.6以上,使用命令

pip3 install -U "tidevice[openssl]"

安装成功如下所示:

如果安装失败,可以使用命令(不过这种方法安装,配对功能就没有了,因为没有办法进行签名)

pip3 install -U tidevice

查看tidevice版本

tidevice version

列出连接设备

tidevice list

tidevice list --json

操作如下所示:

应用管理

安装应用

tidevice install example.ipa

指定设备安装

tidevice --udid $UDID install https://example.org/example.ipa

卸载应用

tidevice uninstall com.example.demo

启动应用

tidevice launch com.example.demo

停止应用

tidevice kill com.example.demo

查看已安装应用

tidevice applist

Run XCTest

运行XCTest

注意:在操作运行XCTest时,首先确保手机上安装了可用的WebDriverAgent

tidevice xctest -B $WebDriverAgent重签名的包名

包名可以通过 tidevice applist 命令查看

运行日志如下所示:

C:\Users>tidevice xctest -B com.yihuqingjiu.WebDriverAgentRunner.xctrunner

[I 211208 20:59:32 _device:912] BundleID: com.yihuqingjiu.WebDriverAgentRunner.xctrunner

[I 211208 20:59:32 _device:914] DeviceIdentifier: 0000XXXXX-XXXXXX01

[I 211208 20:59:32 _device:775] SignIdentity: 'Apple Development: XXXXXXXXXX'

[I 211208 20:59:32 _device:843] Launch 'com.yihuqingjiu.WebDriverAgentRunner.xctrunner' pid: 14259

[I 211208 20:59:32 _device:1006] ProductVersion: 15.0.2

[I 211208 20:59:33 _device:963] Test runner ready detected

[I 211208 20:59:33 _device:956] Start execute test plan with IDE version: 29

[I 211208 20:59:33 _device:878] WebDriverAgent start successfully

运行成功后,可以访问:http://localhost:8200/status 查看是否正常返回json数据,如下所示:

按之前的博文,访问:http://localhost:8200/inspector 可以展示手机面板,但现在高系统版本已不支持。

修改监听端口为8200, 并显示调试日志

tidevice xctest -B $WebDriverAgent重签名的包名 -e USB_PORT:8200 --debug

结合Airtest使用,操作到这里就可以使用了,后面讲解。

Relay

转发请求

转发请求到手机,类似于iproxy

tidevice relay 8100 8100

转发并把传输内容print出来

转发并把传输的内容用hexdump的方法print出来

tidevice relay -x 8100 8100

运行WebDriverAgent

运行 XCTest 并在PC上监听8200端口转发到手机8100服务

wdaproxy这个命令会同时调用xctest和relay,另外当wda退出时,会自动重新启动xctest

tidevice wdaproxy -B $WebDriverAgent重签名的包名 --port 8200

启动后你就可以使用Appium 或者 facebook-wda 来运行iOS自动化了

这个点后续再细说。

查看设备信息

设备基本信息

tidevice info

其他操作

rm cat pull push stat tree rmtree mkdir

tidevice fsync -h

其他常用

重启

tidevice reboot

截图

tidevice screenshot screenshot.jpg

输出日志

tidevice syslog

性能采集

命令行查看

tidevice perf -B com.example.demo

Airtest

Airtest连接IOS设备

在运行wda后,在airtest的设备连接窗口,输入命令连接设备,命令如下:

http+usbmux://DeviceIdentifier

DeviceIdentifier 参数在运行wda后,窗口会显示,复制过来即可。连接成功后,窗口展示如下,就可以操作app了。

到这里,我们设备已经连接好了,就可以开始码代码了,具体的代码编写demo官网也有。今天的demo就不细说了,也很简单。

运行代码

简单写了个搜索自己博客的案例,如下所示:

# -*- encoding=utf8 -*-
__author__ = "wenyihuqingjiu" from airtest.core.api import *
from poco.drivers.ios import iosPoco auto_setup(__file__)
connect_device("iOS:///http+usbmux://00008110-XXXXXXXX801E")
poco = iosPoco()
snapshot()
poco("Safari浏览器").click()
touch(Template(r"tpl1630501963721.png", record_pos=(0.107, -0.565), resolution=(828, 1792)))
sleep(5.0)
touch(Template(r"tpl1630552947122.png", record_pos=(-0.296, -0.425), resolution=(828, 1792)))
text("温一壶清酒 博客园")
touch(Template(r"tpl1630553104752.png", record_pos=(0.357, -0.43), resolution=(828, 1792)))
touch(Template(r"tpl1639144259796.png", record_pos=(-0.213, -0.623), resolution=(1170, 2532)))
sleep(5.0)
assert_exists(Template(r"tpl1630553184115.png", record_pos=(0.019, -0.488), resolution=(828, 1792)), "进入博客首页")

我们运行代码,来看一下效果,如下所示,画质不是太好

生成报告

代码运行结束后,可以直接生成报告,我们生成报告看一下效果,每一步操作都有记录并截图,如下所示:

报错总结

执行tidevice命令,提示无法连接

tidevice安装后,执行命令 tidevice list ,报错如下所示:

该问题,下载itunes 得到解决。

启动wda,提示Could not start service

启动wda时,会提示Could not start service,报错如下:

该问题是在下载版本zip的时候失败了,所以启动失败。当下载成功的时候,就启动成功了,如下所示:

airtest连接真机失败

通过airtest连接真机时,报错提示如下:

在确定airtest是最新版本的情况下,使用最新webdriveragent重签名了包,再次连接就正常了。

Airtest结合tidevice实现IOS自动化测试的更多相关文章

  1. 零成本实现Android/iOS自动化测试:基于Appium和Test Perfect

    https://item.taobao.com/item.htm?spm=a230r.1.14.14.42KJ3L&id=527677900735&ns=1&abbucket= ...

  2. mac上搭建appium+IOS自动化测试环境(一)

    阅读须知 由于OS X系统最近才开始接触,所以有些东西也不是很清楚,这里只提供方法不提供原理,能解释清楚的我也会尽量解释.可能也有一些地方说的不严谨或有错的,还望大家指点一二. 实验环境 操作系统: ...

  3. InstrumentDriver,对iOS自动化测试说 Yes!

    InstrumentDriver 是 Mobile自动化小组最近实现的基于 instrument,针对 iOS 的自动化测试框架,目前支持 java 语言编写测试用例. 研究过iOS自动化测试的同学肯 ...

  4. mac上搭建appium+IOS自动化测试环境(二)

    上一篇: mac上搭建appium+IOS自动化测试环境(一) 9.安装appium-xcuitest-driver依赖 进入WebDriverAgent安装目录,运行bootstrap 首先进入目录 ...

  5. appium ios 自动化测试

    iOS自动化测试:Appium 从入门到实践https://www.jianshu.com/p/43f858180557appium自动化测试iOS Demohttps://www.jianshu.c ...

  6. 【Mac + Appium + Python3.6学习(四)】之常用的IOS自动化测试API总结

    环境: Appium:1.9.1 Appium-desktop:1.7.1 Xcode:10.0 IOS:iPhone5S(10.3.3) Mac:10.13.6 ①获取手机屏幕size:长.宽 &l ...

  7. 【Mac + Appium + Python3.6学习(三)】之IOS自动化测试环境配置

    在做这一节之前先配置我的另一篇文章所需要安装的前提准备条件:<[Mac + Appium学习(一)]之安装Appium环境前提准备> 一.安装IOS自动化测试环境 配置环境: Appium ...

  8. iOS自动化测试的那些干货

    前言 如果有测试大佬发现内容不对,欢迎指正,我会及时修改. 大多数的iOS App(没有持续集成)迭代流程是这样的 也就是说,测试是发布之前的最后一道关卡.如果bug不能在测试中发现,那么bug就会抵 ...

  9. IOS自动化测试环境搭建(Python & Java)

         一.前言 IOS的App自动化测试与Android的一样,也可以用appium来进行.但是IOS自动化依赖苹果的osx系统.Xcode构建等,且封闭的系统需要苹果开发者账号才可以驱动真机.A ...

随机推荐

  1. CodeGuide 300+文档、100+代码库,一个指导程序员写代码的,Github 仓库开源啦!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.路怎样走,让你们自己挑 B站 视频:https://www.bilibili.com/vi ...

  2. [luogu6466]分散层叠算法

    做法1 对于每一个询问,直接暴力在每一个序列中二分查询 时间复杂度为$o(nk)-o(k\log n)$ 做法2 将所有序列合并后排序,并对每一个元素预处理出每个序列中第一个大于等于其的元素(位置), ...

  3. [bzoj5510]唱跳rap和篮球

    显然答案可以理解为有(不是仅有)0对情况-1对情况+2对情况-- 考虑这个怎么计算,先计算这t对情况的位置,有c(n-3t,t)种情况(可以理解为将这4个点缩为1个,然后再从中选t个位置),然后相当于 ...

  4. FastAPI(六十二)实战开发《在线课程学习系统》需求分析

    前言 基础的分享我们已经分享了六十篇,那么我们这次分享开始将用一系列的文章分享实战课程.我们分享的系统是在线学习系统.我们会分成不同的模块进行分享.我们的目的是带着大家去用fastapi去实战一次,开 ...

  5. 力扣 - 剑指 Offer 54. 二叉搜索树的第k大节点

    题目 剑指 Offer 54. 二叉搜索树的第k大节点 思路1 二叉搜索树的特性就是中序遍历结果为递增序列,而题目要求的是第 k 大节点,所以就应该是要遍历结果为降序, 按照先遍历左子树.输出节点.遍 ...

  6. 我在组内的Java问题排查分享

    前言 最近翻看以前写的 PPT, 发现了在2019年做的一次技术分享,关于 Java 问题排查,由于没什么公司机密可言,整理下分享给大家~ 线上问题处理流程 直接放PPT截图吧,现在看来依然不过时 问 ...

  7. CF513G3 Inversions problem

    考虑记\(f_{i,j,k}\)为\(k\)次操作后,\(i,j\)位置被调换的概率. 那么我们考虑枚举我们要算的答案即\((x,y)\). 那么有\(\frac{n * (n + 1)}{2}\)种 ...

  8. Codeforces 679E - Bear and Bad Powers of 42(线段树+势能分析)

    Codeforces 题目传送门 & 洛谷题目传送门 这个 \(42\) 的条件非常奇怪,不过注意到本题 \(a_i\) 范围的最大值为 \(10^{14}\),而在值域范围内 \(42\) ...

  9. C语言按行读入文件

    getline() 函数无论一行多长,动态分配内存读入行 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <s ...

  10. CSS3单行文本两端对齐

    CSS3实现单行文本两端对齐 p { height: 24px; text-align: justify; text-last-align: justify; } p::after { display ...