get post 请求的区别?

参考 :https://github.com/febobo/web-interview/issues/145
安全性:
get 请求的参数数据 都放在url 上可以直接看到。相对来说不安全。
post 请求的参数数据都在body 中,提交请求的时候看不到,相对来说安全。
使用功能上:
get 请求一般用来做获取服务器资源,比如查询相关的接口使用get 方式。
post 请求一般用来与服务器交互数据相关。比如添加一条数据或者修改数据相关。
其他:
get 请求可以缓存在浏览器。
post 请求的数据不可以缓存。

http, https 的区别?

安全性: http协议,超文本传输协议,http协议传输的数据都是未加密的,也就是明文,不安全;https是通过SSL协议对http协议传输的内容进行了加密,要比http协议安全;

CA证书: https协议需要到CA申请证书,但是免费的证书很少,需要一定的费用,而HTTP不需要;

默认端口: http协议和https协议使用的默认端口不一样,前者是80,后者是443。

传输速度: https加密需要解密, http 直接传输,相对来说http速度更快,https 稍微慢一点点,不过现在传输速度还是跟服务器配置有关,这点可以忽略。

常见10个http 状态码

https://www.runoob.com/http/http-status-codes.html
500 内部服务器错误
404 文件未找到
403 禁止访问
400 错误请求
401 未经授权
200 请求成功
206 部分内容
301 永久重定向
302 临时重定向
502 无效网关

接口测试的流程

  1. 先拿到接口文档,如果没有接口文档,需要抓包
  2. 根据接口文档 整理接口的测试点,接口分为单接口,多接口的测试。
    1. 单接口 (数据驱动,csv参数化)— 需要整理 接口的正常场景和异常场景。将测试数据整理到csv文件中,在接口测试工具中上传csv文件,通过读取csv文件来进行接口测试。
    2. 多接口(上下游传参,接口关联)— 梳理接口之间的关联关系,根据业务确定上游接口和下游接口,上游接口提取变量 (Postman使用Tests 从服务器返回结果中提取变量),下游接口中引用变量。
  3. 接口做完之后,针对每个接口添加对应的断言,断言是根据具体的业务来设置断言,主要
    1. 状态码断言
    2. 响应文本断言
    3. json 值断言 使用最多。
  4. 执行的时候,批量执行。在 postman的运行界面中, 运行完成之后通过查看运行结果。

上下游传参怎么做 (串联接口怎么做)

可以使用JMeter 工具来做,也可以使用Postman工具来做。
使用Postman:

  1. 先根据业务场景,确定上游接口,下游接口。
  2. 在上游接口中 在【Tests】面板中编写代码,提取要传参的值,设置为变量。
    1. 使用postman内置的语法 先获取服务器返回结果。
    2. 使用postman代码设置变量。
  3. 下游接口中通过使用 {{变量}}的方式来引用变量。

使用JMeter:

  1. 先根据业务场景,确定上游接口,下游接口。
  2. 在上游接口中使用【正则表达式提取器/json提取器/jmespath提取器】从服务器返回结果中提取出来对应的值,设置为变量。
  3. 在下游接口中使用 ${变量} 的方式来引用变量。

单接口怎么测试?

针对单个接口 正常场景,异常场景都需要进行测试。

  1. 根据需求,设计不同的测试点
    1. 主要针对请求的数据进行设计,比如边界值,等价类
  2. 将数据存放在csv文件中
  3. 在接口中的请求数据中改为变量。变量要跟csv文件中保持一致。
  4. 执行就可以了。
    1. Postman 中运行 在Postman的Runner(执行器中),添加csv文件执行
    2. JMeter中 通过添加CSV文件配置 来进行运行。

怎么添加断言?(如何保证测试接口中返回数据的正确性)

断言方式主要有

  • 状态码断言
  • json 值断言

在做接口测试的时候,要针对每个接口设计断言。断言的内容主要根据服务器返回的结果来设置断言。主要断言服务器返回的内容。
Postman 中断言:

  • 在【Tests】 测试面板中通过使用Postman内置的语法进行断言。

JMeter中:

  • 响应文本断言
    • 状态码断言
    • 响应内容断言
  • Json 断言
  • JmesPath 断言

如何处理接口中的Cookie, 带有Cookie的接口怎么做?

在做这些接口的时候,Cookie一般保留在浏览器中。

  1. 使用 浏览器抓包或使用 Charles 抓包,可以抓到Cookie
  2. 在发送请求的时候,将Cookie放在信息头管理器就可以了。

复杂类型接口如何提取变量, 如何进行断言?

提取变量值,我做过的 服务器返回结果中有很多商品的id,这些的商品的id位置不确定,所以不能使用位置 [索引值]方式来定位。
可以使用条件搜索。 比如jmespath 中可以 [?条件] 这样的语法方式来进行提取变量。
断言也是类似的,可以使用jmespath这样的语法来操作。
比如我们有个商品搜索接口,返回的数据长度为 10, 10条数据是确定,就通过jmespath中提供 length 函数来获取数据的长度。

cookie 和 session的区别。

应用场景:
Cookie 百度在网页上只要登录一次,会在浏览器上保存cookie信息,关闭浏览器之后再次打开浏览器 打开百度,登录的状态依然存在,使用的是cookie保留你的用户信息, cookie 是保存在浏览器上。删除cookie,再次打开百度页面,就会发现登录状态不存在了。
Session 银行app, 每次使用都需要登录,就算你登陆成功,如果app在后台一般超过30分钟没有使用,再次使用的时候会发现需要重新登录。 这种使用的是session的机制。
不同

  1. 存储位置不同
    1. cookie 存在浏览器本地。
    2. session 是存在服务器端。 有服务器维护。
  2. 安全性上区别
    1. cookie 存在浏览器本地,可以在浏览器上看到,相对来说,安全性比较差
    2. session 存在服务器端,用户看不到,安全性上相对比较高。
  3. 服务器端压力不同
    1. cookie在浏览器本地存储,对服务器的压力相对来说比较小。
    2. session 存在服务器端,有服务器来维护,相对来说,对服务器的压力比较大。
  4. 存储的内容格式不同
    1. cookie 存的内容主要文本字符串格式。
    2. session 可以存任意类型的数据。
  5. 存储的容量
    1. cookie 最大4kb
    2. session 没有限制

JMeter 中常用的提取变量方法有哪些?

常用的比如 json 提取器
正则表达式提取器

  • 主要使用 (.+?) 来设置变量。

以及 jmespath 提取器

  • 提取复杂类型的数据的时候,商品价格大于5000的商品id [?条件搜索]

使用beanshell 处理器也可以设置变量。 (跨线程组传参)https://www.yuque.com/imhelloworld/bypiud/dkkm6f