自动化测试工具APPium初探
Posted 猎户攻防实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化测试工具APPium初探相关的知识,希望对你有一定的参考价值。
前段时间由于给小破站开启了青少年模式,结果密码给忘记了。导致只能看一些学习课堂和书法之类的相关视频。虽然有找回密码选项,但是找回密码需要发送本人手持身份证的照片。而后在输入密码的时候试了多次,除了提示"密码输入错误,请重试"外,没有其他限制,也没有网络请求。由于是4位的数字密码,我想如果我写个自动输入密码的脚本,利用生成
0000 ~
9999 的密码字典,应该就可以找到正确的密码。
经搜索发现,ios自动化的框架有很多,如UIAutomation、XCTest、KIF、APPium等。其中UIAutomation和APPium无需源码就可以进行测试,而且APPium支持多种语言,所以这里我选择了
『APPium』 (http://appium.io/) 。
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。
如果没有
『Homebrew』 (https://brew.sh/) ,则需要先安装:
“
可以参考官方文档进行安装:http://appium.io/docs/en/about-appium/getting-started/
或直接安装APPium桌面程序:https://github.com/appium/appium-desktop/releases
安装后执行
appium-doctor --ios 指令,可以查看与iOS相关配置是否完整。如果有哪一项是打叉的,则根据安装说明进行安装就可以了:
APPium安装过程
APPium安装成功
由于需要在真机下进行测试,所以还需要配置
『WebDriverAgent』 (https://github.com/facebookarchive/WebDriverAgent) 。
下载并进入到WebDriverAgent目录,然后执行
./Scripts/bootstrap.sh 下载安装依赖库:
WebDriverAgent安装过程
双击
WebDriverAgent.xcodeproj ,使用XCode打开WebDriverAgent项目,配置
WebDriverAgentLib 、
WebDriverAgentRunner 以及
IntegrationApp 的开发者信息:
WebDriverAgent配置过程
发现有错误,接下来修改
WebDriverAgentRunner 和
IntegrationApp 的
Bundle identifier :
WebDriverAgent配置过程
修改后发现无报错信息。然后数据线连接真机,进行安装。
发现编译失败,将
assign 改成
unsafe_unretained ,然后重新使用
Command + U 进行编译安装测试:
编译失败处理
访问状态接口
“
需要手机与电脑处于同一网络下,我这里为了测试,电脑连接的是手机的热点。
此时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 :
查看iOS元素特征
platformName 是测试平台的名称,是iOS或者Android
udid 在iOS真机测试时需要,可以通过 ios-deploy --list_bundle_id 查询
bundleId 需测试程序的bundle的ID,可以通过 ios-deploy --list_bundle_id 查询
配置完成后,点击『Start Session』,手机会自动打开『哔哩哔哩』APP:
自动打开『哔哩哔哩』
可以利用XPath获取元素并进行输入、点击等一系列操作。接下来就可以通过使用Python脚本来进行自动化测试了。
接下来需要进入到输入密码界面,依次需要点击『我的-青少年模式-修改密码(或者关闭青少年模式)』。
自动进入关闭青少年模式
“
如果已经打开APP超过40分钟,或者当前为非正常时段,则会直接显示输入密码界面。
条件触发青少年模式
可以利用XPath获取密码输入框元素,输入密码后并点击『立即验证』按钮:
由上面执行的结果来看,每次输入前都会等待一会再输入,所以看起来速度很慢:
输入前等待
通过找到上图标记的
XCUIElementTypeOther ,然后使用
Send Keys 直接传入一个四位数字:
修改过后,发现速度确实有所提升,但是总体速度还是很慢的。经过搜索发现,有帖子说在iOS模拟器上和安卓上会快一些,由于程序无法安装到iOS模拟器,所以这里选择了在安卓设备上进行测试。
安卓的环境需要安装Android SDK、JDK、安卓模拟器(真机也可以,这里采用的是Genymotion模拟器)。安装后配置
JAVA_HOME 、
ANDROID_HOME 。
然后通过执行
appium-doctor --android 来查看是否配置成功:
安卓环境安装
查看Android元素信息可以使用
uiautomatorviewer 。位于Android SDK下的
/tools/bin/ 目录。
启动模拟器并打开测试的APP,然后打开
uiautomatorviewer 。选择『Device Screenshot』(从左至右第二个图标):
使用模拟器打开APP
通过
tv.danmaku.bili:id/et_code 可以定位到编辑框,按钮『立即验证』可以通过
tv.danmaku.bili:id/operate 来定位。
对比之下,在Android下的效率是很快的。而且经过测试,安卓破解100次,耗时约139.14s,而ios破解50次,耗时约262.56s。
所以最后我采用了安卓环境下进行破解,最终成功跑出了密码:4578。
由于输入密码的时候并没有发生网络请求,猜测密码应该保存在本地。一般情况下本地存储采用SQLite数据库或者是SharePreferences中。
先查看SharePreferences中的文件,进入
/data/data/tv.danmaku.bili/shared_prefs 目录:
shared_prefs目录
发现文件
bili_teenagers_mode_preferences20449166.xml ,根据文件名发现文件就是和青少年模式有关的配置文件:
teenagers_mode文件
发现一串神秘字符串,通过cmd5查询:
c2890d44d06bafb6c7b4aa194857ccbc=md5(4578) ,正好是设置的密码。
另外由于登录前可以看到所有的内容,而登录开启青少年模式的账户时,就会进入青少年模式,只能看特定内容。所以退出账户重新登录并抓包,可以看到如下的请求:
这次是因为B站开启了青少年模式,后来密码给忘记了。当时只想着用爆破的方式来解决了,没有想着抓包或者查看保存的数据文件。后来爆破出密码后,又发现可以通过查看配置文件的方式和抓包的方式找到密码。而且之前是打算用iOS作为测试的,后来因为效率的问题,才转战安卓。如果使用安卓的话,自动化测试工具也很多,例如UIAutomator2等。
本文其实就是一个流水账,记录一下自己找回青少年模式密码的过程,可能比较粗糙。有关IOS真机调试更详细的教程可以参考
『使用APPium进行iOS的真机自动化测试』 (https://www.jianshu.com/p/ae8846736dba) 。
以上是关于自动化测试工具APPium初探的主要内容,如果未能解决你的问题,请参考以下文章
Appium学习笔记——Appium初探,下载与安装以及初步的录制尝试
Appnium移动自动化框架初探
初探appium之元素定位
有关于appium自动化测试的问题
APP自动化测试之appium连接真机启动app
APP自动化测试appium环境怎么搭建?