持续更新参加面试过程中,遇到的软件测试相关的面试题,包括:项目管理、测试理论、python基础、数据库、团队管理等等。
1. 一些常用的Linux 指令
1. tail 从文件尾打印(head 从文件头开始打印)
-n 行数
-c 字节数
tail -n 100 xx.log | grep "xx"
tail -f xx.log
2. tar 解压缩文件
tar -zcvf xx 压缩文件
tar -zxvf xx 解压文件
3. scp 服务器上传下载文件
scp 本地 服务器
scp 服务器 本地
4. ps 查找进程
ps aux | grep "java"
lsof -i: port --- 查找进程
5. kill
kill -9 pid (强制)
kill -15 pid (默认)
6. chmod 修改文件权限
r --- 100 ---- 4
w --- 010 ---- 2
x --- 001 ---- 1
chmod 777 xx(可读可写可执行)
7. grep
grep -E 同时匹配多个关键字–或关系
grep -E "word1|word2|word3" file.txt
同时匹配多个关键字–与关系
grep word1 file.txt | grep word2 |grep word3
必须同时满足三个条件(word1、word2和word3)才匹配。
显示该行数字加多50行
grep -A 50 431e932841f9486a96c930ccbc8ddd5d target-lps_err.log
2. 一次完整的请求
- 域名解析
- 建立tcp连接
- 发起http请求
- 服务器响应http请求,返回html代码
- 浏览器根据html代码构建dom树,并下载相应的资源
- 浏览器渲染页面,呈现给用户
HTTP ---- 请求头内容
GET /home.html HTTP/1.1 ---- 请求方式、HTTP版本(1.0/1.1)
Host ---- 服务器域名
User-Agent ---- 浏览器身份字符串
Accept ---- 能够接受的回应内容类型
Accept-Language ----
Accept-Encoding ----
Content-Type ---- 参数类型
Connection: keep-alive ---- 长短连接
3. HttpRunner
- debugtalk.py文件,用于存储自定义的python函数,在测试用例中调用的函数均在此文件中定义
- 函数引用:${debugtalk函数(函数入参)}
- 校验 validate
- 导出变量供全局使用(参数关联) export
4. 长短连接
短连接:建立连接-数据传输-关闭连接…建立连接-数据传输-关闭连接
长连接:建立连接-数据传输…(保持连接)…数据传输-关闭连接
长连接可以省去较多的tcp建立和关闭连接的操作,减少浪费,节约时间。但如果client和server的连接一直不关闭的话,也会存在问题:随着客户端连接越来越多,服务器早晚有扛不住的时候
connection: keep-alive
5. OSI 七层协议
应用层: HTTP
表示层
会话层
传输层:TCP、UDP
网络层:IP
数据链路层
物理层
6. TCP和UDP
tcp和udp协议都是传输层协议,tcp(传输控制协议)、udp(用户数据报协议)。udp只需要发送两个报文:请求包和响应包;tcp需要握手三个包、请求包、响应包、挥手四个包,共9个包,相比之下udp效率更高,传输速度会更快。
- tcp基于连接提供的是可靠的传输,基于连接也说明需要的时间更长,应用于需要可靠性高的场所:http请求、文件传输等
- udp不基于连接,但是传输速度快,应用于对网络通信要求快的场合:语音电话、视频、直播等
7. http和https的区别
- https相对http更安全,数据在传输过程中是加密的,接受者接收到数据需要先解密
- 端口不一样,https端口443,http端口80
- 使用https 需要到ca申请证书,证书一般不免费
- https是基于http,额外增加了TLS/SSL连接加密,所以https相对http传输慢,http只需要传输tcp握手的三个包,https需要12个包(还需要ssl连接的9个包),会更耗浏览器的资源
- 用途不一样:http用于信息共享网站。比如博客;https用于保护性要求更高的网站,比如电商
8. post和get请求方式的区别
💡 http的底层是tcp/ip,get和post只是http请求的两种方式
- 设计用途不一样:get用于数据查询;post用于数据提交或更新
- 是否缓存不一样:get可以缓存;post仅当包含新信息时可以缓存
- 传参方式不一样:get可以通过url传参,参数长度有限制,只能传递字符串类型(当然也可以通过request body传参);post通过request body传参,参数类型多样,长度无限制
- http请求就是不安全的,这里讨论的安全性指get请求,参数在url直接暴露,post的传惨在request body里,抓包也可以看到
- 传递的数据包不一样(至关重要):get产生1个tcp数据包,post产生2个数据包
- 对于get请求,浏览器会把http header和data一并发送出去,服务器响应200
- 对于post请求,浏览器先发送header,服务器响应100(continue),浏览器再发送data,服务器响应200(ok)返回数据
9. http状态码
1xx | 信息,表示临时响应并需要请求者继续执行操作 |
---|---|
2xx | 成功,操作被成功接收并处理 |
3xx | 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向 |
4xx | 客户端错误,请求包含语法错误或无法完成请求 |
5xx | 这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错 |
301:永久重定向
302:临时重定向
400: 请求错误
401: 未授权
403: 禁止访问
404: 服务器找不到请求的网页
500: 服务器内部错误
502: 错误网关
503: 服务不可用
504: 网关超时
10. session和cookie的区别
session的工作原理
- 用户第一次请求服务器时,服务器会生成一个seesionid
- 服务器将生成的seesionid返回给客户端
- 客户端收到sessionid并将它保存在cookie中,当客户端再次访问服务器会带上这个sessionid
- 当服务端再次收到来自客户端的请求,会先去检查是否存在这个sessionid,如果不存在重复1、2流程,如果存在就去遍历服务端的session文件,找到这个sessionid相对应的文件,文件里的键值便是sessionid和用户的一些信息
- 此后的请求都会交换这个sessionid,进行有状态的会话
session和cookie的区别
- 数据存放位置不同
- session 存放在服务器上
- cookie 存放在客户浏览器上
- 安全性不同
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺诈,考虑到安全性应该使用session
- 性能使用程度不同
- session会在一定时间保存在服务器上。当访问增多,会比较占服务器的性能,考虑到减轻服务器性能,应该使用cookie
- 数据存放大小不同
- 单个cookie保存的数据不能超过4K,而且很多浏览器都限制了单个站点最多保存20个cookie
- session并没有上限,但从服务器的性能来说,session内不要存放过多的东西,并且设置session删除机制
- 会话机制不同
- session会话机制是一种服务器端机制,他使用类似哈希表的结构来保存信息
- cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送给同一服务器
11. 服务器性能
1. 响应时间
2. 并发数
最佳并发数 随着并发数的增加,TPS不再相应增加,并且响应时间持续增加
3. 系统处理能力
TPS(系统吞吐率):在服务器性能没有达到瓶颈的情况下,TPS=并发数/响应时间
QPS:每秒查询率
4. 错误率
5. 资源使用率 CPU占用率、内存使用、负载、网络IO
总结:在并发数达到一定的数之后,系统的吞吐量不再上升,反而随着压力增加,系统吞吐下降,
原因是系统超负载工作,上下文切换、内存等其他消耗导致性能下降CPU
4核8G
8核16G2000万日活
使用jmeter测试服务器性能,将jmx脚本上传到服务器执行生成jtl脚本,本地查看性能结果,使用本地jmeter压测容易达到本地主机的瓶颈,数据不可靠。jmeter -n -t xx.jmx -l xx/xx.jtl
持续更新......