App测试面试问答(一)

1、Web 端测试和 App 端测试差异

Web 端测试

App 端测试

系统结构方面

B/S架构,基于浏览器的;

Web 测试只要更新了服务器端,客户端就会同步会更新

C/S结构的,必须要有客户端;

App 修改了服务端,则客户端用户所有核心版本都需要进行回归测试一遍;

兼容方面

a. 浏览器(火狐、谷歌、IE等)

b. 操作系统(Windows7、Windows10、Linux等)

a. 设备系统:iOS(ipad、iphone)、Android(三星、华为、联想等) 、Windows(Win7、Win8)、OSX(Mac)

b. 手机设备可根据 手机型号、分辨率不同

性能方面

需监测响应时间、CPU、Memory

除了监测响应时间、CPU、Memory外,还需监测流量、电量等

2、App专项测试有哪些?

  • 干扰测试:中断,来电,短信,关机,重启等
  • 弱网络测试:(模拟2g、3g、4g,wifi网络状态以及丢包情况);网络切换测试(网络断开后重连、3g切换到4g/wifi 等)
  • 安装、更新、卸载安装: 需考虑安装时的中断、弱网、安装后删除安装文件等情况 卸载: 需考虑卸载后是否删除 App 相关的文件 更新: 分强制更新、非强制更新、增量包更新、断点续传、弱网状态下更新
  • 界面操作: 关于手机端测试,需注意手势,横竖屏切换,多点触控,前后台切换
  • 安全测试: 安装包是否可反编译代码、安装包是否签名、权限设置,例如访问通讯录等
  • 边界测试: 可用存储空间少、没有SD卡/双SD卡、飞行模式、系统时间有误、第三方依赖(QQ、微信登录)等
  • 权限测试: 设置某个 App 是否可以获取该权限,例如是否可访问通讯录、相册、照相机等

3、ADB命令

查看设备号  adb devices
安装  adb -s  设备号 install 包名
卸载软件  adb -s 设备名 uninstall 软件包名(以com开始的例如:com.qqmusic)
查看安装的软件包名 adb shell pm list package 查看所有的手机软件包名
查看第三方的手机软件包名 adb shell pm list -3 
查看手机当前使用的内存情况,各个线程的内存占用情况  adb shell dumpsys meminfo
查看手机的电池信息  adb shell dumpsys batteryinfo
查看系统资源状态  adb shell top

手机日志 
产看手机日志  adb logcat 
清除手机日志  adb logcat -c 
显示时间  adb logcat -v time 
将日志导入一个文件中  adb logcat > mobile.log
将手机的图片导入到PC端  adb pull 手机文件的路径  电脑路径
例如:Adb pull /storage/emulated/legacy/Pictures/Screenshots/Screenshot_2019-02-21-17-48-55.png F:\

adb 命令录屏  adb shell screenrecord  --time-limit 10 /sdcard/demo.mp4  (10表示录制10秒,默认是180s)
获取当前页面元素(activity名)   adb shell dumpsys activity top
获取任务列表  adb shell dumpsys activity activities
查看app入口(activity)  1)adb logcat |findstr -i displayed ;
					  2)adb shell dumpsys window w | findsrt mCurrent ; 
					  3)aapt dump badging 安装包名.apk | findstr launchable-activity
启动应用  adb shell am start -W -n com.hundsun.winner.pazq/.ui.home.activity.MainContainerActivity -S

设置时间的比率  --pct-touch(percent touch)
adb shell monkey -p app 安装包名 --throttle 25  --pct-touch 50 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v -s 种子数 执行事件次数 >保存在pc的路径\日志名.log(一般不设置,都选择默认的事件处理事项)

4、App测试流程?

  • 当我拿到需求后就要进行需求分析,提炼测试点,设计测试用例,并进行评审。
  • 然后如果没有搭建测试环境的话就要搭建测试环境。
  • 开发人员把apk把发给我,我就先做一个冒烟测试。(冒烟测试(Smoke Test)是一种快速验证软件基本功能的测试方法,主要用于确认核心功能是否正常运行,避免后续测试浪费在严重缺陷上。)不通过就打回,通过了再进行执行测试用例。
  • 先做功能测试,保证每一个功能都能过关。
  • 然后再做一些专项测试。主要的专项测试有安装,卸载,升级,交互性,稳定性,弱网,兼容性,性能测试。

5、如何做冒烟测试?

App端的冒烟测试是在每次新构建(Build)或部署后,快速执行一组最核心、最基本的功能测试用例,目的是验证App的关键路径是否通畅、是否存在阻塞性缺陷,确保这个版本足够“稳固”可以进行更深入、更全面的测试(如功能测试、回归测试、兼容性测试等)。

核心目标: 用最短的时间(通常几分钟到十几分钟)确认App的“主干”是否还能跑通,避免测试团队在无法正常使用的基础版本上浪费时间。

App端冒烟测试的详细步骤和要点:

📌 1. 明确冒烟测试的范围 (最重要!)

  • 聚焦核心功能: 选择那些如果失败,整个App或核心业务流程就无法继续的功能。这些通常是用户最常用、业务最核心的路径。
  • 例子:
  • 安装/更新: 能否成功从应用商店/测试分发平台下载并安装/更新App?
  • 启动: App能否正常启动,不崩溃?
  • 用户旅程主干:
  • 电商类: 浏览商品列表 -> 查看商品详情 -> 加入购物车 -> 登录/注册 -> 结算 -> 支付流程(模拟) -> 生成订单。
  • 社交类: 登录 -> 查看主信息流/消息列表 -> 发布一条内容(文字/图片) -> 查看他人内容 -> 发送一条消息。
  • 工具类: 登录(如果需要) -> 执行核心操作(如:导航App输入目的地开始导航、笔记App创建一条笔记)。
  • 关键入口点: 主屏幕/首页是否能正常加载显示?
  • 基本导航: 能否在几个最重要的标签页/模块间切换?
  • 退出/后台切换: App能否正常切换到后台?从后台切换回来是否正常?能否正常退出?
  • 避免: 深层次的边界测试、UI细节、性能测试、兼容性测试等。这些留给后续测试阶段。

🧪 2. 准备测试环境与数据

  • 测试设备: 选择1-2台主流的测试设备(覆盖目标用户的主要平台:iOS/Android,最好包含不同屏幕尺寸/分辨率)。无需覆盖所有设备,速度优先。
  • 测试账号: 准备1-2个稳定的、权限正确的测试账号(避免因账号问题导致测试失败)。
  • 测试数据: 确保有可用的核心测试数据(如:有商品可浏览、有联系人可发消息)。数据可以是预置的或通过测试脚本生成的。
  • 网络环境: 通常选择稳定的Wi-Fi或4G/5G网络。如果需要测试弱网,放在后续阶段。
  • 构建版本: 获取最新的待测试App安装包(.ipa/.apk 或 TestFlight/TestFairy/Firebase App Distribution等分发平台的链接)。

📋 3. 设计冒烟测试用例

  • 数量精简: 通常控制在5-15个用例以内,目标是几分钟内能跑完。
  • 正向为主: 主要验证正确的操作是否能得到预期的、成功的结果。例如:
  • “使用有效账号密码登录,应成功进入首页。”
  • “在首页点击商品A,应成功跳转到商品详情页。”
  • “在商品详情页点击‘加入购物车’,购物车图标数字应增加1。”
  • 清晰明确: 每个用例步骤清晰,预期结果明确、可验证(避免模糊描述)。
  • 原子性: 每个用例尽量独立,避免严重依赖前一个用例的状态(虽然在实际操作中它们可能是串起来的流程)。这样某个用例失败不会导致后续所有用例无法执行。
  • 覆盖核心路径: 确保设计的用例串联起来覆盖了第1步定义的核心用户旅程。
  • 示例用例集 (电商App):
  • 成功安装/更新最新版本App。
  • 启动App,主页面在X秒内加载完成且无崩溃。在
  • 主页面浏览商品列表,列表能正常加载显示。
  • 点击列表中任一商品,成功进入该商品详情页。
  • 在商品详情页点击“加入购物车”,提示加入成功(或购物车数量增加)。
  • 点击进入购物车页面,能看到刚加入的商品。
  • 点击“结算”(如未登录应跳转登录)。
  • 使用有效测试账号登录,登录成功。
  • 成功进入订单确认页(地址、支付方式等已选或可正常选择)。
  • 点击“提交订单”,成功生成订单(跳转订单详情页或提示成功)。

🚀 4. 执行冒烟测试

  • 时机: 在开发提交一个新的、可测试的构建(Build) 后立即执行。建议每日或每次重要代码合并后进行。
  • 步骤:
  • 安装/更新: 在目标设备上安装或更新待测试的App版本。清除旧版本数据(或首次安装)以避免脏数据干扰。按序执行: 按照设计好的冒烟测试用例顺序逐一执行。
  • 严格检查: 仔细核对每一步的实际结果是否与预期结果一致。
  • 记录结果: 清晰记录每个用例的执行结果(通过/失败)。如果失败,详细记录:
  • 失败的操作步骤
  • 实际结果(截图/录屏非常有用!)
  • 设备信息(型号、OS版本)
  • App版本号
  • 错误日志(如果方便获取)
  • 快速决策:
  • 全部通过: 标记该版本“冒烟测试通过”,通知测试团队可以开始进行更全面的测试。
  • 关键用例失败: 如果任何一个核心用例失败(如安装失败、启动崩溃、主流程阻塞),立即中止本次冒烟测试,标记该版本“冒烟测试失败”。将详细的失败信息反馈给开发团队,要求修复并重新构建。不应对一个冒烟失败的版本进行深入测试!

6、Android App测试点

(1)界面测试 ,测试界面跟需求文档中界面原图是否一致,使用不同的手机界面分辨率,以及界面大小等方面进行测试。

(2)功能测试 ,功能测试和web测试差不多,主要测试app对其他相关功能模块的影响。

(3)兼容性测试,兼容性测试主要测试app在不同机型,不同手机系统版本上能不能正常启动,运行。不同屏幕分辨率和屏幕大小能不能正常显示,会不会出现拉伸,显示不全的情况。测试兼容性主要是通过真机和云测相结合的方法做测试的。

(4)网络测试,在不同的网络中进行测试,比如:2G,3G,4G,移动,电信,联通,还有网络之间切换,用fiddler进行弱网测试。

(5)交互性测试

(6)易用性测试

(7)异常测试,异常测试手机关机、重启以及断网的一些异常情况

(8)安全测试,安全测试的话,我们会使用xss脚本和sql注入来进行代码攻击,一般使用扫描工具Appscan来进行攻击,然后还会用fiddler进行抓包,查看关键信息有没有进行加密,查看日志中有没有加密,数据库有没有加密,以及界面上的展示和输入是否加密了,会在fiddler抓包的时候设置断点,篡改数据,看能不能篡改成功。

(9)权限测试

(10)稳定性测试,还会使用monkey测试App的稳定性,一般运行100W次,大概八个小时,查看日志文件,如果出现crash,anr,exception这些单词,则是出现bug,我们会将bug提交给开发,开发修复之后,我们会用种子数来进行回归复测。

(11)性能测试,是为了提高用户的体验感,我们一般是用emaggee来测试监控App的cpu、内存、fps等性能指标,监控完之后编写性能测试报告,然后再对比性能指标,看是否达标。

7、App闪退的可能原因?

  • 缓存的垃圾太多,长时间没有清理垃圾
  • 运行的程序太多,内存不足导致的闪退
  • 版本兼容的问题
  • 网络的原因:弱网、2G或3G环境下
  • app的sdk和系统不兼容
  • 系统升级之后,新版本和老版本不兼容导致的

8、App性能你是怎么测的?

  • APP测试主要有了解性能需求,指定测试计划,编写测试用例,和准备测试数据。执行测试用例,提交bug,编写测试报告,这几个流程。
  • App的性能测试主要从两个方面入手,一个是app占用手机的性能,一个是app对服务器的性能测试。
    • 手机性能性能测试主要测的是cpu占用率,内存占用率,耗电量,流量以及流畅度。除此之外也要重点关注app的安装,启动,卸载时间,加载页面的响应时间,以及是否有内存泄漏的情况。
    • 测试之前,一般是会给我们提供指标。如果没有给的话,我会通过分析竞品,比如要测试京东,我会拿淘宝作为竞品,所测的京东性能要强于淘宝的才行。如果app之前有版本的话,可以拿上一个版本的数据作为对比对象,所测的性能要优于上一个版本的。
    • 通常来说,cpu平均占用率不超过10%,内存占用率不超过100M,平均安装时间50S,平均启动时间4S等,这都是一些比较普遍的app的性能,也可以作为一种参考。
    • 服务器性能是用jmeter进行测试。主要看并发数,响应时间,事务通过率,以及资源占用情况。
    • 首先分析业务,这可以通过组内评审得出,然后准备数据,了解并发数。并发数可以通过需求了解,没有的话可以跟客户交谈总结,或者分析竞品得出。
    • 得到了并发数后,按各个场景的使用比例进行分配并发数。先测试单一场景,并发数在原来的基础上增加百分之十到二十,用linux监控资源,找出系统中隐藏的问题,比如通过查看内存前后对比看看有没有内存泄漏,通过查看日志内存溢出(OutOfMemoryError,StackOverflowError),死锁。
    • 必要时要考虑二八原则,测试一个场景一般15-30分钟。在测试混合场景,就是各个不同场景,一起压测,找出未满足的需求。测试时间一般为30-60分钟。
    • 然后再进行一个负载测试,找出系统所能承受的最大的并发数。然后把所有的报告汇总,进行分析,最后写一个性能测试报告。

    9、原生开发、H5开发、混合开发的区别

    原生开发(Native App开发)

    H5开发(web app开发)

    混合开发(Hybrid App开发)

    含义

    是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发。比如Android是利用Java、Eclipse、Android studio;IOS是利用Objective-C 和Xcode进行开发

    HTML5应用开发,是利用Web技术进行的App开发,可以在手机端浏览器里面打开的网站就称之为webapp。Web技术本身需要浏览器的支持才能进行展示和用户交互,因此主要用到的技术是HTML、CSS、Javascript以及jQuery、Vue、React等JS框架

    指在开发一款App产品的时候,为了提高效率、节省成本而利用原生与H5的开发技术的混合应用。通常由“HTML5云网站+APP应用客户端”两部份构成。

    混合开发是一种取长补短的开发模式,原生代码部分利用WebView插件或者其它框架为H5提供容器,程序主要的业务实现、界面展示都是利用与H5相关的Web技术进行实现的。比如京东、淘宝、今日头条等APP都是利用混合开发模式而成的

    优点

    可访问手机所有功能(如GPS、摄像头等)、可实现功能最齐全;

    运行速度快、性能高,绝佳的用户体验;

    支持大量图形和动画,不卡顿,反应快;

    兼容性好,每个代码都经过程序员精心设计,一般不会出现闪退的情况,还能防止病毒和漏洞的出现;

    比较快捷地使用设备端提供的接口,处理速度上有优势

    支持设备范围广:可以跨平台,编写的代码可以同时在Android、IOS、Windows上运行;

    开发成本低、周期短;

    无内容限制;

    适合展示有大段文字(如新闻、攻略等),且格式比较丰富(如加粗,字体多样)的页面;

    用户可以直接使用最新版本(自动更新,不需用户手动更新)

    开发效率高,节约时间:同一套代码Android和IOS基本上都可使用;

    更新和部署比较方便:每次升级版本只需要在服务器端升级即可,不再需要上传到App Store进行审核;

    代码维护方便、版本更新快,节省产品成本;

    比web版实现功能多;

    可离线运行

    缺点

    开发周期长:快则3个月左右完成,慢则五个月左右;

    开发成本较高

    可移植性比较差:一款原生的App,Android和IOS都要各自开发,同样的逻辑、界面要写两套;

    内容限制(App Store限制);

    必须等下载完毕用户才可以打开,获得新版本时需重新下载应用更新。

    新需求迭代,上线慢

    由于Web技术本身的限制,H5移动应用不能直接访问设备硬件和离线存储,所以在体验和性能上有很大的局限性;

    对联网要求高,离线不能做任何操作;

    功能有限;

    APP反应速度慢,页面切换流畅性较差;

    图片和动画支持性不高;

    用户体验感较差;

    无法调用手机硬件(摄像头、麦克风等)

    功能/界面无法自定:所有内容都是固定的,不能换界面或增加功能;

    加载缓慢/网络要求高:混合APP数据需要全部从服务器调取,每个页面都需要重新下载,因此打开速度慢,网络占用高,缓冲时间长,容易让用户反感;

    安全性比较低:代码都是以前的老代码,不能很好地兼容最新手机系统,且安全性较低,网络发展这么快,病毒这么多,如果不实时更新,定期检查,容易产生漏洞,造成直接经济损失;

    如何辨别原生和H5?

    看加载的方式:如果在打开新页面导航栏下面有一条加载的线的话,这个页面就是H5页面,如果没有就是原生的

    断网的情况:把手机的网络断掉。然后点开页面。可以正常显示页面内容就是原生写的。 显示404或者错误页面的是html页面。原生部分页面是可以正常打开的,打不开的原生和H5的报错也是有区别的

    #测试面经##测试#
    测试岗面经 文章被收录于专栏

    整理面试过程中的测试问答,常看常新,多多学习!有些问题是从其他人那里转载而来,会在文章下面注明出处,希望大家多多支持~~

    全部评论

    相关推荐

    07-17 13:09
    已编辑
    火炉中学 Java
    本人27届菜鸡,实习入职四天了,我们组是开发一个教学平台,组长说暑假需求不多,让我慢慢熟悉项目。入职第一天是拿到了文档和一个项目的代码权限,把代码拉下来跑了起来,Maven下了一下午才把依赖下好。后面三天都在一直看代码,发现很多新东西,虽然项目框架基本上也就是我在黑马学的springboot和mabatis那一套,但是有很多别的东西或者一个人做项目没法接触到的点。我不知道我是不是对的,我感觉每天就是顺着前端发的请求看每个业务流程涉及到的东西,看到新东西我就去学,比如什么分布式id怎么生成的,excel怎么导入导出的,缓存级联删除逻辑什么的,我感觉看的很慢因为想搞懂没见过或者不熟悉的东西。我感觉这样下去一周都没法吃透这个项目,但组长人很好,跟我说刚实习多学点新东西,现在就慢慢看就行了,后面会给我发需求。我到底该怎么办,忽略细枝末节赶紧要需求吗,但是我感觉不学新东西很难做有亮点的需求,单做增删改查实习完了又不好包产出,我现在有点想把看懂的技术点包成自己的产出因为做的真的好厉害我自己肯定做不出来,唉我会的还是太少了,现在焦虑得不行,甚至后悔提前实习了,应该把分布式微服务学完再出来的😰我之前就只跟做了外卖和点评,背了一些juc jvm八股,微服务分布式都没学,真让我干活只能做增删改查吧,害怕组长骂我肺雾😭
    猫猫头猫头鹰:我不用打开评论区都知道会有啥
    点赞 评论 收藏
    分享
    评论
    1
    5
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务