天天看点

B06_接口测试前置知识补充:HTTP响应状态码

B06_接口测试前置知识补充:HTTP响应状态码

在使用 HttpRunner 进行接口测试的时候,最常用到的一类断言方式就是判断接口返回的响应状态码,所以这里对各类型的 HTTP 响应状态码进行简要介绍。

B06_接口测试前置知识补充:HTTP响应状态码

HTTP 状态码(HTTP Status Code):是用以表示服务器对请求进行响应后,表示结果状态的3位数字代码。被置于响应头的第一行(也叫响应行)中。以 Firefox 浏览器自带网络功能抓包为例,在“状态码”一项中可以清晰看到。状态码后面紧跟的是“消息短语”,可以看成对状态码的最精简解释说明。

如图,状态码:200, 消息短语:OK,代表此请求的响应是成功完成的。

B06_接口测试前置知识补充:HTTP响应状态码

HTTP 的响应状态码主要分为五类,分别为从1到5开头的三位数字:

  • 1xx: 代表消息
  • 2xx: 代表成功
  • 3xx: 代表重定向
  • 4xx: 代表客户端错误
  • 5xx: 代表服务器端错误

在进行接口测试的过程中,我们涉及比较多的有以下几个:

1. 200 OK

  • 请求成功,服务器已经正常响应。
  • 注意:返回 200 不一定代表得到的就是我们预期的结果页面,如登录成功打开系统桌面,此时返回200状态码,但是不小心输入了错误的用户名和密码,登录失败仍然回到登录页面,但此时服务器返回响应的状态码还是 200,说明这个过程中服务器已经做完它认为正确的事情,而不是代表业务的正确性。所以在测试的时候,仅仅依靠200这个状态码进行断言是不充分的。
  • HttpRuner 断言写法: - eq: [status_code, 200]

2. 301/302/307 永久移动/临时移动/临时重定向

  • 被请求的资源已经不在你请求的URL上了,需要去另外一个URL中获取。
  • 注意:HttpRunner 的内核实际是 requests 模块,而 requests 模块在发送请求的时候,会默认自动完成重定向的操作,此时就无法从重定向前的页面提取数据了。
  • 解决方法,在 request 关键字下增加: allow_redirects: False
B06_接口测试前置知识补充:HTTP响应状态码

3. 304 未改变

如果浏览器端的缓存文件已经过期,则浏览器自己无法自己决定该文件是否还可以继续使用,此时需要向服务器发送请求来询问。服务器判断此段时间以来,该文件是否被改变过,如果没有改变过,则说明浏览器端的缓存文件依然可以使用,就向浏览器发送 304 消息(只有响应头没有响应体),浏览器收到后直接读取缓存文件内容呈现到页面。当然,如果服务器判断该文件被修改过,会重新向浏览器发送 200 消息(重新传送最新文件)。

4. 401 未经许可,认证失败

请求失败,请求资源的时候没有通过认证,鉴权失败了。

注意:碰到401基本上属于鉴权的问题,可以在请求头中附加 Authorization 认证信息或者是从前一个页面的响应中提取 cookie/token 等相关内容,再附加到新的请求中去。

5. 404 未找到

请求失败,请求的资源在服务器上没有找到。

注意:一般发生这种错误,不意味着服务器端代码的错误,往往是由于自己编写的 URL 或者文件名称错误,需要自行检查。

6. 500 服务器内部错误

服务器无法完成对请求的处理。一般来说,服务器端的源代码出现错误时会出现这个问题。