接口测试面试题

说说接口测试的流程,介绍一下 request 有哪些内容。
答:
(1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。
(2)request 内容:

① 封装了各种请求类型,get、post 等;
② 以关键字参数的方式,封装了各种请求参数,params、data、headers、token 等;
③ 封装了响应内容,status_code、json()、cookies、url 等;
④ session 会话对象,可以跨请求。

OSI有哪几层,分别包含哪些协议?#

上三层 应用层

  • 应用层 HTTP,FTP,SMTP,SSH
  • 表示层
  • 会话层 SSL

下四层 网络层

  • 传输层 TCP/UDP
  • 网络层 IP
  • 数据链路层
  • 物理层

三次握手与四次挥手?#

  • 三次握手 请求连接 -> 服务端确认 -> 客户端确认
  • 四次挥手 请求断开 -> 服务端同意 -> 服务端释放连接 -> 客户端确认

HTTP有哪些请求方法?#

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE
  • PATCH
  • OPTIONS

HTTP常见的状态码有哪些?#

200 302 301 400 403 404 500 502 503

GET和POST的区别?#

  • GET用于获取数据
  • GET一般不发请求数据,参数通过URL Query
  • GET参数直接暴露在地址栏中
  • GET可以被保存,收藏
  • GET响应可以被缓存
  • GET是幂等的,POST是非幂等的
  • GET要注意URL长度限制 URL长度限制为4K/主要验证数据的准确性,包括分页

POST注意点 业务破坏性 是否进行清理 重复提交 服务端验证

Cookie和Session的区别?#

  • Cookie在客户端,可以被篡改
  • Session在服务段,不能被篡改

Token和Session的区别?#

  • Token是算法计算出来的,验证时通过算法计算进行验证
  • session实时维护在服务端

HTTP和HTTPS的区别?#

HTTPS= HTTP+SSL

  • 安全
  • 是否需要握手
  • 是否免费
  • 性能

HTTP迁移到HTTPS测试点#

  • 死链扫描
  • 功能回归 核心流程/全回归
  • 核心流程性能损耗评估
  • 三方交互

怎么分析测试点#

  • 功能角度 输入 哪些参数 -> 处理 -> 输出
  • 用户角度 用接口验证业务

接口测试流程#

  • 服务端提测
  • 测接口 以正常场景为主
  • 前后端联调
  • 客户端测试

为什么要做接口测试#

  • 线上巡查 7*24小时的值守
  • DevOps的核心环节
  • 冒烟测试及卡点
  • 系统测试前的回归

 

1、unittest怎么实现结果的对比?
  通过断言,unittest常用的断言有assertrqual、assertnotequal等等
2、setup和teardown有什么用?
  1).setup是测试前的准备工作,每条用例代码执行前都会先执行一次setup。
  2) .Teardown是测试结束后的清理
http相关
3、看过http的请求内容吗?都包含什么?Cookie一般放在哪?平时怎么抓包?
  1).包含url,请求方法,状态码,请求头,请求体
  2).Cooike一般放在请求头
  3).Web可以用谷歌控制台抓,手机或者客户端程序可以用fidder等工具。
4、知道urllib吗?有没有更优的选择?
  1).urllib是python3的库,内置了一些操作http请求的方法。更优的选择是requests,python的第三方库,封装了urllib,更简洁易用。
json相关
5、json和python的字典有什么区别呢?
  1).json是一种数据传输的格式,字典是python内置的一种数据结构。python dict 单引号双引号均可,json强制规定双引号。json key value必须是字符串,python 字典的key,value是任何可哈希的对象
5.1、网络传输需求格式为json,你在python中写的是字典,这时候怎么办呢?
  1).用json库进行转换,json.loads和json.dumps
5.2、清楚json.loads与json.dumps的区别吗?
  1).json中的dumps方法是用来将特定格式的数据进行字符串化的操作,比如列表字典都可以进行字符串化操作然后写入json的file;而且如果是要写入json文件就必须要进行dumps操作;
  2).loads用来将字符型数据转换成原来的数据格式,诸如列表和字典,就是原本是什么格式就还原成什么格式。
6、有遇到过这种情况吗:在函数的内部引用了外部(非全局)作用域的变量。这种情况最著名的应用是什么?
  1).其实这就是闭包,最著名的应用是装饰器。自动化测试经常用到装饰器,比如在登录,打日志,输出时间等等情况
考察面向对象相关:
7、有用过类的一些魔法方法吗?用过哪些?都有什么用?
  1).以双下划线开头和结尾的方法是魔法方法。最常用的:__init__,用来初始化类。其他还很多,比如:__str__,__call__等等
8、类的实例化方法第一个参数是什么?必须是这个单词吗?意义是什么?有没有可能第一个参数是其他的或者没有?什么情况下会出现这种情况?
  1).类的实例化方法第一个参数是self,不一定非得是self,也可以是abcd,随意。
  2).意义是类自身实例化出的对象。
  3).也可能第一个参数是cls
  4).这种情况是类方法,需要加装饰器@classmethod,也可能没有,这种情况是静态方法,需要加装饰器@staticmethod
  
考察多线程相关:
9、Python能否利用多核cpu的优势?为什么?
  1).不能,因为python内置了全局解释器锁(GIL),同一时刻只能有一个线程在运行
  
10、Python多线程更适合什么场景?
  1).io密集型(如爬虫,文件操作,网络编程等)
 
11、thread和threading,推荐使用threading模块,原因如下:
  1).threading更先进,有更好的线程支持
  2).thread模块的同步原语很少,只有一个,threading很多
  3).thread模块对于进程何时退出没有控制。主线程结束,子线程随即强制结束。thread不支持守护线程。
11.1join()的作用是:
  1).在子线程完成运行之前,这个子线程的父线程将一直被阻塞,主线程会在所有非守护线程退出后退出。
 
12、Python多线程需要锁吗?有GIL在,则某一时刻只能有一条线程运行,不会有多条线程同时修改数据的情况产生,那为什么还要加锁?
  1).需要锁。因为很多操作不是原子操作。线程会在执行到100条字节码的时候切换。举例如下:
虽然两个线程A、B由于GIL锁的存在,不会同时执行。(假设A、B功能是对一个全局变量 m 进行+1)但是A由于时间片用完切回B之前的最后一步操作可能是读取m的值,记作m1.此时B执行读取m的值,m加一,写回m,此时m的值是m1+1.又切回A,A执行加一,写回m,而写回的值是多少呢?还是m1+1.
=
posted @ 2020-08-11 16:24  自学随笔  阅读(70)  评论(0)    收藏  举报