字节跳动高频 “ 120道 ” 软件测试面试题解析

news2024/9/22 17:20:12

1、web测试和APP测试的区别?

web测试和APP测试都离不开测试的基础知识和测试原理。

不同点是:web 测试更多的是考虑自身功能和浏览器兼容,app 测试要考虑手机本身固有的属性,所以 app 测试还需要注意以下几点:

中断测试(来电去电,短信,蓝牙,NFC 支付,闹钟,数据线插拔,锁屏,断电,关机重启等)

安装卸载测试(全新安装,新版本覆盖旧版本,卸载旧版本安装新版本,卸载新版本安装旧版本)

外在因素测试(网络切换,硬件按键,不同分辨率,兼容性,系统,系统版本)

2、如何测试一个APP的登录场景?

页面基本元素的操作;

大量字符,特殊字符,边界值,必填项校验;

注册手机号的特殊性验证,注册邮箱的格式验证;

密码大小写是否敏感,密码是否加密展示,密码是否有可见按钮功能,密码框能否使用复制粘贴;

验证码校验:必填项,过期,错误,无网络时获取验证码,多次获取,超过获取次数,输入验证码后,修改手机号;

登录时与系统的交互:锁屏,蓝牙,home,后退,横竖屏,修改字体字号;

逆向思维:已注册账号注册,未注册账号忘记密码,未注册账号登录,注册过程中退出再次注册;

输入法交互,切换输入法,切换输入模式,手写/九宫格;

登录账号的多样性:多个账号轮流登录,同一个账号多角色登录;

第三方登录验证:账号授权,信息正确,取消授权;

登录页面跳转,返回,登录成功及其他页面跳转;

手机兼容性测试:分辨率兼容,系统兼容,系统版本兼容,App 版本兼容;

网络切换,网络断开,弱网。

3、push消息如何测试?

检查 Push 消息是否按照指定的业务规则发送;

检查不接收推送消息时,用户不会再接收到 Push 消息;

如果用户设置了免打扰的时间段,检查在免打扰时间段内,用户接收不到 Push。在非免打扰时间段内,用户能正常收到 Push;

当 Push 消息是针对登录用户的时候,需要检查收到的 Push 与用户身份是否相符,没有错误的将其他人的消息推送过来。一般情况下,只对手机上最后一个登录用户进行消息推送;

测试 Push 时,在开关机、待机状态下执行推送,消息及其推送跳转的正确性;

push 消息时,会有红点展示,推送消息阅读前后数字的变化是否正确;

应用在开发、未打开状态、应用启动且在后台运行的情况下是 push 显示和跳转是否正确;

多条推送的合集的显示和跳转是否正确。

4、APP的闪退通常是什么原因?

缓存垃圾太多,Android 系统的特性,如果长时间不清理垃圾文件,会导致越来越卡,甚至闪退;

运行程序太多,导致内存不足;

应用版本兼容问题,分辨率兼容问题;

APP访问网络的地方,组件能否正常下载并显示;

APP的 SDK 与手机系统不兼容;

系统升级后,新版本不兼容老版本的 API,返回对象失败,报空指针;

软件权限未开放。

5、测试过程中遇到 app 出现 crash 或者 ANR,你会怎么处理?

APP 出现 Crash 或 ANR,可以从以下几个方面处理:

可以先把日志过滤出来:adb logcat | findstr xxxxx(过滤日志信息) ;

然后再搜索其中的关键字,比如:exception、crash,看看是哪些方法或者异常导致了问题;

初步定位问题原因后,可以交给开发人员去具体查找深层原因并修复。

6、你平常会看日志吗, 一般会出现哪些异常(Exception)?

常见的几种如下:

NullPointerException - 空指针引用异常

ClassCastException - 类型强制转换异常

IllegalArgumentException - 传递非法参数异常

ArithmeticException - 算术运算异常

ArrayStoreException - 向数组中存放与声明类型不兼容对象异常

IndexOutOfBoundsException - 下标越界异常

NegativeArraySizeException - 创建一个大小为负数的数组错误异常

NumberFormatException - 数字格式异常

SecurityException - 安全异常

UnsupportedOperationException - 不支持的操作异常

7、APP 测试的内容主要包括哪些,如何开展?

功能测试:

业务逻辑正确性测试:依据产品文档->测试用例编写。

兼容性测试:

1.系统版本:Android:官方版本,定制版本;IOS:官方提供版本。

2.分辨率:720 * 1280 1080* 1920。

3.网络情况:2g 3g 4g 5g Wi-Fi。

异常测试:

1.热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启。

2.网络切换和中断恢复:网络切换;中断恢复

3.电话信息中断恢复。

升级,安装,卸载测试:

1.升级测试:临近版本升级(1.0->1.1);跨版本(1.0->…->2.2)。

2.安装测试:首次安装;覆盖安装(同版本,不同版本覆盖);卸载后安装。

3.卸载测试:首次卸载;卸载安装后再卸载。

健壮性测试:

1.手机资源消耗:cpu,内存。

2.流量消耗:图片,数据,视频。

3.电量测试。

4.崩溃恢复。

8、APP 性能测试关注点及常见 APP 性能测试工具。

包体大小:

包体大小能被列为性能指标,是从 APP 性能指标及运营两个维度考虑的,用户是更希望包体小的同时性能要好,有时它们会是一个互相取舍的关系。

启动时长:

移动应用的启动时间是用户体验的一个重要方面,IOS 一直建议尽可能的缩短启动时间,防止用户不愿意使用它们。对于浏览器而言,由于程序启动时还会有教育页和闪屏的下发,因此启动时间的获取显得尤为重要。

启动时间分为冷启动时间和热启动时间,所谓的“冷启动”,就是一个完全没有运行的应用的启动时间,与热启动(应用已经在后台运行,某个事件将其带至前台)相比,由于此时系统尚未建立缓存,因此冷启动往往要较平时(热启动)耗费更长的时间。

内存使用:

在 Android 系统中,每个 APP 进程除了同其他进程共享(shared dirty)外,还独用私有内存(private dirty),通常我们使用 PSS(=私有内存+比例分配共享内存)来衡量一个 APP 的内存开销。移动设备的内存资源是非常有限,为每个 APP 进程分配的私有内存也是有限制。一方面我们要合理的申请内存使用,以免导致频繁的 GC(垃圾回收机制)影响性能和大对象申请发生内存溢出;另一方面,我们要及时释放内存,以免发生内存泄漏。

CPU 占用率:

一般情况下,用主流手机使用 APP20%-40%的 CPU 占用率算是合理的,当然这个数值随着近年来手机硬件配置的提高,会略微下降,如果 CPU 占用率超过 80%就非常值得我们去关注了。

图片处理器每秒刷新的帧数(FPS):

可用来指示页面是否平滑的渲染。手机 APP 帧率 FPS,30-60 都可接受,上了 60 对于人眼主观感受差别就不大了。对于移动应用开发而言,并不是 FPS 越高就一定越好,FPS 取决于显卡,其次是内存、CPU,然后是网络。故综合 APP 其他性能指标,选择一个适合的 FPS 即可。

电量:

相对于 PC 来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。另外,android 的很多特性都比较耗电(如屏幕,GPS,sensor 传感器,唤醒机制,CPU,连网等的使用),我们必须要慎重检查 APP 的电量使用,以免导致用户手机耗电发热,带来不良体验。

流量:

目前的网络类型包含 2G\3G\4G\5G\wifi,其中还有不同运营商的区分,我们在 APP 的使用中经常遇到大资源,重复请求,调用响应慢,调用失败等各种情况。在不同的网络类型之下,我们不仅要控制流量使用,还需要加快请求的响应。另外,对于需要联网的手游来说,部分游戏对不同联网方式的网络类型采用了不同的流量消耗策略,主要分为 wifi 环境和蜂窝网络环境。所以针对不同的游戏,我们统计流量消耗时,可能要连接不同的网络进行测试。

app 性能测试工具

GT 和 iTest,Emmagee APT ,DDMS ,手机自带开发者选项中的工具,也可以通过 adb 命令来查看等。

9、如何对 app 进行弱网测试

弱网测试可以测试 APP 的加载时间、可用性、稳定性和健壮性。这时我们就可以借助工具来模拟不同的网络状况,模拟 2G、3G 或弱网情况进行测试。工具可以选择 Fiddler 也可以选择 Charles 也可以选择其他工具。

10、常见的 adb 命令

注:adb 使用的端口号是 5037,以下总结工作中常用到的 adb 命令。

1.查看帮助手册列出所有的选项说明及子命令:

adb help

2.获取设备列表及设备状态:

adb devices

3.安装应用:adb install 路径\xx.apk, 安装应用;adb install -r 重新安装。

adb install

adb install -r

4.获取设备的状态,设备的状态有 device , offline , unknown3 种,其中 device:设备正常连接,offline:连接出现异常,设备无响应,unknown:没有连接设备。

adb get-state

5.卸载应用:adb uninstall <包名>, 后面的参数是应用的包名,区别于 apk 文件名。

adb uninstall

6.将 Android 设备上的文件或者文件夹复制到电脑本地:adb pull <远程路径> <本地路径>, 如复制 Sdcard 下的 pull.txt 文件到 D 盘:adb pull sdcard/pull.txt d:\,重命名:adb pull sdcard/pull.txt d:\rename.txt。

adb pull

7.推送本地文件至 Android 设备:adb push <本地路径> <远程路径>, 如推送 D 盘下的 ITester.txt 至 Sdcard:adb push d:\ITester.txt sdcard/ (注意 sdcard 后面的斜杠不能少)。

adb push

8.结束和启动 adb 服务:adb kill-server /adb start-server , 结束 adb 服务/启动 adb 服务,通常两个命令一起用,设备状态异常时使用 kill-server,运行 start-server 进行重启服务。

adb kill-server

adb start-server

9.打印及清除系统日志:adb logcat , 打印 Android 的系统日志 ;adb logcat -c,清除日志。

adb logcat

adb logcat -c

10.查找包名/活动名

adb logcat | findstr START

11.生成 bugreport 文件:adb bugreport , 打印 dumpsys、dumpstate、logcat 的输出,也是用于分析错误,输出比较多,建议重定向到一个文件中,如 adb bugreport > d:\bugreport.log。

adb bugreport

12.重启 Android 设备:adb reboot , adb reboot recovery,重启到 Recovery 界面;adb reboot bootloader,重启到 bootloader 界面。

adb reboot

adb reboot recovery

adb reboot bootloader

13.获取 root 权限:adb root , adb remount,可以直接获取 root 权限,并挂载系统文件系统为可读写状态。

adb root

adb remount

14.返回设备序列号 SN 值:

adb get-serialno

15.获取设备的 ID:

adb get-product

16.进入设备 shell:

adb shell

17.列出所有的应用的包名:

adb shell pm list package

18.截屏并保存至 sdcard 目录:

adb shell screencap -p /sdcard/screen.png

19.录制视频并保存至 sdcard:adb shell screenrecord sdcard/record.mp4,执行命令后操作手机,ctrl + c 结束录制,录制结果保存至 sdcard:

adb shell screenrecord sdcard/record.mp4

20.获取设备分辨率:

adb shell wm size

21.列出指定应用的 dump 信息,adb shell pm dump 包名。

adb shell pm dump

22.列出对应包名的 .apk 位置,adb shell pm path 包名。

adb shell pm path

23.查看当前终端中的进程信息:

adb shell ps

24.monkey 测试:adb shell monkey –p 程序包 –v 测试次数 ,比如“adb shell monkey –p com.htc.Weather –v 20000”意思是对 com.htc.Weather 这个程序包单独进行一次 20000 次的 monkey 测试。

adb shell monkey –p 程序包 –v 测试次数

25.显示所有程序包:

adb shell ps | grep [process]

26.根据进程 pid 或包名查看进程占用的内存:

adb shell dumpsys meminfo

adb shell dumpsys meminfo<package_name>

27.APP 启动:

adb shell am start -n packageName/activity

28.APP 关闭

adb shell am force-stop 包名

29.监控 APP 启动时间:

adb shell am start -W packageName/activity

以上这些面试题都是非常容易被面试官问到的,建议保存,面试之前反复观看,最后祝愿所有的面试者都能够找到自己满意的工作。

关注我,持续更新~

最后为方便大家学习测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。

包括,软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2021软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…… 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS 事件组

实现功能&#xff0c;当任务A,B完成后执行串口任务。 不同任务用不同的位表示 configUSE_16_BIT_TICKS1,bitx(0~7)&#xff1b; configUSE_16_BIT_TICKS设置为0 &#xff0c;bitx(0~23)&#xff1b; //串口任务的头文件 #ifndef __TRANSMIT_H #define __TRANSMIT_H#include…

nVisual创建机柜流程

一、制作机柜 1.先在绘图软件中把机柜画出来 2.把机柜导出一张SVG格式的图片 二、创建机柜 1.打开nVisual右上角点击管理选择模型库 2.选择设备点击新增&#xff0c; 依次录入机柜品牌、型号、宽高深等基础数据&#xff0c; 再上传相应的前视图&#xff08;在系统里展示…

自学python有推荐的么

大学生自学那必然是首推B站大学哇能称之为大学不是没有道理的&#xff0c;看看各个领域的学习分享都是非常多的&#xff0c;关键是看着弹幕就感觉像是在和一帮志同道合的小伙伴一起学习&#xff0c;自学的道路也不再孤单了&#xff0c;遇见不会的没准还能在弹幕和评论区找到答案…

TensorFlow详解3举个cnn卷积栗子

一、实现简单的cnn卷积神经网络 实现简单的cnn卷积神经网络&#xff08;用到的是MNIST手写数字的数据库yann.lecun.com/exdb/mnist&#xff09; 用到激活函数&#xff1a; 二、步骤 输入端是28281这样的一张图片&#xff0c;就是一张黑白的图片&#xff08;假如他是一张彩色…

Cat入门学习笔记整理

Cat入门学习笔记整理链路调用追踪介绍链路调用监控实现过程简析常见的链路追踪框架CAT报表介绍Transaction报表Event报表Problem报表Heartbeat报表Business报表Cat实战docker安装客户端集成API介绍Transaction扩展APIEventMetricCAT监控界面介绍DashBoardTransactionEventProbl…

C++ 构造函数与析构函数

1.构造函数的引出 一个实实在在的对象&#xff0c;应该有合法的属性&#xff0c;而不是在对象出来之后&#xff0c;再去设置属性&#xff0c;要实现这个过程&#xff0c;必须在对象出来的这一时刻初始化合法的值&#xff0c;而且不能由程序员调用&#xff0c;要给属性合法的值&…

熟悉requests用法,实现简单网站爬虫

本文模拟的是前后端分离项目&#xff0c;使用账号密码登录获取到token&#xff0c;拿着token加载用户信息&#xff0c;加载分页列表数据并存储文件。 本文用到的知识点&#xff1a; 1、urllib.parse URL解析&#xff1b; 2、session用法&#xff0c;保存所有请求在一个会话中&a…

muduo源码剖析--Buffer

Buffer类 Buffer类是自定义处理数据输入缓冲的类&#xff0c;底层是vector< char >&#xff0c;通过readIdx和writeIdx将缓冲区分为3个部分&#xff0c;第一部分是预留的8字节已经读出的缓冲区字节数、第二部分是还未读出的部分、第三部分是可写的部分。 Buffer类的设计…

JavaScript【三】JavaScript中的数组

文章目录&#x1f31f;前言&#x1f31f;数组&#x1f31f;声明&#xff1a;&#x1f31f; 隐式创建&#xff1a;&#x1f31f; 实例化构造函数&#xff1a;&#x1f31f; 注意&#xff1a;一个值为数组的长度。&#x1f31f; 访问&#xff1a;&#x1f31f; 遍历&#xff1a;&…

C++练级之初级:第三篇

C练级之初级&#xff1a;第三篇 1.探索C中函数重载的本质 &#x1f914;首先我们先解决一下为什么C支持函数重载&#xff0c;而C语言不支持&#xff1f; 这里就不得不提起编译链接了&#x1f601;&#xff1b; &#x1f449;这是编译链接篇 以这三个简单的文件为例&#xff1…

C51单片机串口通信(概念部分)

1.通信的基本概念 1.1&#xff1a;串行通信与并行通信 &#xff08;1&#xff09;.串行通信 串行通信是指用一根数据线将 一个字节的八个bit位连接&#xff0c;从低位开始依次传输。 优点&#xff1a;成本便宜&#xff0c;传输稳定 缺点&#xff1a;速度慢 并行通信是指将一…

重学Java设计模式-行为型模式-责任链模式

重学Java设计模式-行为型模式-责任链模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-18-重学 Java 设计模式《实战责任链模式》.html#重学-java-设计模式-实战责任链模式「模拟618电商大促期间-项目上线流程多级负责人审批场景」 责任链模…

stegano(图片隐写、摩斯密码)

附件是PDF&#xff0c;我们在选择内容时发现光标溢出了文本 说明这里还存在一些我们看不到的内容 直接CtrlA全选&#xff0c;CtrlC复制后新建一个纯文本文件 将复制的东西粘贴过去 粘贴后发现果然多出来了一些东西&#xff0c;提取出来 BABA BBB BA BBA ABA AB B AAB ABAA A…

3.2 三角分解法

思维导图&#xff1a; 3.2 矩阵的三角分解 3.2.1 什么是矩阵的三角分解&#xff1a; 矩阵的三角分解&#xff0c;也称为LU分解&#xff0c;是一种将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的方法。该分解通常用于解线性方程组和计算矩阵的行列式和逆矩阵。 设A为n*n的…

【通世智库】宁晓红:医疗更完整的样子

2022年的10月&#xff0c;北京协和医院缓和医学中心成立了&#xff0c;这是巨大的好消息&#xff01;北京协和医院连续13年蝉联中国医院排行榜榜首&#xff0c;它率先成立了缓和医学中心&#xff0c;可见缓和医疗在医学领域的重要地位和不可估量的价值。【作者&#xff1a;宁晓…

软件安全之CRC检测

CRC介绍 在玩某些游戏&#xff0c;例如fps类游戏时&#xff0c;你想要修改某些特定的数值实现一些功能&#xff0c;这时你很有可能会被查封账号甚至禁封机器码。因为你更改了游戏中的数据&#xff0c;从而导致接收方收到”错误的数据“。为尽量提高接收方收到数据的正确率&…

可视化Echarts中title、tooltip、legend的常用属性设置

title中常用的设置 配置项--tooltip 配置项--legend title中常用的设置 title 标题组件&#xff0c;包含主标题和副标题。 以下是常用的对标题的设置 title:{//设置图表的标题text:"主标题",link:"baidu.com", //设置标题超链接target:"self&q…

2023最新谷粒商城笔记之支付服务篇(全文总共13万字,超详细)

支付服务 这里我们是使用的支付宝进行支付&#xff0c;所以需要调用支付宝的相关API&#xff0c;下面来了解一下怎样使用支付宝进行线上支付。 支付宝配置相关概念 支付宝开放平台传送门&#xff1a;支付宝开放平台 网站支付DEMO传送门&#xff1a;手机网站支付 DEMO &…

数字滤波器设计——IIR 滤波器

数字滤波器设计实践介绍 此示例说明如何使用 Signal Processing Toolbox 产品中的 designfilt 函数&#xff0c;根据频率响应设定设计 FIR 和 IIR 滤波器。该示例重点讲述低通滤波器&#xff0c;但大多数结果也适用于其他响应类型。 此示例主要介绍数字滤波器的设计&#xff…

D3.js实现线条的流动效果(从一端移动到另一端并且变色)

参考&#xff1a; SVG&#xff1a;理解stroke-dasharray和stroke-dashoffset属性 使用SVG CSS实现动态霓虹灯文字效果 纯CSS实现帅气的SVG路径描边动画效果 实现的效果为&#xff1a;路径左移到完全看不见的地方&#xff0c;然后一边右移&#xff0c;一边从黑色变为红色 <…