今天遇到一个bug,比较有意思。
情景:
- 测试一个钻石提现功能,条件是账户里必须有价值等于或者超过50美元的钻石,才允许提现,否则无法进行下一步。
测试步骤:
- 提现页面输入一个小于50美元的提现金额,不点击下一步
- 进入手机shell,获取root权限,执行 am start -n com.cs.test/.activity.WithdrawCardListActivity,回车之后就能进入选择银行卡页面
- 输入银行卡卡号,下一步,提现了
这个测试的意图就是,在不满足判断条件的情况下,越过app的验证,继续后面的操作。
这里要学习的就是 am start -n com.cs.test/.activity.WithdrawCardListActivity 这个命令。
前面的篇章有介绍过,am start -n <包名>/<包名>.<Activity名> 这条命令的作用就是启动程序或者直接启动某个Activity,就像这个测试中的跳转一样。
那么问题来了,怎么获取这个app的包名和Activity名呢?
查看包名的方法有以下两种但不局限于这两种:
- aapt dump badging <apk文件路径> ,aapt是SDK的一个小工具,在build-tools里面
- 使用re文件管理器,查看/data/app
查看Activity名的方法:
- adb shell dumpsys activity | grep "Card" -----Linux
- adb shell dumpsys activity | findstr "Card" -----Windows
记得一定要进行过滤,因为一个app会有很多个Activity,不过滤会找得头都晕的。
然后,问题又来了,aapt 这个命令又该怎么用呢?知道aapt可以用来查看包名、activity名、版本等很多信息,后面用到再逐个去了解,先知道有这么回事儿就行了。