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 无效网关
接口测试的流程
- 先拿到接口文档,如果没有接口文档,需要抓包
- 根据接口文档 整理接口的测试点,接口分为单接口,多接口的测试。
- 单接口 (数据驱动,csv参数化)— 需要整理 接口的正常场景和异常场景。将测试数据整理到csv文件中,在接口测试工具中上传csv文件,通过读取csv文件来进行接口测试。
- 多接口(上下游传参,接口关联)— 梳理接口之间的关联关系,根据业务确定上游接口和下游接口,上游接口提取变量 (Postman使用Tests 从服务器返回结果中提取变量),下游接口中引用变量。
- 接口做完之后,针对每个接口添加对应的断言,断言是根据具体的业务来设置断言,主要
- 状态码断言
- 响应文本断言
- json 值断言 使用最多。
- 执行的时候,批量执行。在 postman的运行界面中, 运行完成之后通过查看运行结果。
上下游传参怎么做 (串联接口怎么做)
可以使用JMeter 工具来做,也可以使用Postman工具来做。
使用Postman:
- 先根据业务场景,确定上游接口,下游接口。
- 在上游接口中 在【Tests】面板中编写代码,提取要传参的值,设置为变量。
- 使用postman内置的语法 先获取服务器返回结果。
- 使用postman代码设置变量。
- 下游接口中通过使用
{{变量}}
的方式来引用变量。
使用JMeter:
- 先根据业务场景,确定上游接口,下游接口。
- 在上游接口中使用【正则表达式提取器/json提取器/jmespath提取器】从服务器返回结果中提取出来对应的值,设置为变量。
- 在下游接口中使用
${变量}
的方式来引用变量。
单接口怎么测试?
针对单个接口 正常场景,异常场景都需要进行测试。
- 根据需求,设计不同的测试点
- 主要针对请求的数据进行设计,比如边界值,等价类
- 将数据存放在csv文件中
- 在接口中的请求数据中改为变量。变量要跟csv文件中保持一致。
- 执行就可以了。
- Postman 中运行 在Postman的Runner(执行器中),添加csv文件执行
- JMeter中 通过添加CSV文件配置 来进行运行。
怎么添加断言?(如何保证测试接口中返回数据的正确性)
断言方式主要有
- 状态码断言
- json 值断言
在做接口测试的时候,要针对每个接口设计断言。断言的内容主要根据服务器返回的结果来设置断言。主要断言服务器返回的内容。
Postman 中断言:
- 在【Tests】 测试面板中通过使用Postman内置的语法进行断言。
JMeter中:
- 响应文本断言
- 状态码断言
- 响应内容断言
- Json 断言
- JmesPath 断言
如何处理接口中的Cookie, 带有Cookie的接口怎么做?
在做这些接口的时候,Cookie一般保留在浏览器中。
- 使用 浏览器抓包或使用 Charles 抓包,可以抓到Cookie
- 在发送请求的时候,将Cookie放在信息头管理器就可以了。
复杂类型接口如何提取变量, 如何进行断言?
提取变量值,我做过的 服务器返回结果中有很多商品的id,这些的商品的id位置不确定,所以不能使用位置 [索引值]方式来定位。
可以使用条件搜索。 比如jmespath 中可以 [?条件]
这样的语法方式来进行提取变量。
断言也是类似的,可以使用jmespath这样的语法来操作。
比如我们有个商品搜索接口,返回的数据长度为 10, 10条数据是确定,就通过jmespath中提供 length 函数来获取数据的长度。
cookie 和 session的区别。
应用场景:
Cookie 百度在网页上只要登录一次,会在浏览器上保存cookie信息,关闭浏览器之后再次打开浏览器 打开百度,登录的状态依然存在,使用的是cookie保留你的用户信息, cookie 是保存在浏览器上。删除cookie,再次打开百度页面,就会发现登录状态不存在了。
Session 银行app, 每次使用都需要登录,就算你登陆成功,如果app在后台一般超过30分钟没有使用,再次使用的时候会发现需要重新登录。 这种使用的是session的机制。
不同
- 存储位置不同
- cookie 存在浏览器本地。
- session 是存在服务器端。 有服务器维护。
- 安全性上区别
- cookie 存在浏览器本地,可以在浏览器上看到,相对来说,安全性比较差
- session 存在服务器端,用户看不到,安全性上相对比较高。
- 服务器端压力不同
- cookie在浏览器本地存储,对服务器的压力相对来说比较小。
- session 存在服务器端,有服务器来维护,相对来说,对服务器的压力比较大。
- 存储的内容格式不同
- cookie 存的内容主要文本字符串格式。
- session 可以存任意类型的数据。
- 存储的容量
- cookie 最大4kb
- session 没有限制
JMeter 中常用的提取变量方法有哪些?
常用的比如 json 提取器
正则表达式提取器
- 主要使用 (.+?) 来设置变量。
以及 jmespath 提取器
- 提取复杂类型的数据的时候,商品价格大于5000的商品id [?条件搜索]
使用beanshell 处理器也可以设置变量。 (跨线程组传参)https://www.yuque.com/imhelloworld/bypiud/dkkm6f