自动化测试工具APPium初探

Posted 猎户攻防实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化测试工具APPium初探相关的知识,希望对你有一定的参考价值。

本文共 2121 字,预计阅读时间 13 分钟



0x00 前言


前段时间由于给小破站开启了青少年模式,结果密码给忘记了。导致只能看一些学习课堂和书法之类的相关视频。虽然有找回密码选项,但是找回密码需要发送本人手持身份证的照片。而后在输入密码的时候试了多次,除了提示"密码输入错误,请重试"外,没有其他限制,也没有网络请求。由于是4位的数字密码,我想如果我写个自动输入密码的脚本,利用生成  0000 ~  9999 的密码字典,应该就可以找到正确的密码。

经搜索发现,ios自动化的框架有很多,如UIAutomation、XCTest、KIF、APPium等。其中UIAutomation和APPium无需源码就可以进行测试,而且APPium支持多种语言,所以这里我选择了  『APPium』 (http://appium.io/) 。


0x01 环境搭建与自动化测试


APPium介绍


APPium是一个开源工具,用于自动化iOS手机、android手机和Windows桌面平台上的原生、移动Web和混合应用。它使用WebDriver协议驱动iOS,Android和Windows应用程序。APPium是跨平台的,它允许用同样的API对多平台(iOS、Android、Windows)写测试,做到在iOS、Android和Windows测试套件之间复用代码。而且支持多种语言,如Java、Python、php、Ruby等等。

我这里是在MacOS系统下进行的测试,采用了手机版本为13.5.1(iOS真机),开发语言选择了Python3.8。

下面就开始搭建环境进行测试吧。


APPium安装


首先是APPium的安装。

如果没有  『Homebrew』 (https://brew.sh/) ,则需要先安装:




安装Node:


自动化测试工具APPium初探


安装相关依赖与软件:


自动化测试工具APPium初探


可以参考官方文档进行安装:http://appium.io/docs/en/about-appium/getting-started/
或直接安装APPium桌面程序:https://github.com/appium/appium-desktop/releases



安装后执行  appium-doctor --ios 指令,可以查看与iOS相关配置是否完整。如果有哪一项是打叉的,则根据安装说明进行安装就可以了:


自动化测试工具APPium初探

APPium安装过程



下图是全部配置都成功的情况:


自动化测试工具APPium初探

APPium安装成功



配置WebDriverAgent


由于需要在真机下进行测试,所以还需要配置  『WebDriverAgent』 (https://github.com/facebookarchive/WebDriverAgent) 。

下载并进入到WebDriverAgent目录,然后执行  ./Scripts/bootstrap.sh 下载安装依赖库:


自动化测试工具APPium初探

WebDriverAgent安装过程



双击  WebDriverAgent.xcodeproj ,使用XCode打开WebDriverAgent项目,配置  WebDriverAgentLib 、  WebDriverAgentRunner 以及  IntegrationApp 的开发者信息:


自动化测试工具APPium初探

WebDriverAgent配置过程



发现有错误,接下来修改  WebDriverAgentRunner 和  IntegrationApp 的  Bundle identifier :


自动化测试工具APPium初探

自动化测试工具APPium初探

WebDriverAgent配置过程



修改后发现无报错信息。然后数据线连接真机,进行安装。

发现编译失败,将  assign 改成  unsafe_unretained ,然后重新使用  Command + U 进行编译安装测试:


自动化测试工具APPium初探

编译失败处理



然后访问  http://手机IP:8100 :


自动化测试工具APPium初探

访问状态接口



需要手机与电脑处于同一网络下,我这里为了测试,电脑连接的是手机的热点。



此时WebDriverAgent配置成功。如果在APPium中使用时,还需替换APPium中的WebDriverAgent。

我这里的路径为:  /Applications/APPium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/node_modules/WebDriverAgent 。

直接替换即可,或者直接修改APPium中的WebDriverAgent,效果一样。


自动化脚本编写


接下来就是自动化脚本的编写。

可以通过使用APPium应用程序查看iOS元素特征。启动APPium,左上角菜单栏选择『APPium - New Session Window...』或快捷键  Command + N :


自动化测试工具APPium初探

查看iOS元素特征



填写对应的启动参数。一些必要的参数如下:


  • platformName 是测试平台的名称,是iOS或者Android

  • udid 在iOS真机测试时需要,可以通过 ios-deploy --list_bundle_id 查询

  • bundleId 需测试程序的bundle的ID,可以通过 ios-deploy --list_bundle_id 查询



配置完成后,点击『Start Session』,手机会自动打开『哔哩哔哩』APP:


自动化测试工具APPium初探

自动打开『哔哩哔哩』



可以利用XPath获取元素并进行输入、点击等一系列操作。接下来就可以通过使用Python脚本来进行自动化测试了。

需要安装APPium的Python依赖库:


自动化测试工具APPium初探


编写启动APP的脚本:


自动化测试工具APPium初探


接下来需要进入到输入密码界面,依次需要点击『我的-青少年模式-修改密码(或者关闭青少年模式)』。

继续编写脚本实现自动化:


自动化测试工具APPium初探


运行效果如下:


自动化测试工具APPium初探

自动进入关闭青少年模式



如果已经打开APP超过40分钟,或者当前为非正常时段,则会直接显示输入密码界面。



自动化测试工具APPium初探

条件触发青少年模式



可以利用XPath获取密码输入框元素,输入密码后并点击『立即验证』按钮:


自动化测试工具APPium初探


完整代码如下:


自动化测试工具APPium初探


由上面执行的结果来看,每次输入前都会等待一会再输入,所以看起来速度很慢:


自动化测试工具APPium初探

输入前等待



通过找到上图标记的  XCUIElementTypeOther ,然后使用  Send Keys 直接传入一个四位数字:


自动化测试工具APPium初探


修改过后,发现速度确实有所提升,但是总体速度还是很慢的。经过搜索发现,有帖子说在iOS模拟器上和安卓上会快一些,由于程序无法安装到iOS模拟器,所以这里选择了在安卓设备上进行测试。


安卓环境下测试


安卓的环境需要安装Android SDK、JDK、安卓模拟器(真机也可以,这里采用的是Genymotion模拟器)。安装后配置  JAVA_HOME 、  ANDROID_HOME 。

然后通过执行  appium-doctor --android 来查看是否配置成功:


自动化测试工具APPium初探

安卓环境安装



查看Android元素信息可以使用  uiautomatorviewer 。位于Android SDK下的  /tools/bin/ 目录。

启动模拟器并打开测试的APP,然后打开  uiautomatorviewer 。选择『Device Screenshot』(从左至右第二个图标):


自动化测试工具APPium初探

使用模拟器打开APP



通过  tv.danmaku.bili:id/et_code 可以定位到编辑框,按钮『立即验证』可以通过  tv.danmaku.bili:id/operate 来定位。

这里直接贴使用安卓下自动化爆破的脚本:


自动化测试工具APPium初探


对比之下,在Android下的效率是很快的。而且经过测试,安卓破解100次,耗时约139.14s,而ios破解50次,耗时约262.56s。

所以最后我采用了安卓环境下进行破解,最终成功跑出了密码:4578。


0x02 思考


由于输入密码的时候并没有发生网络请求,猜测密码应该保存在本地。一般情况下本地存储采用SQLite数据库或者是SharePreferences中。

先查看SharePreferences中的文件,进入  /data/data/tv.danmaku.bili/shared_prefs 目录:


自动化测试工具APPium初探

shared_prefs目录



发现文件  bili_teenagers_mode_preferences20449166.xml ,根据文件名发现文件就是和青少年模式有关的配置文件:


自动化测试工具APPium初探

teenagers_mode文件



发现一串神秘字符串,通过cmd5查询:  c2890d44d06bafb6c7b4aa194857ccbc=md5(4578) ,正好是设置的密码。

另外由于登录前可以看到所有的内容,而登录开启青少年模式的账户时,就会进入青少年模式,只能看特定内容。所以退出账户重新登录并抓包,可以看到如下的请求:


重新登录抓包



也成功找到经过md5加密的密码。


0x03 总结


这次是因为B站开启了青少年模式,后来密码给忘记了。当时只想着用爆破的方式来解决了,没有想着抓包或者查看保存的数据文件。后来爆破出密码后,又发现可以通过查看配置文件的方式和抓包的方式找到密码。而且之前是打算用iOS作为测试的,后来因为效率的问题,才转战安卓。如果使用安卓的话,自动化测试工具也很多,例如UIAutomator2等。

本文其实就是一个流水账,记录一下自己找回青少年模式密码的过程,可能比较粗糙。有关IOS真机调试更详细的教程可以参考  『使用APPium进行iOS的真机自动化测试』 (https://www.jianshu.com/p/ae8846736dba) 。


喜欢您来,喜欢您再来

以上是关于自动化测试工具APPium初探的主要内容,如果未能解决你的问题,请参考以下文章

Appium学习笔记——Appium初探,下载与安装以及初步的录制尝试

Appnium移动自动化框架初探

初探appium之元素定位

有关于appium自动化测试的问题

APP自动化测试之appium连接真机启动app

APP自动化测试appium环境怎么搭建?