下面是本人关于XTest的一些肤浅的分析思考:
1,既然XTest这么神奇,那么它到底是怎么工作的?
首先我查看桌面xtestserver文件属性,查看到其指向一个run.bat批处理文件,打开这个文件,看到如下命令:
run.bat 可以看到run.bat主要干了三件事:
1)设置java_home,android_home,path环境变量(真是辛苦腾讯的同学,连环境变量配置的步骤都为使用Xtest的同学省去了,阿门);
2)call 当前路径下xerver文件下xteststart.bat批处理文件;
3)暂停,等待后续操作。
下面进入xteststart.bat:
xteststart.bat 这里设置了nodejs运行环境变量,开启了npm。
结合控制台输出:XTestServer
大致可以看出,这一步开启了远程云主机,这个时候我们就可以通过http://localhost:3000 控制台进行操作了。
接下来我们打开\xserver\public\index.html,这个界面就是控制台的首页:
Xtext控制台的首页这里做了些js库和组件引入的工作。
那么控制台操作入口在哪里在哪里呢?答案是angularApp.js
你问我是怎么找到的,看下面(嘿嘿,捂脸)
angularApp.js好了,既然找到了控制台操作入口,后面的内容就按图索骥以后再慢慢分析吧。
至此,我们的理解比较肤浅,简单总结一下,XTest是怎么工作的呢?
首先,这套工具为我们配置了java、android、nodejs运行环境,并通过nodejs搭建远程云平台为我们提供后台服务支持,同时为还我们提供了可视化的后台控制界面,通过安装Xtest.apk到手机,从而实现通过http协议和远程云平台的通信。
2,作为Android开发底层工作者,到这里我就比较好奇,Xtest.apk在我们手机上到底干了些什么?
Xtest.apk既然找到了人家的apk在哪里,下面我们就进行反编译,要是能挖到宝呢?谁知道呢?(开心)此处反编译省略省略省略,作为Android开发底层工作者,黑科技好好练练。(嘿嘿)
很不幸,人家进行了代码混淆和加密,将apk文件完全转化成了hex,这玩意怎么读怎么解(捂脸)。
image.png那下面我们就开始猜吧:
首先,打开Xtest app,选择待测应用,点击开始录制脚本后,神奇的打开了我们的待测应用,在应用右中贴边的位置出现悬浮按钮,点击悬浮按钮,便开始录制自动测试脚本,此处申请了悬浮按钮权限,别问我怎么知道的,请问你不申请怎么使用悬浮按钮呢。
此时Xtest就开始记录用户的操作了,此时XTest就开始了它繁忙的录屏工作了。
回答上一篇的第二个坑,为什么5.0以下需要root,以上不需要呢?因为使用悬浮按钮和录屏5.0以下需要root权限以上不需要啊!
接下来Xtest app的工作无非就是获取屏幕和用户输入信息,记录并上传服务器,BABALA的。
3,现在你有没有好奇,XTest自动测试脚本到底是怎么工作的呢?反正我比较好奇。
testcase code看代码,以下是对XTest生成的testcase code的简单分析:
tap:点击 id-tab2,text-海淘,元素树->....TextView元素;
sleep:睡一会(延时);
tscoll:滑动 监听到手指从x,y(646,1296)滑动到x,y(1000,523)像素点(这是一个从左下到右上的滑动操作),当前屏幕分辨率为1080x1920。
下面的内容也是连蒙带猜:
上面的testcase code跟python编写的testcase code很类似,是另一种脚本语言还是进行了封装呢?母鸡。
获取Android屏幕信息,监听用户操作怎么做到呢?由于在xserverpublic下没有找到hierarchyviewer工具,所以我猜想XTest使用的是类似facebook stetho的hierarchyviewer工具或者对hierarchyviewer进行了一些改造。
至此我们进行一下大致的总结了,XTest究竟干了什么,使我们自动化测试变得如此便捷可行呢?
XTest通过提供远程云平台和可视化界面,为我们提供后台服务支持,通过Xtest app录制屏幕信息监听用户操作,使用hierarchyviewer工具获取屏幕信息,并将用户操作记录和转化为自动测试脚本,上传和保存到远程云平台,从而实现了一套完整高效便捷自动测试脚本录制和测试工作。
网友评论