霍格沃兹学习路线和面试重点准备

分享下我个人的学习路线和面试前重点准备技能:

pytest->完善接口自动化框架->UI自动化框架->Linuxs三剑客->计算机网络->自动化原理->MySQL->排序算法->数据结构->Python->Shell 脚本->Docker->持续集成/交付->安全->测试用例计划思维->中间件->socket->pandas->前后端框架

重要是完善接口,UI 自动化测试框架实战技能,这部分是一定要去落地实施的,不然你无法真正接触到业务核心难点。所谓师傅领进门,修行在个人。

pytest

是最流行的 Python 自动化测试框架,需要重点掌握。

UI 自动化测试

除了学院教授的 PO 思想,简单完成页面封装后。我们要去增加用例,只有用例数足够多时候,你会发现还需要如何在多个 py 文件中管理用例顺序?driver 调度是否合理这一系列问题。也可以去增加相关的日志,报告模块的封装,将部分 JS 处理同步集成到 Basepage 模块中,还有一系列的系统操作,SeleniumGrid 的集成等等。

UI 自动化扩展:增加 log 存储,Allure 报告存储(此处的 Allure 必须要结合趋势图,例如这一次生成报告后,你需要保存 result 中的 history 文件,等下一次生成时,覆盖到 report 中的 histroy 中),seleniumgrid 的执行命令,使用 pytest.ini 进行定制,使用pytest钩子函数定制,使用 pytest-xdist 进行并发用例等)。

对于接口自动化

其实很多时候,企业不仅限于满足只断言接口状态响应码,部分字段等。对于编写速度,稳定性,数据真实性也是有很多的要求。对于速度,我们可以通过 mustache 模板技术生成测试用例,可以通过 Charles 生成的 chls 文件进行部分处理生成 JSON 或者 YAML 文件;对于稳定性,可以通过在设计阶段,生成对应接口正确的 jsonschema 进行对比;对于数据真实性,可以通过 mitmproxy,让流量走特地接口,直接生成线上数据,真实模拟用户操作回放。

接口自动化扩展:(增加 log 存储,Allure 报告存储,异常处理机制,链接数据库,失败用例重跑 pytest-rerunfailures,用例执行控制 pytest-ordering ,重复执行 pytest-repeat,使用 jsonschema 进行断言,通过 charles 文件自动生成 YAML 或 JSON 文件,通过 mitmproxy 进行线上流量回放等)。

对于 Linux 三剑客

(1)匹配 nginx.log 中 404 和 500 有多少行?

cat nginx.log |awk '{print$9}' |grep -E '404|500' |wc -l  // 过滤输出了$9一列
awk '$9~/404|500/' nginx.log | wc-l  // 只将$9匹配,输出的仍是完整行

(2)统计 nginx.log中 出现次数最多的 IP

cat nginx.log |awk '{print $1}' | sort |uniq -c |sort -rn |head -3|awk '{print$2}'
sort 排序  sort -n 按数字排序  sort-r 反转
uniq 去重  uniq -c 去重并统计重复次数
head -3 头三个   tail -3 尾三个

(3)将 nginx.log 中的 topics 后面的数字替换成 number

sed -E 's/topics\/[0-9]*/topics\/number/g' nginx.log
-E 采用正则   's/old/new/g' 固定替换公式
[0-9]匹配数字,[0-9]*匹配 0个或者多个数字
\/ 表示 / 符号,进行转义

(4)讲 nginx.log 中的 ip 地址横向打印

awk '{print $1}' nginx.log  | sed -e ':1;N;s/\n/|/g;t1'
:1 ~ t1 指设置一个标记,若成功,则重复执行
N指追加前面的IP 例如:216.x.x.x \n 216.x.x.x
s/\n/|/g 指将换行符替换成|

三剑客方面除了常见的一些命令之外,建议熟练掌握正则使用,正则非常强大。

对于计算机网络

(1)网络七层模型,TCP/IP模型

OSI七层模型TCP/IP模型5层结构 
应用层 应用层 应用层 TELENT,HTTP,DNS,FTP,SMTP,POP3
表示层      
会话层      
传输层 传输层 传输层 TCP/UDP
网络层 网络层 网络层 P,ARP,RARP,ICMP,IGMP
数据链路层 网络接口层 数据链路层 以太网,物理网络,LAN/WAN
物理层   物理层  

(2)UDP 与 TCP 区别

  • TCP 有连接;UDP 无连接(基于无状态传输);
  • TCP 需要建立三次握手,含有确认、拥塞、重传机制,对系统资源要求多;
  • UDP 不需要一系列复杂认证,速度快;TCP 速度慢;
  • TCP 含有确认机制,数据可靠,有序;UDP 不可靠,无序;
  • TCP 面向字节流(流模式);UDP 面向报文(数据报模式);

(3)HTTP 与 HTTPS 区别

  • 端口:http 80 ; https 443;
  • 资源:https 需要加解密需要消耗更多 CPU 内存;
  • 安全:https 需要认证证书,http 无法验证身份;

(4)HTTPS 的通信加解密过程,证书为什么更安全

HTTPS 含有证书,CA 证书需层层认证,用上层公钥解开 CA 的 hash 签名获取 hash 值;且与权威机构存储 hash 值对比,判断认证可信;

过程:

  1. 客户端使用 HTTPS 的 URL 访问服务器,要求建立 SSL 连接,发送相关数据及随机数给服务端
  2. 服务端收到请求,发送相关数据,随机数,证书信息(含公钥)给客户端
  3. 客户端校验证书,生成随机数 pre-master,并用服务器公钥进行加密,发送已加密随机数 pre-master 与客户端证书给服务端
  4. 服务端校验证书
  5. 客户端,服务端通过对端随机数,已方随机数,pre-master推算出对称密钥
  6. 通过对称密钥加密传输

(5)http1.0与https1.1有什么区别

  1. http1.0为短连接;http1.1请求头携带connetion:keep-alive,建立长链接
  2. http1.0一个连接对应一个请求一个响应;1.1连接过程中可实现多个请求多个响应,且不需等待响应可发送下一个请求
  3. http1.1增加了100状态码,允许客户端向服务端发送请求头待确认后再发送请求体内容,节省了带宽
  4. http1.0认为一个主机拥有唯一IP;http1.1中一个IP对应多个主机,增加了host指明主机名
  5. http1.1增加更多新请求头,错误响应状态码与缓存机制

(6)get和post区别

  • GET 请求参数在 URL 中;POST 请求参数放在请求正文中
  • GET 请求参数有限制(例如浏览器对 URL 长度限制);POST 无限制
  • GET 参数存放在链接中直接保存在浏览器历史记录中,较不安全
  • GET 大多数用于信息获取,POST 用于信息修改,对服务器安全影响程度不同

(7)session,token,cookies 区别

  • Cookie:由服务器生成,保存在客户端中
  • Session:一般通过Cookie传输,用于区分用户,存储在服务器中(容易占用服务器资源,且服务器故障,负载均衡等容易丢失或请求到其他服务器中)
  • Token:一般通过Cookie传输,将用户数据进行签名(加密),并将签名和用户数据整合成token发送给客户端,客户端携带token请求时,将token中用户数据再次签名,与token中的签名进行对比,一致认为用户已认证登录,不需要存储在服务器中

(8)http三次握手四次挥手过程

认知概念:

  • 序号:Seq 序号,用来标识从TCP端向目的端发送的字节流
  • 确认号:Ack序号,当ACK标志位为1时,确认号有效,Ack=Seq+1
  • 标志位:URG(紧急指针有效),ACK(确认序号有效),PSH(接受方应尽快把报文交给应用层),RST(重置连接),SYN(发起新连接),FIN(释放链接)

三次握手与四次挥手:

 

 

补充说明:在客户端与服务端传输 TCP 报文中,双方Ack与Seq都在彼此Ack与Seq基础上计算,这样保证了 TCP 报文传输的连贯性,一旦报文丢失,则无法继续握手

四次挥手:

 

 

补充说明:

  • 与“三次握手”一致,在彼此Seq,Ack上计算,保证TCP连贯性
  • “三次握手”被动服务器方不需要任何准备
  • “四次挥手“被动服务器方不能立即释放连接,还有必要数据处理,经过CLOSE-WAIT阶段准备
  • 客户端在最后需等待2MSL,确保客户端收到服务器端FIN,FIN发送后,若2MSL内未收到ACK则再次发送FIN

(9)请求一个网址发生的完整过程

  1. DNS解析:通过浏览器缓存->操作系统缓存->路由器缓存->DNS缓存(运营商)->根域名服务器
  2. 建立TCP连接,发起三次握手
  3. 发送HTTP请求
  4. 服务器处理请求
  5. 浏览器解析渲染页面:
    • 浏览器读取响应加载 HTML
    • 静态资源加载
    • 动态资源加载
  6. 释放TCP连接,四次挥手

(10)常见网络状态响应码

  • 1XX 指示信息,请求已接受,等待继续处理
  • 2XX 请求接受
  • 3XX 重定向
  • 4XX 客户端错误
  • 5XX 服务端错误
  • 301 永久性转移,302 暂时性转移,400 客户端请求有错(安全拦截),401 请求未授权,403 禁止访问,404 资源未找到
  • 501 服务器内部错误,502 错误网关,503 服务器不可用,504 网关超时

(11)HTTP 请求,响应结构

 

 

 

 

对于自动化测试原理

重点掌握 Selenium 自动化原理,接口 Request 原理,接口 Mitmproxy 代理原理(中间人攻击),Appium 自动化测试原理;

对于数据库 MySQL

重点复习 inner join,left join ,right join,union,子查询,order by,group by …having,distinct,事务,索引类型、原理,存储过程,慢 SQL,优化等。

对于排序与数据结构

主要掌握冒泡法,插入排序,选择排序,快排,归并算法,希尔排序等(大部分面试过程,快排是最核心的,其余排序掌握两三种即可)。

个人学习题目:https://github.com/testQx/math 37

主要掌握顺序表,链表(单向,双向,循环等),栈,队列,树

对于算法,除上方的数据结构外,还需掌握 hash 散列表,动态规划等,建议刷 LeetCode 初中级题目,刷一百题左右足够了。

对于 Python 学习

  1. 深浅拷贝
  2. 各数据结构特点、区别
  3. 垃圾回收机制
  4. Python 缓冲池
  5. 装饰器原理与实现
  6. 线程,进程,协程区别、实现
  7. 迭代器与生成器等

对于 Shell 脚本

Shell 语法编写规则:

同一个 shell 中编写函数 a,function a() ,不需要事先定义有多少个变量,需要调用函数时,直接传参 a 123,则此"123" 想要在 function a 中体现时,则 echo $1,参数由1开始计数,调用函数返回值,则在执行完函数时,echo $? 则输出上一个运算的返回值。

编写循环语句:

  1. while xxx; do xxxxx done 结构
  2. for i in {0…9};do xxx done 或者 for i in((i=1;i<=j;i++)) 编写条件判断语句;
  3. if [ “xxx” = “xxx” ]; then xxxxx fi 注意[ ]中间各个空格必须隔开
  4. 多重判断: if [ “xxxx” = “xxxxx” ];then xxxxx else if [ “xxxx” = “xxxx” ];then else xxxxx fi
  5. 判断条件逻辑符号:&& 与,|| 或,!非 ;
  6. 判断条件数值大小符号: -eq 等于,-ne 不相等, -gt 大于, -ge 大于等于,-lt 小于,-le 小于等于;
  7. 跟踪 shell 执行:sh +x xxxx.sh (会将可能输出的结果进行打印);
  8. a=‘123’ 想要输出a的变量 尽量使用${a} 而不是$a ,避免拼接变量时搞错值 $( )与等同,执行里面的程序命令 执行一串命令,可用()和{} 当使用(xxxx;xxx)中间使用;隔开使用{xxx;xxxx;},中间、尾部必须使用;隔开,且第一个命令前必须有空格;
  9. $(( )) 表示进行整数计算;
  10. 条件语句中[ ]表示匹配中括号的字符,[!..]表示不匹配中括号的字符;
  11. =代表赋值,==代表判断;

对于 Docker

重点复习学院课程的 dockerfile,docker 网络模式,dockercompose,docker 文件管理系统等。

对于持续集成/交付

这部分主要复习学院课程相关视频即可,掌握 Jenkins 的构建,插件,Maven 打包等。

对于安全

  • 命令注入:只用;拼接 shell 命令;
  • SQL注入:使用 OR 类似拼接引号达到绕过;
  • XSS漏洞:注入 HTML 闭合 JS 这些 ><script></script>
  • CSRF漏洞:伪造请求,将链接发给已登录的浏览器,点击时自动触发更改;利用 URL,图片这些点击;
  • 使用 zap、appcran 等工具扫描,zap 可集成到 Jenkins 中,也可以通过调用 API 实现自身特殊的安全扫描;

对于测试思维

面试时候大部分会询问你以往工作经验中某一个模块功能,让你说出你是如何设计测试计划(此处需重点查看,面试官非常喜欢问)和测试用例。

例如从点线面出发编写功能性用例,UI层用例,兼容性用例,安全性用例,性能用例,接口用例等。

对于中间件

这部分个人也仍在探索,需要多看一下 Kafka,Zookeeper,Redis,mq 原理,相关消费机制,优化机制等(面试测试开发是很好的一个加分项);

对于 Socket

如何简单建立一个服务端与客户端的通讯等等;

对于 pandas

通过 Python 进行数据分析,后续课程中也有涉及,这部分为扩展加分项;

对于前后端框架

学院的测试开发后续课程中也有涉及,这部分为扩展加分项;

面试测试开发的时候,大家也不需要太紧张,除了以往的测试经验外,更多会考察你对开发方面的理解,对语言的熟悉程度,以及你站在测试开发方向,对软件测试和质量保障全局的一个理解。

另,Python 开发进阶,个人比较推荐《流畅的 Python》这一本书。

 

 
 
 
 
9 天后
posted @ 2020-11-01 12:36  方园FPP  阅读(218)  评论(0编辑  收藏  举报