测试工程师面试宝典-题库(附部分答案)
按测试工程师职能性质划分为三块内容:业务功能测试、专项技术测试、测试开发
【通用】
[业务功能测试]
理论题:
- 项目或迭代中的测试阶段有哪些?
追问:如何看待某个测试流程的必要性?(比如回归测试)
- 测试用例设计方法有哪些?
追问:你使用过哪些方法?测试什么场景时使用的
- 请阐述一个BUG的生命周期?
追问:当开发不承认你提交的BUG为缺陷时,你会如何处理?
- 测试报告有哪些内容?
追问:如何判断你测试的功能达到可上线标准?
场景题:
- 登陆页面如何测试?>>UI,功能,异常处理,多点登陆,多用户并发,兼容性,安全性等
- 保温杯如何测试?>>外形,尺寸达标,刻度精准等;功能,盛不同液体,保温时长等;耐温,易碎等
- 出现空白页面时,你如何定位问题?>>网络,DNS解析,服务器状态,浏览器缓存,兼容性,代码问题等
追问:页面中有个表,突然只显示表头,可能出现了什么问题?>>地址路径访问;前端代码,JS;数据源绑定;变量字段映射关系;数据表,SQL语句等
[兼容性测试]
Web端兼容性测试:
- 如何选择测试哪些浏览器版本?>>用户(埋点)数据,线上兼容性缺陷集中版本,主流浏览器常见版本,是否需要关注重点用户等
移动端兼容性测试:
- 如何选择测试哪些移动端设备,机型?
[移动端测试]
- Web端和移动端测试的区别是什么?
- 你用过的安卓模拟器有哪些?
弱网测试:
- IOS有自带系统插件模拟2G,3G或4G等不同网络
- 测试工具模拟,如Fiddler等
[通用技术]
SQL(DML语句):
- Like 和 as的区别?
- Order by 和 Group by的区别?
追问:Order by后面可以跟多个列名吗?
- inner join 和 right join的区别?
- left join 和 left outer join的区别?
- 多表查询的方法有哪几种?
- 审计字段一般有哪些?
- Having的用法?
- Trancate 和 Delete的区别?
- Insert into select from 和select into from的区别?
- 数据库表和视图的区别?
视图是存在内存中,只保存SQL,数据库表是物理存储的
视图通常只能查询,数据库表除查询之外,还可以增删改(也存在可更新的视图)
视图是单表或多表关联查询的子集,可以禁止用户访问表而只能通过视图查询数据
视图是保存在数据库表实例下,临时表是存在tempdb实例下
- 存储过程和函数的区别?
函数有且只有一个返回值,且需指定返回值的数据类型,存储过程可以有返回值或无返回值,
函数可以直接返回table类型的结果,存储过程不可以
存储过程中可以使用临时表,函数中不可以
存储过程使用更灵活,函数使用有很多限制,比如不能使用commit和rollback等操作
sql语句中可以调用函数,而调用存储过程需要用exec
- 什么是触发器trigger?
在发生数据库交易时触发指定的sql语句强制检验或转换数据
触发器执行错误时异常数据会回滚
dml触发器,强校验业务规则,ddl触发器,限制修改表结构,登陆触发器,用户成功登陆后记录用户消息到sql日志
- 约束constraint和索引index?
约束是针对某张数据库表的某个字段设置一定的数据规则,比如unique唯一
索引是为了提高数据库表的查询效率创建的一种特定的数据结构,通常在数据量较大,频繁被查询或排序的列上使用,一般有聚集,非聚集,联合索引三种
- 聚集索引与非聚集索引?
聚集索引,索引和数据存放在一起,查询效率高,但数据更新时需维护索引,消耗多,例如字典拼音
非聚集索引,索引只存储数据存放的路径,例如字典偏旁
网络协议相关(接口测试理论基础):
- 传输层协议UDP和TCP的区别
UDP是非连接的协议,发散式广播,可能会丢失数据包,难以保证数据的正确性与稳定性,但是更高效,
TCP是面向连接的协议,通过三次“握手”建立连接,数据传输有序,稳定,更消耗资源
- TCP协议的3次握手(three-way handshake)和4次挥手(four-way handshake)
建立连接:
第1次握手:客户端发送SYN报文请求,服务器接受,确认接受正常
第2次握手:服务器响应SYN报文,客户端接受,确认发送和接受正常
第3次握手:客户端发送ACK报文,服务器接受,确认发送和接受正常
终止连接:
第1次挥手:客户端发送FIN报文,并停止再发送数据,主动关闭TCP连接
第2次挥手:服务端发送ACK,回复客户端已收到关闭请求,并断开客户端到服务端的TCP连接
第3次挥手:服务端发送FIN报文,
第4次挥手:客户端收到FIN报文之后,发送ACK报文给服务端,在一个报文来回时间后,关闭TCP连接
接口测试:
- RESTful API是什么?
RESTful API是REST风格的API,是一套用来规范多种形式的前端和同一个后台的交互方式的协议。RESTful API由后台也就是SERVER来提供前端来调用;前端调用API向后台发起HTTP请求,后台响应请求将处理结果反馈给前端。
- HTTP Header有哪些?
Cookies:
Cookie:将cookie值发送给Http服务器
Transport:
Host:所请求资源的主机和端口号
Connection:keep-alive/close,网页打开完成之后客户端与服务端用于传输HTTP数据的TCP连接是否关闭
Content-Type:Post请求时的数据格式,
application/x-www-form-urlencoded,提交的数据以键值的格式传输,例k1=v1&k2=v2
multipart/form-data,boundary分割,Content-Disposition制定传输数据类型格式和路径名称,如果是则需要继续申明Content-Type为Image/png
application/json,提交的数据以json格式传输,{"k1":"v1","k2":"v2"}
text/xml,xml格式,常用于http协议的接口
Content-Length:发送给http服务器的数据长度,单位,字节
Client:
Accept:客户端可以接受服务器回发的媒体类型,通常为text/html,即html文档
Accept-Encoding:申明浏览器接收的编码方法,支持的压缩方法,gzip,deflate
Accept-Language:浏览器接受的语言,一般为us-en
User-Agent:请求客服端的操作系统和浏览器版本
Miscellaneous:
Referer:通过哪个主页或链接跳转过来的,通常用于统计网站访问量
追问:作用是什么?
接口请求方式有哪些?
Get:url带参,不安全,长度有限,1024字节,但实际是浏览器对url的长度限制,IE是2083
Post:提交表单,上传文件,可以建立或修改资源
Put:向指定资源上传最新内容,常用于update操作
Head:类似于 Get,无返回值
Delete:
Trace:回显服务器收到的请求,用于测试和诊断
opions:
Connect:
追问:何时使用?
- HTTP与HTTPS的区别是?
- Http默认端口80,Https默认端口443
- https需要向CA申请证书SSL(Secure Socket Layer)访问,数据加密传输,更安全,http是明文传输
- http协议数据传输效率高
- HTTPS的工作原理
- Client发起HTTPS请求,给Server的443端口
- Server把实现配置好的公钥证书返回给Client
- Client验证公钥证书,有效期,是否匹配Client请求的正确的站点。。。验证到根(Root)证书
- Client使用伪随机数生成对称密钥,然后用证书的公钥加密密钥发给Server
- Server使用自己的私钥解密,得到对称密钥,Client和Server双方都持有相同的对称密钥(之后即可使用对称密钥进行加密解密消息通讯)
- Server使用对称密钥加密“明文内容A”,发送给Client
- Client使用对称密钥解密响应的密文,得到“明文内容A”
- Client再次发起HTTPS请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称的密钥解密密文,得到“明文内容B”
- HTTP请求错误码值有哪些?
200 :成功
301 :请求成功,但资源已被永久转移,需要跳转到新地址(重定向)
302 :地址不变,从新地址请求资源,违反URL规范,有安全风险,网址可能被劫持,临时性跳转
400 :请求错误,如表头不对
401 :没有提供认证信息,比如没有带token
402 :
403 :请求资源不允许访问,未授权
404 :请求内容不存在,或服务器未启动
505
追问:各个码值代表什么意思?
- 网站常见的鉴权认证方式有哪些?
Session
把token放在请求头Authorization里,
JWT,Json Web Token
Auth2
没有接口文档,如何做接口测试?
Linux:
- 查找文件
ls, find, pwd
- 给文件夹授权(可读可写可执行)命令是?
chmod 777
追问:常见的文件夹权限代码有哪些?
- 如何修改文本文件内容?
vi/vim
- 如何实现windows和linux服务器之间的文件传输?
WinSCP可视化传输
ftp明文传输,快,21端口
sftp加密传输,速度稍慢,22端口
- 如何登陆服务器?
ssh root@[服务器IP或者域名](一般下一步会提示输入密码)
- 如何重启服务器?
找到服务器启动脚本所在的目录,start之
- 如何部署jar包或war包?
- cat、more、less和most的区别?
cat是全文检索、more支持单向翻页、less支持上下翻页、most支持打开多文件和编辑
- less和tail的区别?
less查询静态日志文件内容,tail可以捕捉实时动态更新的日志
- 如何根据日志中的部分关键字捕捉实时更新的日志信息?
tail -f log.out | grep '关键字'
追问:如何返回该关键字后20行日志信息?
-A 20
前20行呢?
-B 20
周围10行
-C 10
进程相关:
查看所有进程端口使用情况:netstat -apn
ps -ef | grep [进程名关键字]
启动进程:start [进程ID]
关闭进程:kill -9 [进程ID]
sed命令,直接编辑一个或多个文件内容,简化对文件的反复操作
中间件:
- 什么是负载均衡?
- Redis集群如何存储和查找数据
- Redis常用命令有那些?
连接redis:redis-cli.exe -h 127.0.0.1 -p 6379
查数据:get key
增/改数据:set key value
删数据:del key
保存数据到磁盘:bgsave
- Redis通常应用于哪些业务场景?
业务数据量较大又不需要实时更新;需要实时更新但更新频率不高;在特定时间需要实时更新且频率又大的
- Redis集群模式有几种?
主从Master-Slave、一主一从,从库作为主库备份,主写,从读。优点:读写分离,负载均衡,提高效率,缺点:难以保证数据的一致性,主库宕机后只能通过手动切换从库为主库,扩容较为复杂
哨兵Sentinel,一主多从,主库从库数据相同,数据交互通过请求哨兵(中台)访问主库,从库作为备份节点,当哨兵(中台)发现主库失去心跳客观下线(一定数量的哨兵返回主库主观下线之后),从库替换为主库,优点:更健壮,可用性更高,缺点:资源浪费(只交互主库),实现和扩容都比较复杂
集群Cluster,最少配置为3主3从,主从库数据一致,主库用来数据交互,从库作为备份节点,分布式存储数据,客户端连接任意一个服务器即可实现数据交互,优点:可用性和可扩展性较强,缺点:实现较复杂,异步复制,无法保证数据的强一致性,从节点作为备份节点,资源有浪费
其他:单例模式,Redis自研
追问:
- 优缺点有哪些?
- 持久化方式有几种?
RDB快照模式,AOF日志模式
- 分布式,实时和异步
- 微服务是如何实现的?
- 你还了解哪些中间件?Nginx,Euraka,nacos配置,mq,kafka
- 消息中间件有哪些?
Nginx
- 轮询
- 哈希
- 加权
- 连接数
Nacos
作用:
- 集中管理微服务等配置信息
- 动态更新(热部署)
- 多环境配置:多个配置文件映射不同(测试)环境
- 可视化操作:nacos可通过WEB访问,管理配置文件及配置参数内容
配置:
- 子应用或服务pom文件中添加nacos配置中心项(引用nacos)
- application.yml文件中添加nacos配置地址(nacos服务器地址,端口默认8848等)
- 网页控制台中新增所需配置
- 后端代码控制层添加@RefreshScope可以通过配置文件中的RefreshEnabled键值控制配置更新后是否自动刷新热部署应用服务
- application.properities中配置数据源信息
Mq
- 瞬时流量较大
- 下游系统宕机或故障异常
- 异步处理
Kafka
- 文件存储中间件有安歇
MF,FastDFS
【专项技术测试】
[自动化]
接口自动化:
UI自动化:
web端:
定位元素的方式有哪几种?
id,name,xpath,class(class_name),tag,link,partial link,css
追问:xpath的路径有几种形式,各自有什么优缺点?
页面等待的方式有哪几种?
强制等待:sleep(X)
隐式等待:implicitly_wait(X)
显示等待:WebDriverWait(driver,超时时间,调用频率,要忽略的异常).until(要执行的方法,超时时返回的错误信息)
追问:分别在什么场景下使用?
控件能定位到但不能点击可能是什么原因?
移动端:
安卓和IOS自动化实现方式有什么区别?
adb命令?
adb devices 查看当前连接设备
adb install -r xxx.apk 覆盖安装apk软件
adb logcat 查看日志
adb push [文件名] [手机文件夹路径] 往手机里存文件
adb pull [文件路径] 从手机端下载文件
adb shell pm list packages 查看手机端安装的所有app包名
adb shell screencap [指定截屏图片的手机存储路径] 截图并保存
你如何确保自动化脚本执行的健壮性?
jenkis集成
分布式执行自动化
[性能]
性能测试的指标有哪些?
响应时间,TRT,Transaction Response Time,也评估QPS,Query Per Second
吞吐量,TPS,Transaction Per Second
服务器资源占用,负载情况下,资源占用率越低,系统越优秀
什么是性能测试的”二五八”法则和“二八”法则?
你怎么看性能测试、压力测试和负载测试?
是否测过TPS和QPS的接口?
[安全]
什么是系统安全?
你从哪些方面评估系统的安全性?
安全类缺陷有哪些?如何优化?
【测试开发】
什么时候会用到mock?
如何mock?
[编程语言]
Java:
集合对象
List,Set,Map
List 衍生对象有哪些
arraylist linkedlist
hashtable和hashmap有什么区别?
Thread start和run的区别
Python:
- 有哪些数据结构?
列表[],
元组(),
字典dictionary,key键值不能重复
集合set{},元素不能重复
- 什么是装饰器?
把方法或函数封装,可以作为传递参数,在方法内补充代码逻辑
内置装饰器
类方法@classmethod,不需要通过实例调用,可以通过类调用,也不需要self参数
静态方法@staticmethod,声明为静态方法,也不需要任何默认或隐性的传参直接通过类调用
特性@property,把方法封装成一个实例属性,调用则返回这个方法的return值
- 类变量(类属性)、实例变量(实例属性)和局部变量?
class a
{
a='类变量'
def x()
{
self.b='实例变量'
c = '局部变量'
}
}
- 浅拷贝与深拷贝?
深拷贝是将对象本身(A)复制给另一个对象(B)。这意味着如果对对象本身或者子对象进行更改时不会影响原对象。在 Python 中,我们使用 deepcopy()函数进行深拷贝。
浅拷贝是将对象的引用复制给另一个对象。因此,如果我们在子对象中进行更改,则会影响原对象;但对对象本身修改并不会影响原始对象。使用 copy()函数进行浅拷贝。
异常处理
- 切片
start_index,end_index, step
list[0:100:5]
字符串按行读取
C#:
面试后问题:
1.面试表现疑问
2.为什么招这个职位
3.您能简单描述下在这里工作的一天
4.如果有幸被录用,未来3个月希望我解决哪些问题?
5.面试结果最终确定时间?