1.简述软件测试的基本流程
答:首先是测试需求分析阶段,要阅读并理解需求,通过需求分析明确测试内容,提取测试点,其次是测试计划阶段,主要是编写测试计划,参考SRS,项目总体计划,其内容主要包括测试范围、进度安排、人力物力的调配,接着是测试设计阶段,主要任务是编写测试用例,根据测试用例编写方法(等价类、边界值、场景法、错误推断法)针对每一个测试点设计合理的测试用例,然后是测试执行阶段,内容主要有搭建测试环境,先进行冒烟测试(这一步可以维护系统的核心功能)来判定当前系统是否可测,如果通过就可以正式进入系统测试,遇到问题提交Bug到缺陷管理平台(如禅道,JIRA),并对bug进行跟踪,直到被测系统达到测试需求要求,并且没有重大的Bug,测试结束。最后是测试评估阶段,编写测试报告,对整个测试过程和版本质量做一个详细的评估,确认是否可以上线。
2. 如何设计测试用例/测试用例一般包含哪些内容
答:首先测试用例的组成有:(“用模标重,预测果果”)用例编号,模块,用例标题,重要级别,预置条件,测试步骤,预期结果,实际结果。其次测试用例编写方法有:等价类、边界值法、场景法、错误推断法,最后通过结合需求分析和测试用例编写方法针对每一个测试点来进行设计,争取达到最大覆盖率。
3.你对嵌入式系统(尤其是电控/电源产品)的测试有哪些了解?是否接触过CAN通信、UDS诊断协议?(所面试的职位与硬件测试相关的情况)
答:首先嵌入式系统测试有硬件相关测试(比如电源特性测试,环境适应性测试,故障注入测试),功能测试(比如控制逻辑验证),性能测试(实时性测试,负载能力测试,长期稳定性测试),自动化测试(基于脚本的自动化测试框架的搭建)CAN通信是CAN控制器根据两根线上的电位差来判断总线电平,总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化从而将消息发送给接收方
UDS(Unified Diagnostic Services统一诊断服务)诊断协议是ISO 15765和ISO14229定义的一种汽车通用诊断协议,是汽车领域广发使用的车载诊断协议标准,是面向整车所有ECU(电控单元)的,应用于OSI七层模型的应用层,由于它只规定了与诊断相关的服务需求,并未涉及通信机制,所以他可以在不同的汽车总线(例如CAN,UN)上实现。诊断通信用于建立诊断仪与ECU之间的通信连接,并负责将ECU中的诊断结果输送到诊断仪中
UDS作用广泛几乎跟随ECU软件开发的全过程
UDS通信模式:实际上是与ECU交互的过程,即诊断仪请求(request)ECU, ECU给出对应的响应(Response)
4.如果发现一个Bug,开发人员认为不是问题,你会如何处理?
(先找自己原因,再沟通,然后搬救兵,最后记录)
答:首先确认Bug描述是否清晰完整(重新检查报告,补充更加直观的证据,明确bug的影响)
其次与开发人员进行技术讨论(面对面沟通,现场演示重现问题,询问开发人员认为不是问题的具体原因)
然后寻求第三方验证(邀请其他测试人员验证,咨询产品经理,查阅需求文档)
最后分级上报(团队内部讨论,提交给测试组长)记录潜在风险,更新Bug跟踪记录
5. APP日志是什么,如何获取?
答:APP日志是移动应用在运行过程中自动记录的一系列行为数据、错误信息和状态变化,是测试人员定位问题的关键依据之一。日志内容通常包括:用户操作记录、接口请求与响应、错误信息、状态信息、与设备通信过程。
在实习中我主要是使用ADB(Android Debug Bridge)来获取安卓手机上的APP日志,另外,APP有内置“日志上传”上传功能,在APP崩溃后上传到后台平台,也可以从服务器后台查看
6.你遇到印象最深的bug是什么,怎么解决的?
答:在测试XXX和App之间通信过程中发现的一个“假在线”问题
(描述bug现象)在正常情况下,App上显示设备在线,用户可以正常的远程控制,但是在一次测试中,App显示“设备在线”,但是在发出指令后没有响应,日志也没有任何反馈,设备“在线但无意识”
(排查过程)首先使用Fiddler抓包工具分析请求是否发送成功,发现请求正常发送,HTTP返回200,接着检查App日志,显示消息成功写入消息队列,然后查看设备本地日志,发现并未接收到指令,最后进一步对比抓包内容,发现设备token与注册信息在某次版本升级中未正确同步,导致云端以为设备在线,实际MQTT长连接早已断开,但未触发离线标识更新
(解决方式)将该问题整理成了一个“假在线问题报告”附带了通信流程图和token生命周期对比表,开发最终定位为云端心跳机制未严格校验MQTT状态,在下一个版本中修复了该逻辑
(经验收获)这个Bug最大的特点是看似一切正常,实际通信早已失效,让我意识到在通信测试中,不仅要验证接口的响应逻辑,更要重视状态同步一致性的隐藏问题
7.心跳机制是什么?如果心跳机制出现bug会发生什么?
答:“心跳”是指设备与云端定期发送“我还活着”的信号,用于维持连接状态并确认在线状态。
原理是每隔几秒或几十秒设备就会向服务器发送一个“心跳包”,如果长时间没收到心跳,云端就会把这个设备状态判定为“离线”
如果该机制有问题,就会出现“假在线”的bug,APP发送指令,设备没有反应
8.MQTT协议是什么?
答:轻量级的消息传输协议,用于设备和云端之间进行实时通信,支持长连接,适合实时控制,常见于用户登录鉴权,设备通信认证、接口访问控制等场景
9.Token生命周期
答:Token生命周期是指一个身份令牌从创建——使用——过期——刷新的完整过程
【登录成功】
↓
[生成 token(access_token + refresh_token)]
↓
[App 本地缓存 + 每次请求时带上 token]
↓
[token 生效期间正常通信]
↓
—— 到期后 ——
↓
[access_token 失效 → 用 refresh_token 刷新]
↓
【刷新成功】
↓
[继续通信]
↓
【用户退出 / 踢下线】
↓
[吊销 token → token 生命周期结束]
10. 你是如何抓包分析通信协议和模拟网络异常的
答:(使用的工具)使用Fiddler抓取APP与云端的HTTP请求包,在安卓设备上抓包前,配置代理和信任Fiddler证书,以解析HTTPS请求内容。
(抓包场景)APP显示设备在线的状态下,MQTT包是否持续心跳来确认设备是否真的在线
(协议分析方法)阅读MQTT和设备API的通信协议文档,结合抓包内容比对字段是否完整
(模拟网络异常环境)使用Fiddler内置的FiddlerScript自定义人为延迟,在oSession代码段中进行更改,2G的上传在500,下载在400左右,3G的上传在300,下载在200左右,根据要模拟的网络进行更改
11.使用adb logcat,一般是去查看什么log信息
答:首先adb logcat是Android的系统日志查看命令,用于输出设备运行时的各种日志信息(应用日志、系统日志、通信信息)在测试XXXAPP时,我通过adb logcat查看APP的通信行为和MQTT状态,使用grep mqtt可以确认MQTT是否连接成功,指令是否被发布
12.你使用Fiddler抓包是抓web端还是APP端
答:都有过,在上一段实习中主要是抓取APP端的通信数据,用于分析APP与服务器之间的网络请求是否正确,例如在我参与的XXX实习中,APP是通过MQTT协议与设备进行通信,在进行功能测试时,通过将手机连接到Fiddler代理服务器上,配置HTTPS解密,抓取APP发出的HTTP请求和MQTT指令,除此之外在XXX项目中通过Fiddler抓取前端页面与后端接口之间的通信请求,用来验证订单创建、支付回调等接口是否正确响应
13. 如何判断Bug是前端还是后端产生的
答:(现象——抓包——日志——对比)
比如在一个网页端的登录页面上我点击了登录按钮,页面没有跳转,这可能是前端点击事件未绑定或者是逻辑异常,首先先用Fiddler抓包,看一下客户端的请求有没有成功的发出,如果没有发出,那就是前端问题,如果成功发出,但是接口返回5开头或者4开头的状态码,就是后端问题,如果是成功发出,但是接口返回200,但是页面没有响应渲染,这是前端问题,接着查看日志,查看点击事件是否触发,最后与接口文档进行对比
14.如何用postman进行接口测试
答:首先阅读并理解需求分析和接口文档,再进行接口测试之前先进行静态测试分析接口是否满足需求,参数是否和需求匹配,确保以上都没问题后进行下一步的测试用例编写,其次在postman里创建一个模块集合,后续相关的接口测试都放在该集合里,然后创建请求、根据接口文档里的内容配置请求信息(URL、请求方法、请求体等),最后发送请求,查看响应结果
15.如何理解黑盒测试和白盒测试,他们各自使用场景
答:首先黑盒测试是只关注用户的输入和输出的情况,不关注内部的逻辑;Postman就是基于黑盒测试的工具,白盒测试与之相反关注内部的逻辑,pytest是白盒测试工具。(结合自己的项目经历)在做XXXAPP的功能测试时,大部分都是采用黑盒测试,比如在测试XX功能时,我会根据接口文档设计测试用例,输入不同的xx模式和xxID,检查xx是否响应正确。在自己做的项目中,我为后端模块编写了部分JUnit单元测试,对订单价格计算进行了白盒测试,确保代码的每个条件和分支都能被覆盖
16.Linux中ps命令是干什么的
答:查看当前终端下的进程,ps -A查看所有进程,ps -u 用户名,查看某个用户的所有进程,ps -ef查看全系统进程+完整格式
17.兼容性测试是怎么做的
答:(结合自己的项目/实习)在设备兼容性方面,用了多款安卓机型(小米、华为、OPPO)来测试APP是否能正常连接,重点关注MQTT通信是否稳定,是否存在连接失败或指令丢失。在网络兼容性方面我用Fiddler模拟了弱网环境(2G/3G)测试了断网重连是否能恢复控制指令
18.你了解python哪些测试框架
答: unittest是python自带的单元测试框架,常用于函数级别的白盒测试。pytest结合requests
1.列表、元组、字典的区别
答:元组不可变,列表和字典可变,列表和元组是有序集合,字典是无序集合,列表不能作为字典的key,元组可以,列表和元组通过偏移读取,字典是通过关键字索引的集合,使用键值对存储,速度快
2.数组和链表的区别
(内存)数组在内存中连续,链表采用动态分配内存的方式,在内存中不连续
(改变)数组在使用之前要固定数组长度,不支持动态改变数组大小,链表支持动态的增加或者删除元素
(访问)数组在内存中顺序存储,可通过下标访问,链表要从头开始遍历,效率低
(越界)数组大小固定,存在访问越界的风险,链表只要可以申请得到链表空间,就无越界风险
3.json和dict区别
答:json是一种数据格式,是纯字符串,可以被解析成dict
dict是一个完整的数据结构,是对哈希表的实现,以键值对的形式存储
json和dict可以通过dumps和loads实现相互转换
json的key只能是字符串,dict的key可以是字符串、数字、元组
json的key可以重复,dict的key不可以重复
json的字符串强制使用双引号,dict的key可以用单引号也可以用双引号
4.什么是面向对象
答:任何事物都可以看做是一个对象。面向对象就是把整个需求按照特点、功能划分,将存在共性的部分封装成类。优点:易维护、易复用、易扩展,主要思想:封装,继承,多态,抽象
5. 装饰器和应用场景
答:是一个函数,在不修改原函数代码的前提下,为其添加功能,可以理解为“包装函数”,在原函数前后进行插入。常见的应用包括日志记录、权限控制、缓存优化、性能统计等。我在项目中使用装饰器实现了接口日志打印和统一异常处理,提升了代码的可读性和可维护性。
6.python创建对象的方法
答:首先定义一个类,然后创建对象,对象名=类名
7.python异常处理,except可以处理什么类型的error
答:
8.sort和sorted的区别 range和xrange的区别
答:sort是应用在list上的方法,属于列表的成员方法:sorted可以对所有可迭代对象进行排序操作
sort是在原列表上进行操作,sorted返回一个新列表
range得到的是一个列表,xrange得到的是一个生成器对象
9.深拷贝和浅拷贝的区别
答:浅拷贝:没有拷贝子对象,原始数据改变,子对象也会改变
深拷贝:包含对象里子对象的拷贝,原始对象改变不会造成深拷贝里任何对象的改变
10.yield和return的区别
答:return是在函数中返回某一个值,返回之后函数不再执行
程序执行到yield时,函数进入冻结状态,程序不再执行for循环,直接执行下面的程序,只有调用next函数才能获取下一个循环值
11.os和sys的区别
答:os负责程序和操作系统的交互
sys负责程序与python解释器的交互
1.sql与MySQL区别
答:sql是查询语言,而Mysql是一种数据库管理系统
sql是一种创建用于管理关系数据库的语言,mysql是基于sql语言的开源软件,使用mysql可以修改存储在数据库中的数据
由于sql是一种语言,因此他不会进行任何更新,命令始终保持不变,Mysql是一种软件,因此会更新
2.数据查询语句(DQL)的语法结构
3.数据查询语句(DQL)的执行顺序
答:from ——>where——>group by——>having——>select——>order by——>limit
4.SQL中去重有哪些方法?
答:
5.count(1)、count(*)、count(列名)的区别
答:三者都是返回某列行数的函数,三者在执行效果上的区别
6.union和union all区别
答:两者都可以将多个结果合并
7.LIKE中的%和_是什么意思
答:一个%可以匹配任意一个字符,一个_只能匹配一个字符
8.on where having三种过滤的区别
答:
9.数据库中空字符串、0、和NULL的区别
答:
10.窗口函数和普通聚合函数区别
答:窗口函数可以对数据库数据进行实时分析处理
区别:聚合函数是将多条记录聚合为一条,改变了表的行数,窗口函数是每条记录都会执行,不会改变原表中的行数
11. SQL中几种排序窗口函数的区别是什么
答:rank()over():即跳跃式排序,如果有并列名次的行,就会占用下一名的位置(100,100,98排名为1,1,3)
dense_rank()over():并列连续型排序,如果有并列名次的行,不占用下一名次的位置(100,100,98排名为1,1,2)
row_number()over():连续型排序,不考虑并列名次的情况,(100,100,98排名为1,2,3)
12.SQL中几种表连接的区别
13.如何优化SQL
答:按照以下顺序进行优化
14.如何优化SQL查询语句
答:
15.主键、外键、索引的区别
答:
一个表只能有一个主键,可以有多个外键,也可以有多个唯一索引
16.MySQL数据库中char和varchar区别
答:第一:存储方式不同
第二:性能不同
17.什么是事务以及事务四大特性
答:事务是指一组操作的集合,这一组操作要么同时成功,要么同时失败,从而保证数据库中的数据正确性和完整性
四大特性(ACID):原子性、一致性、隔离性、持久性
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。