一、ADB基础

1.1、ADB工具介绍

ADB(Android Debug Bridge)是一个通用命令行工具,也是Android软件测试开发工作者常用的调试工具

➢ ADB可以用来安装卸载软件、管理安卓系统软件、启动测试、抓取操作日志等【APP专项+稳定性】

1.2、ADB环境安装

➢ 下载安装包:

        ➢ 官网下载 

        ➢ 网盘链接已提供,需要可留言

➢ 安装步骤:

        ➢ 安装安卓SDK

        ➢ 安装ADB

        ➢ 配置环境变量(计算机右键—属性—高级系统设置—环境变量--新增系统变量)

➢ 结果验证:

二、常用的ADB命令介绍

2.1、显示系统中全部设备

        ➢检查接入的设备:adb devices

2.2、开启或关闭ADB服务

        ➢ 开启adb服务:adb start-server

        ➢ 关闭adb服务:adb kill-server

备注:

        # 接入设备状态不正常(offline)
        # 1.重启模拟器/手机
        # 2.重启ADB服务
        adb kill-server
        adb start-server

2.3、连接/断开设备

        ➢ 连接设置:

                ➢ 命令:adb connect IP

                ➢ 示例:adb connect 127.0.0.1:7555

        ➢ 断开设备:

                ➢ 命令:adb disconnect IP

                ➢ 示例:adb disconnect 127.0.0.1:7555

备注:

        # 连接设备
        adb connect IP:端口

2.4、安装/卸载软件包

场景:测试Android设备过多,建议使用adb命令安装更高效

面试:

  1. adb安装APP软件和卸载APP软件有啥区别?

    • 关键不一样,安装install,卸载uninstall

    • 安装和卸载跟的内容不一样,卸载后跟包名

  • 安装:adb install apk路径

  • 卸载:adb uninstall 包名

屏幕清除:cls

        ➢ 安装软件:

                ➢ 命令:adb install APK路径

                ➢ 选项:[-r] 覆盖安装时保留数据和缓存文件。

                ➢ 示例:adb install soubaoShopMobile-release.apk

                ➢ 示例:adb install -r soubaoShopMobile-release.apk

        ➢ 卸载软件:

                ➢ 命令:adb uninstall apk包名

                ➢选项:[-k] 卸载时保留数据和缓存文件

                ➢ 示例:adb uninstall com.tpshop.malls

2.5、adb工作原理

ADB 说明: ADB 全名 Android Debug Bridge,是一个手机调试工具

⚫ Client端:运行在开发机器中,即你的开发电脑,用来 发送 adb 命令;

⚫ Server端:同样运行在开发机器中,用来管理 Client 端和手机的 Daemon 之间的通信;

⚫ Daemon守护进程:运行在调试设备中,手机或模拟器, 用来接收并执行 adb 命令;

备注:

  1. adb daemon(系统自带守护程序)      daemon程序在Android手机/模拟器中自带

  2. 还可以连接真机(Android手机--用数据线,手机需要开启开发者模式)

2.6、获取软件包名

命令行分布解释:

adb shell 进入安卓得Linux内核

pm package manage  包管理器

adb shell pm list packages   以list形式展示安装的包

com.android.xxxx  都是安卓自带的包

➢列出手机装的所有app的包名:adb shell pm list packages

➢列出系统应用的所有包名:adb shell pm list packages -s

➢列出除了系统应用的第三方应用包名:adb shell pm list packages -3

➢显示当前打开的软件包名和当前界面名:

        ➢Windows:adb shell dumpsys window | findstr mCurrentFocus    

        ➢Mac/Linux:adb shell dumpsys window | grep mCurrentFocus

        ➢注意:需要打开目标软件,如tpshop

        ➢adb shell dumpsys window 聚焦这个窗口,findstr mCurrentFocus 聚焦当前界面

➢概念:

        ⚫包名(package):决定程序的唯一性(不是应用的名字)

        ⚫界面名(activity):目前可以理解,一个界面名,对应着一个 界面

com.tpshop.malls/com.tpshop.malls.WelcomActivity   包名/界面名

  • 查看第三方软件包:adb shell pm list packages -3

  • 查看正在打开软件包(和页面名Activity):

    场景:为后续启动测试查看包名和页面名做准备

    • windows:adb shell dumpsys window | findstr mCurrentFocus

    • mac/Linux:adb shell dumpsys window | grep mCurrentFocus

2.7、清除应用数据与缓存

        ➢ 命令:adb shell pm clear (apk包名)

        ➢ 示例:adb shell pm clear com.tpshop.malls    清除指定的某个包的数据与缓存

2.8、启动、停止应用

场景:模拟人启动/停用APP

注意:

  • 启动:需要知道包名和页面名(注意是APP的启动页,不是进入的首页)

  • 停用:只需要知道包名即可

  • 启动:adb shell am start 包名/页面名

  • 停用:adb shell am force-stop 包名

模拟APP启动测试

  • 启动:adb shell am start -W -S -R 次数 包名/页面名

    • -W:显示启动时间,主要看:TotalTime

    • -S:启动前先关闭程序进程

    • -R:后面跟重复测试的次数

  • 测试结果

 ➢ 启动:

        ➢ 命令:adb shell am start 包名/Activity名

        ➢ 示例:adb shell am start com.tpshop.malls/com.tpshop.malls.SplashActivity

          备注:Activity名需要是启动页的Activity名,不能是首页的Activity名

          当app显示启动页时直接回车执行以上启动命令,获取启动页Activity名

➢ 停止:

        ➢ 命令:adb shell am force-stop (apk包名)

        ➢ 示例:adb shell am force-stop com.tpshop.malls

2.9、获取手机APP日志

面试场景:

  1. 针对APP类型项目,测试过程中出现了不可复现的bug时,最好提前通过adb logcat打开日志并记录

  2. 最好将日志重定向到指定的文件中,通过搜索关键词查询时间段/日志内容,提交开发进行进一步确认是否是bug

  3. 日志内容包含:操作系统的日志和APP应用的日志

  • 命令格式:adb logcat > 日志文件名.log

  • 注意:强制结束用 ctrl+c

➢获取错误日志步骤

➢当测试过程中发现问题后想获取错误日志信息:

        ⚫打开被测应用程序,进入到触发缺陷的位置

        ⚫使用查看日志命令: adb logcat

        ⚫触发缺陷

        ⚫获取日志信息

注意:一般的情况下留意Error错误级别的日志。另外类似如上图中的一些异常错误日志信息。在触发错误日志时及时 ctrl+c掐断日志刷新。

➢命令:adb logcat > 指定路径

➢案例:抓取APP日志信息并保存到1.txt文件中

        ①adb logcat >C:\Users\18810\Desktop\1.txt

        ②执行完后Ctrl+C结束日志获取

        ③查看获取的1.txt文档即可

日志级别:

2.10、文件传输

➢上传文件

        ➢adb push 电脑的文件路径  手机的文件夹路径

➢下载文件

        ➢adb pull 手机的文件路径  电脑的文件夹路径

备注:如果操作失败,就先adb shell进入系统中,然后有一个sdcard 然后在cd sdcard 就会出现Download 然后在往这个里面写

场景:如何将电脑文件传到手机/模拟器上;或者把手机/模拟器文件传到电脑上

注意:下载文件到电脑时,需要指定文件夹,否则可能会报错

  • 上传:电脑文件上传手机 adb push 电脑路径 手机路径

  • 下载:手机文件下载电脑 adb pull 手机路径 电脑路径

2.11、获取app启动时间

➢测试通过标准

        ⚫需求有明确的启动时间指标

        ⚫参考同类软件,启动时间不能大于竞争对手的启动 时间

➢启动app

        ➢adb shell am start -W 包名/启动名

➢结果说明

        ThisTime :该界面( activity ) 启动耗时(毫秒)

        TotalTime:应用自身启动耗时= ThisTime + 应用application 等资 源启动时间(毫秒)        

        WaitTime :系统启动应用耗时= TotalTime + 系统资源启动时间(毫 秒)

格式:adb shell am start -W 包名/activity名

常见参数:

        -S:表示每次启动前先强行停止

        -R:表示重复测试次数

常见的三个指标

        ➢ ThisTime: 当前activity的时间。

        ➢ TotalTime:应用的启动时间,包括创建进程、App初始化、Activity初始化到界面显示。

        ➢ WaitTime:前一个应用activity pause的时间+TotalTime

➢ 举例:adb shell am start -W -S -R 3 com.tpshop.malls/com.tpshop.malls.SplashActivity

冷启动:直接杀死进程重新启动        热启动:从后台启动           测试主要以冷启动为主

2.12、获取内存

场景:获取正在运行的app占用内存比例

  • 查看格式:adb shell dumpsys meminfo 包名

    • 如果不写包名:能看到设备总内存【Total RAM】

    • Free RAM 空闲内存 Used RAM 正在使用的 Lost RAM 丢失的

    • 带包名:能看到当前app实际使用的内存(total pss)

    • 计算:当前app占用内存% = Total PSS/总内存 *100%

如下截图:
Tpshop的app内存占比= Total PSS / Total RAM = 82069/6093056 * 100% = 1.3%

➢ 格式:adb shell dumpsys meminfo <包名>

➢ 示例:adb shell dumpsys meminfo com.tpshop.malls

adb shell dumpsys meminfo 查整个系统的内存

adb shell dumpsys meminfo <包名> 查某个app占用的内存

➢ 检查点:

        ➢ Native/Dalvik 的 Heap 信息

                ➢ 如果发现这个值一直增长,则代表程序可能出现了内存泄漏(Out of memory)。

        ➢ Total 的 PSS 信息

                ➢ 这个值是应用真正占据的内存大小,通过这个信息,可以轻松判别手机中哪些程序占内存比较大

2.13、查看CPU占用情况

场景:获取正在运行的app占用CPU比例(动态查看CPU及内存占用情况)

  • 查看格式:adb shell top

  • 说明:能够动态实时查看CPU及内存占比

adb shelltop -s 9 列是【1~x】比如%CPU 是第9列

如果只想看tpshop的 adb shell top| findstr com.tpshop.malls adb shell top| findstr <包名>

为了方便计算和查看把输出的数据保存到文件中,使用重定向

adb shell top| findstr com.tpshop.malls > d:\aa.log

➢ 格式:adb shelltop -s 列号

➢ 说明:[-s]按指定列排序

➢示例:adb shelltop -s 9          列是【1~x】比如%CPU 是第9列

➢ 参数含义:

        ➢ PID : 进程ID

        ➢ USER:进程所有者用户名

        ➢ PR:优先级

        ➢ NI:nice值

        ➢ VIRT:进程使用的虚拟内存总量

        ➢ RES:进程实际使用内存

        ➢ SHR:共享内存大小

        ➢ S : 进程的状态

        ➢ %CPU:进程所占用的CPU百分比

        ➢ %MEM:进程所占用的物理内存百分比

        ➢ TIME+:进程使用的CPU时间总和

        ➢ ARGS:程序

2.14、获取APP使用流量

➢ 获取进程pid

        ➢ win:adb shell ps | findstr 包名

        ➢ mac:adb shell ps | grep 包名

        ➢ 如:adb shell ps | findstr com.tpshop.malls

➢ 获取流量

        ➢ adb shell cat /proc/{pid}/net/dev

➢ 查看

        ➢ Wlan0:wifi网卡

        ➢ Receive是接受Transmit是发送

备注:当链接多个设备,但是想查询其中一个设备的数据信息时需要加-s

比如:输入:adb shell top  报:error:more than one device/emulator

修改后输入:adb -s 127.0.0.1:7555 shell top

三、Monkey稳定性测试

性能稳定性测试介绍

稳定性测试:通过长时间对应用程序进行无序操作,检验应用程序是否会出现异常。如闪退crash、无响应ANR等。

稳定性测试工具——Monkey:

        ⚫ Monkey是一个命令行工具,是由安卓官方提供的。

        ⚫ 测试人员可以通过Monkey来模拟用户的触摸、点击、滑动以及系统按键等操作(操作事件都是随机的),从而实现对APP压力的测试和稳定性测试。

        ⚫ 开发人员结合monkey 打印的日志和系统打印的日志,修改测试中出现的问题。

稳定性测试的时机:

         ⚫ 一般需要等产品稳定了,bug比较少的时候,再用monkey去测试待测试应用的稳定性。

Monkey测试

        ➢ 语法:adb shell monkey -p 包名-v 次数 > c:\日志.txt

        ➢ 说明:

                ➢-p 指定包名

                ➢-v 日志详细程度(最高支持’-v -v -v’最详细)

   ➢ 示例:adb shell monkey –p com.tpshop.malls –v 20000 > C:\Users\Jack\Desktop\monkey.txt

monkey命令参数拓展(了解)

总结:

        1. 启动时间:adb shell am start-W 包名/activity名

        2. 内存:adb shell dumpsys meminfo 总结

        3. CPU:adb shell top

        4. 安装:adb install 软件包路径

        5. 卸载:adb uninstall 包名

        6. 抓取日志:adb logcat >指定路径

        7. Monkey:adb shell monkey -p 包名-v 次数 >c:\日志.txt

        8. 流量:

                ✓ 获取pid:

                        ✓ windows:adb shell ps | findstr 包名

                         ✓ mac:adb shell ps | grep 包名

                ✓ 查看流量:adb shell cat /proc/{pid}/net/dev

四、软件开发方法及应用发布

思考:互联网应用(京东)与传统行业应用(个税APP)更新速度一样吗?

软件开发方法

        迭代速度不同:开发模型不一样

        传统行业:瀑布模型

        互联网+:敏捷模型

开发模式

瀑布模型:将一个项目作为一个整体,下一个环节依赖上一 个环节的完成。

敏捷模型:将一个项目拆分成多个子项目,每一个迭代周期 完成一个子项目

敏捷开发(scrum)模型

Scrum:是一个敏捷开发框架,是一个增量的,迭代的开发过程

        ⚫ 迭代(sprint):项目开发过程中最小周期,每个sprint周期建议为2周。在scrum框架中,整个开发周期包括若干个 小的迭代周期

        ⚫ 产品功能列表(Backlog ):在Scrum中,将产品Backlog按商业价值排出需求列表

Scrum三种角色:

        ⚫ Product Owner(产品负责人)

                ➢ 定义需求,进行需求排期

        ⚫ Scrum Master(项目经理)

                ➢ 管理项目,确保scrum顺利执行

        ⚫ Dev Team(开发团队)

                ➢ 实现客户需求

                ➢ 成员:开发、测试、UI。

                ➢ 团队人数:一般5人到9人。开发测试比一般为:3:1 —5:1

敏捷开发模式 ——scrum敏捷模型

总结:

        1、什么是敏捷模型? 总结

                • 核心是将一个项目拆分成多个子项目,每一个迭代周期完成 一个子项目。

        2、敏捷模型Scrum

                • 三种角色:

                        • 产品负责人(ProductOwner)

                        • 项目经理(ScrumMaster)

                        • 开发团队(DevTeam):包含开发、测试、UI。

                • 迭代周期:2周左右

思考:100台服务器,发布新版本时,1次性更新100台服务器好,还是先更新几台验证一段时间好?

项目上线发布策略

思考:APP如何发布?

APP软件包类型

⚫ APP开发完成后,相应的开发人员会打出应用程序包,由测试人员安装测试

IOS【格式:IPA测试包】  <-----   APP客户端   -----> Android【格式:APK测试包】

注意:

IOS APP和Android APP在界面上的功能一样, 但实际上是两个完全独立的项目。

•使用不同的开发语言

•由不同的项目组成员进行开发

思考:APP测试包如何发布和管理?

APP客户端(内部)发布平台

⚫ 在实际测试工作中,为了方便测试程序包的安装和管理,可以使用一些应用内测分发平台。如:蒲公英、Testlink

⚫ 操作步骤:

        ➢ 开发将应用测试包上传到这些平台上

        ➢ 平台可以生成对应的二维码

        ➢ 测试直接扫码进行应用安装

思考:APP包如何发布给用户?

APP客户端(线上)发布平台

⚫产品测试完成后要在线上进行发布,让用户进行下载使用。下面是安卓和IOS应用常用的发布平台和渠道

        ➢ Android应用:豌豆荚、应用宝、360手机助手、各类手机品牌商城等;

        ➢ IOS应用: 主要有 App store、iTools

⚫操作步骤:

        ➢开发者账号注册,申请在发布平台(各种应用商店)上架

        ➢针对不同的发布平台,在软件包中加入对应的平台ID(渠道ID),上传到发布平台

        ➢平台审核通过后,用户即可在应用商店中下载

注意事项:

        ⚫一般线上发布过程,由开发人员负责。

        ⚫在软件包加入平台ID后,上传到发布平台时,需要测试人员验证核心的业务功能

总结:

        1、互联网公司使用什么开发模型?多久迭代一次?

                ✓ 敏捷开发模型

                ✓ 2周

        2、什么是灰度发布?

                ✓ 时间:预发布环境测试之后,生产环境发布之前

                ✓ 策略:部分用户可用,若有异常则回滚

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐