按测试工程师职能性质划分为三块内容:业务功能测试、专项技术测试、测试开发

【通用】

[业务功能测试]

理论题:

  • 项目或迭代中的测试阶段有哪些?

追问:如何看待某个测试流程的必要性?(比如回归测试)

  • 测试用例设计方法有哪些?

追问:你使用过哪些方法?测试什么场景时使用的

  • 请阐述一个BUG的生命周期?

追问:当开发不承认你提交的BUG为缺陷时,你会如何处理?

  • 测试报告有哪些内容?

追问:如何判断你测试的功能达到可上线标准?

场景题:

  • 登陆页面如何测试?
  • 保温杯如何测试?
  • 出现空白页面时,你如何定位问题?

追问:页面中有个表,突然只显示表头,可能出现了什么问题?

[兼容性测试]

Web端兼容性测试:

  • 如何选择测试哪些浏览器版本?

移动端兼容性测试:

  • 如何选择测试哪些移动端设备,机型?

[移动端测试]

  • Web端和移动端测试的区别是什么?
  • 你用过的安卓模拟器有哪些?

弱网测试:

  • IOS有自带系统插件模拟2G,3G或4G等不同网络

[通用技术]

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的区别是?
  1. Http默认端口80,Https默认端口443
  2. https需要向CA申请证书SSL(Secure Socket Layer)访问,数据加密传输,更安全,http是明文传输
  3. http协议数据传输效率高

 

  • HTTPS的工作原理
  1. Client发起HTTPS请求,给Server的443端口
  2. Server把实现配置好的公钥证书返回给Client
  3. Client验证公钥证书,有效期,是否匹配Client请求的正确的站点。。。验证到根(Root)证书
  4. Client使用伪随机数生成对称密钥,然后用证书的公钥加密密钥发给Server
  5. Server使用自己的私钥解密,得到对称密钥,Client和Server双方都持有相同的堆成密钥(之后即可使用对称密钥进行加密解密消息通讯)
  6. Server使用对称密钥加密“明文内容A”,发送给Client
  7. Client使用对称密钥解密响应的密文,得到“明文内容A”
  8. 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自研

追问:

  1. 优缺点有哪些?
  2. 持久化方式有几种?

RDB快照模式,AOF日志模式

  • 分布式,实时和异步
  • 微服务是如何实现的?
  • 你还了解哪些中间件?
  • 消息中间件有哪些?

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.面试结果最终确定时间?