持续更新参加面试过程中,遇到的软件测试相关的面试题,包括:项目管理、测试理论、python基础、数据库、团队管理等等。
1. 如何保障测试质量
1.1 精准分析
- 需求文档分析
- 代码分析,分析代码改动会影响的模块
- 业务分析,找出业务的共性和特性
1.2 制定测试策略
明确被测目标,制定测试策略,包含:
- 物料准备:人力资源的协调,测试数据和测试环境的准备
- 测试计划的制定:测试范围、测试方法(功能测试、接口测试、性能测试、兼容性测试等)、测试工时预估(测试时间和进度)
- 风险评估(反馈机制和进度同步机制)
1.3 测试准入
明确准入准出原则,冒烟测试用例的准备,冒烟测试用例通过率,冒烟测试结果同步等
1.4 测试执行
- 测试用例覆盖
- 测试bug记录和流转
- 测试日报反馈
1.5 发布准则
明确发布细则:
- bug 修复情况
- 测试报告
- 发布前的环境和数据配置
1.6 监控
线上监控平台:告警、报错平台
1.7 自动化巡检
编写自动化用例,每日执行检查接口稳定性,定期维护脚本
1.8 问题梳理
- 测试难点问题
- 用户反馈问题
- 文档沉淀
2. 项目迭代流程
需求评审-任务拆分和工时评估、任务分配-需求封板-制定测试策略-编写测试用例-需求用例评审(提前前1-2天以上)-测试执行-测试报告(每家公司可能有所不同,根据自己的公司情况给出,这个是我历史公司的迭代流程)
3. 测试左移
💡 测试左移,我们可以做什么
- 在需求评审时不只是了解需求,更是要去评估需求的质量,分析需求的合理性以及完整性。
- 代码扫描,代码质量检查,进行单元测试,测试驱动开发,这些都是在开发阶段就引入测试的手段。
- 测试人员尽早介入测试,参加需求分析,评审。
- 持续测试:自动化测试。
4. 微信裂变活动
💡微信裂变是指在微信平台上通过用户间的互动和分享,实现快速传播和增长的一种现象。
活动玩法:
1. 助力型(邀请好友助力成功,主态完成任务,获取奖励)
2. 邀请型(邀请新用户成功,新用户下发奖励,主态获取奖励)
3. 互利型(分享助力链接给好友,好友完成助力,好友会获得指定积分,主态获取随机积分)这是我司之前的玩法
微信裂变活动测试点
1. 功能测试:
用户分享流程测试:测试用户发起分享活动的流程,确保分享链接的生成、分享到不同渠道(微信好友、朋友圈等)的稳定性和正确性。
被邀请用户参与流程测试:测试被邀请用户接收邀请链接、进入活动页面的流程,确保用户能够正常参与活动。
2. 链接生成与识别测试:
分享链接生成测试:测试分享链接的生成是否符合规范,包括链接中是否包含活动标识actid、邀请者标识shareid等信息。
邀请链接识别测试:测试系统是否能够正确识别分享链接,关联邀请者信息masterid,并在被邀请者参与时追踪关联信息。
3. 用户参与活动测试:
邀请者奖励测试:测试邀请者在成功邀请朋友参与后是否能够正确获得奖励,包括积分、优惠券等。
被邀请者奖励测试:测试被邀请者在参与活动后是否能够正确获得奖励。
4. 活动规则测试:(周期内同一个好友助力次数限制、一个人一天内可以给多少位好友助力或者周期内可以给多少位好友助力)
邀请次数限制测试:测试系统是否正确限制每个用户的邀请次数,确保符合活动规则。
奖励发放规则测试:测试系统是否按照规定的奖励发放规则进行奖励发放,包括奖励的数量、方式等。
5. 性能测试:
高并发场景测试:模拟高并发用户发起分享和被邀请参与的场景,测试系统的稳定性和性能。
链接识别性能测试:测试系统在大量链接识别的情况下是否能够迅速且准确地处理。
6. 安全测试:
分享链接安全性测试:防止分享链接被恶意篡改或伪造,确保系统能够正确辨别有效的分享链接。
用户身份验证测试:防止利用漏洞进行刷量等行为,确保系统对用户身份进行有效的验证。
7. 用户体验测试:
分享邀请流程体验:测试用户在分享邀请时的整体体验,确保流程简单、直观。
奖励领取体验:测试用户在获得奖励时的领取流程,确保用户能够顺利领取奖励。
5. 小程序测试和APP测试的区别
5.1 运行环境
- 原生app直接运行在操作系统的单独进程中(Android可以开启多个进程);小程序只能运行在微信的进程中
5.2 开发成本
- 原生app的开发涉及到iOS和Android多个平台,开发工具、开发语言、不同设备的适应的问题;而小程序开发只需要开发一个就可以同时在iOS/Android等不同平台不同设备上运行
- 原生app需要到应用商店上架(Android需要上架各种应用商店);小程序只需到微信平台发布
5.3 系统权限
- 原生app调用的是系统资源,也就是说系统提供给开发的api都可以使用;而小程序是基于微信的,小程序的所有功能受限于微信,也就是说只有微信给开发者提供api才能使用,不能绕过微信直接使用系统提供的api
- 原生app可以给用户推送消息;小程序不允许主动给用户发送消息,只能回复模板消息
- 原生app需要下载,安装包较大;小程序无需下载,可以通过分享/扫码/搜索直接打开
5.4 运行流畅度
- 原生app运行在操作系统上,所有原生组件可以直接调用GPU进行渲染;
- 小程序运行在微信中,只能通过webview进行渲染
6. 小程序测试与H5测试的区别
6.1 从技术层面
- H5
- H5使用HTML、CSS、javaScript等前端技术开发
- 可以直接通过浏览器访问,无需安装
- 跨平台兼容好,可以在不同设备浏览器访问
- 小程序
- 使用WXML、WSS、javaScript开发,采用组件化的开发方式
- 需要在微信体系内运行,要先安装微信
- 可以调用微信原生API,可以更深度的与微信生态整合
6.2 从用户层面
- H5
- 浏览器加载需要一定的时间
- 在不同浏览器渲染的页面可能存在差异
- 小程序
- 更具有原生app的用户体验,性能更佳
6.3 开发流程层面
- H5
- 有大量的前端框架可以选择
- 开发和联调相对简单,开发工具随意,直接在浏览器打开开发者工具即可联调
- 无需发布应用商店或平台审核,获取链接即可访问
- 小程序
- 只能使用微信提供的开发者工具进行开发和联调
- 需要提交到微信平台进行审核,必须要符合微信规范性和安全性
- 集成了微信登陆和支付功能,支持微信api的调用
6.4 生态层面
- H5
- 不依赖特定平台,可以在任何浏览器和设备访问
- 可以通过seo优化提高页面在搜索引擎的排名
- 小程序
- 依赖于微信平台,与微信生态深度整合
- 能够直接调用微信提供的服务和能力:登录、支付、地理位置
7. React Native VS Flutter
跨平台UI框架,允许开发者使用一套代码库构建适用于多个平台的应用程序
react native
- 优势
- javascript 作为编程语言,前端开发者更易上手,他们熟悉js
- 大量的第三方库
- 强大的社区支持,可以轻松找到解决方案
- 劣势
- 需要高度优化的应用程序(3D游戏或大规模数据处理应用),性能可能会受到限制
- UI可能在不同平台不一致
flutter
- 优势
- 一致的UI,可以实现在不同的平台用户界面完全一致
- 高性能,可以构建需要高性能的应用场景(比如游戏或多媒体)
- 热重载,允许开发者在不重新启动app的情况下及时查看代码更改的效果,提高了开发效率
- 劣势
- 学习成本,编程语言是dart,需要重新学习
- 较小的生态系统
8. Android 四大组件
Android四大组件:
1. Activity
- 一个activity 就是一个屏幕,四大组件用户唯一可以感知
- activity 之间通过intent进行通信
- Android应用程序的每一个activity 都必须在AndroidMainFest.xml文件进行声明,否则系统将不能识别该activity
activity 5个状态:starting-> running-> poused-> stopped-> Destroyed
activity 的生命周期:oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()
2. Service
用于在后台完成用户指定操作
- 启动(started):当应用程序组件调用startService()启动服务时,服务处于started状态
- 绑定(bound):当应用程序组件调用bindService()绑定服务时,服务处于bound状态
3. Content Provider
内容提供者
4. Broadcast Receiver
广播接收者,两种注册方法
- 程序动态注册:特点是activity关闭之后,广播接收失败
- AndroidMainFest文件静态注册:只要设备处于开启状态,广播接收也是打开的
9. APP 测试内容有哪些
💡 APP专项测试包含:兼容测试、交叉事件测试、安装卸载升级测试、推送测试、稳定性测试、性能测试(内存测试、CPU测试、耗电量测试、流量测试)、弱网测试等。
APP测试需要测什么
1. 功能测试
根据产品文档编写测试用例、完成测试
2. UI测试
符合设计稿、用户界面美观、易于操作、交互人性化
3. 安装升级卸载测试
4. 兼容性测试
4.1 系统
Android
虚拟机运行机制
真后台:任何第三方应用程序都能在后台运行,直到没有内存时才会关闭
用于数据处理指令权限最高
iOS
沙盒运行机制
假后台:任何第三方应用程序都不能在后台运行
用于UI指令权限最高
系统版本兼容
手机屏幕分辨率
网络兼容
Wi-Fi/5G/4G/3G/2G/弱网/无网
app跨版本兼容
5. 中断测试
来电、短信、低电量提示等异常中断场景
服务器异常、接口异常客户端能否正常处理,确保app正确响应
6. 低配手机
Android 4.4.4 版本以下的手机
7. 性能测试
性能指标
8. 回归测试
10. App 性能测试指标
app 性能
cpu
测试点
空闲时(在没有运行其他app的情况下),运行app使用情况
CPU50%下,运行app使用情况
CPU80%下,运行app使用情况
关注点
app自身版本对比
与竞品对比
与app各其他activity对比
内存
测试点
进入某个页面不操作,或置于后台,内存消耗极少
时间偏长的操作应用
高强度下的操作应用
一般用monkey实现,验证是否有内存泄漏
内存泄漏:内存一直没有得到释放,内存一直增加,系统内存一直在减少
关注点
进入某个页面,内存是否上升较快
退出某个页面,内存是否回落
新旧版本对比
与竞品对比
启动时间
冷启动
热启动
FPS(帧率)
系统流畅度
16ms,每秒帧率越多,系统越流畅
耗电量
流量
GPU
11. Android崩溃日志
ANR
- 主线程堵塞
避免死锁的产生,使用子程序处理耗时操作
- cpu满负荷、IO阻塞
文件读取或数据库操作,放在子线程异步操作
- 内存不足
防止内存泄漏,优化内存使用
- 各大组件ANR
各大组件生命周期内避免耗时操作。
Crash
- java crash
java代码导致的jvm退出,现象:程序崩溃或者闪退
- native crash
空指针NullPointerException/野指针/数组越界
12. Android 崩溃日志
- adb logcat
- 清除所有缓存 adb logcat -c
- 抓取当前时间的日志 adb logcat -v time >D:/crash.log
- 抓取指定进程的日志 adb logcat -v time | find "com.xx.xx" >D:/crash.log
- adb shell dumpsys dropbox 输出所有日志
- adb shell dumpsys dropbox --print XX > crash.log(文件路径名)
13. APP UI自动化
- uiautomator2
- 在手机端安装agx-agent应用程序,随后该应用程序启动U2服务进行监听
- 电脑端编写代码并执行,相当于向移动设备的server端发送http请求
- 手机通过USB接受PC上发来的http请求,执行指定操作
- facebook-wda
- webdriveragentrunner会在mac端启动wda服务,在手机端安装webriveragentrunner应用程序
- 在mac端编写脚本与wda通信,告诉wda我们将如何操作手机
- wda再与手机安装的webdriveragentrunner应用程序通信,通过该app接收模拟指令操作手机,实现UI自动化。
持续更新......