介绍接口测试前我们先来介绍一下HTTP协议,为什么先要介绍HTTP协议呢因为因为我们做接口测试其实就是用测试工具(postman,fiddler,jmeter等等)或代码来模拟用户使用软件的场景,在我们模拟的时候不像平时功能测试时我们有已经开发完成的网页界面,因为接口测试它是在开发或架构师写完接口文档后和开发工作同步进行的,那时候没有页面,所以我们必须先在底层逻辑上了解我们软件时怎样运行的,怎么完成我们的操作的这就需要了解网络传输协议HTTP协议。
一、HTTP协议简介
1、什么是HTTP协议
HTTP是英文直译过来超文本传输协议,它是数据在互联网上传输的一种协议,就像我们社会运行的某种法律一样,我们在日常生活和工作中要遵守法律法规,那数据在互联网上传输也要遵循一定的规则。其中的一项规则就是HTTP协议,在我们的生活中有很多种法律,例如,婚姻法,未成年人保护法等等。同样的网络上的数据传输也有很多的协议,例如TCP、IP、FTP等等。
2、HTTP 协议的特点
1.支持客户端/服务器模式、2.简单快速、3.灵活、4.无连接、5.无状态 。
无状态和无连接是相对应于TCP协议的连接的,(扩展:TCP想要建立连接要三次握手,想要断开连接,需要四次挥手。)
3、什么是HTTP请求和响应
前面我们提到HTTP请求是网络上数据传输时的法律,那么我们网络上的数据是从什么地方传到什么地方呢,其实网络上数据传输时有客户端和服务器端两端,我们自己平时用的电脑就是客户端,服务器就是存储网络数据的一端。我们上网时从客户端发送请求给服务器,服务器接收到我们的请求,然后发送响应给我们,响应里面就有我们要的数据。在这个过程中又遵循HTTP协议所以这就是HTTP请求和响应
HTTP请求和响应里面都有什么呢?我们要学习接口测试就必须要搞清楚这个问题
4、HTTP请求(也叫请求报文)
一般来说请求分为三个部分,分别是请求行、请求头、请求体。
请求行包含请求方法,URL和协议版本,其中请求方法有我们常见的get 、post、 put、 delete四种方法。get和delete请求方法是不需要请求体的post和put需要请求体。URL中文直译过来叫 统一资源定位符 就是网络上每个数据的地址,简单理解未我们人类社会每个人都有居住地址一样,通过这个地址就能在网络上定位到该数据。协议版本就是字面意思协议的版本例如HTTP1.1。
请求头里面都是一些我们发送请求的格式数据,请求头里的数据都是以键值对(姓名:张三 就是一个键值对)的方式存储的,我们目前阶段要掌握的就两个,一个是Content-Type,它是用来解释我们发的请求体里面的数据类型是什么类型的。另一个是User-Agent,意思是客户端发送请求所用的浏览器信息。
请求体里存放着我们请求的数据,例如我们要修改我们的昵称,我们就要把我们的新昵称写在请求体里发个服务器,服务器帮我们修改,有人就要说了我怎么从来没写过请求体,那是因为浏览器帮我们做了这一步,我们只需要在输入框输入就行,但我们要学习接口测试就要自己写入请求体了。请求体里的数据一般为json格式。
请求报文的例子:
URL例子:
协议不用解释,域名和协议之间用://隔开。域名也叫IP,是用来定位计算机的,就像计算机的身份证一样,每个计算机都有自己的ip地址,它有两种书写形式还有一种是 127.168.1.1这种。域名和端口号之间用:隔开。 端口号是网络通信中用于区分不同服务和进程的数字标识,有时我们看到的URL没有端口号,那是因为端口号被省略了。例如HTTP协议默认的端口号是80,HTTPS的默认端口号是443,MySql的默认端口号是3306等等。你可以把端口号和资源路径之间的/当作是资源路径,也可以当作它们之间的分隔符。资源路径就是存放该资源的地址,资源路径和查询参数中间用?隔开,查询参数可以有多个每个查询参数之间用&隔开,有的URL是没有查询参数的。
响应报文例子:
这个响应报文图片里面没有响应体,但我们通过响应头的Content-Type知道响应体是json格式的。
5、json格式
json格式就是键值对和python里的字典是一样的,只不过json里的字符串只能用双引号,不能用单引号。json和python里的字典一样有两种书写方式
第一种:[值1,值2,值3,值4.........]
第二种:{"键":"值","键":"值","键":"值"....}
两种书写方式可以相互嵌套,例如:[{"键":"值"},{"键":"值"},{"键":"值"},{"键":"值"}...],
{"键":[值1,值2,值3......]}等等
6、响应(也叫响应报文)
有请求当然就有响应,响应体也分为三个部分响应行,响应头,响应体。
响应行包含协议版本、状态码和状态描述三个内容。状态码有以下五种
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现 (403,404)
(403 请求的资源存在,拒绝被访问,404 请求的资源不存在)
5xx:服务器端错误--服务器未能实现合法的请求
响应头里面存储的是一些响应的格式信息,例如响应体的数据类型等等。
响应体里面就是我们所需要的数据,它可以是一个图片,一个HTML网页等等任意类型。
二、接口测试简介
1、什么是接口
接口就是系统和系统之间模块和模块之间进行数据传输的通道
2、什么是接口测试
那么什么是接口测试呢,接口测试就是通过工具(postman,fiddler,jmeter等等)或者代码,来测试接口传输的正确性和逻辑依赖关系的正确性。数据传输的正确性不难理解那么逻辑依赖关系如何理解呢?例如我们在接口测试时查看订单页面那我们是不是要先登录才能查看订单页面,当我们在未登录情况下发出查看订单页面HTTP请求的时候我们需要先跳转到登陆页面让用户登录,这就是逻辑依赖关系。
3、接口测试的特点和流程
特点:
1、测试可以提前介入,提早发现Bug,符合质量控制前移的理念
2、 可以发现一些页面操作发现不了的问题
3、接口测试低成本高效益(底层的一个Bug能够引发上层8个左右Bug,接口测试可以实现自动化)
4、 不同于传统的单元测试,接口测试是从用户的角度对系统进行全面的检测
流程:
1.结合需求文档,需求分析
2.结合开发提供的接口文档,进行接口分析
3.出具接口测试用例(送审)
4.执行接口测试用例(两种方法1.工具:Pistman、fiddler、jmeter2.代码:Python + UnitTest + requests)
5.缺陷(bug)的管理和跟踪
6.生成测试报告
7.接口自动化持续集成(可选)
4、接口文档
接口文档顾名思义就是写有接口信息的文档,它包含整个项目所要用到的所有接口信息,例如每个接口的请求方法,URL,和协议版本,还有一些请求头的数据和请求体数据,一般我们现在书写接口文档都用RESTful风格。
5、什么是RESTful风格
RESTful 风格是一种约定俗成的接口文档的编写风格,它不具有强制性,就是比较流行在当前阶段。下面时RESTful 风格的请求方法和其对应的响应状态码。但一般RESTful风格的状态码在编写接口文档时不够用的,所以一般会自己定义一些状态码。
查询某个用户 get 200(成功状态码)
查询所有用户 get 200(成功状态码)
增加用户 post 201(成功状态码)
修改用户 put 201(成功状态码)
删除用户 delete 204(成功状态码)
那么如何界定RESTful风格呢?
通过请求方法界定,RESTful风格一般有四种请求方法。
通过url界定,RESTful风格每个资源的URL唯一。
通过成功状态码界定,响应成功状态码有三种(200,201,204)。
接口测试的例子:
我们以postman工具为例,通过接口完成黑马开源项目的登陆操作。首先选择请求方法,填写URL,端口号默认80我们不用填写。由于我们使用post请求方法所以需要填写请求体,请求体中填写账号和密码以json格式。postman会自动识别我们的请求体并给我们填写请求头。我们只要看到响应体中出现操作成功就说明我们登陆成功了,那我就恭喜你已经完成了首次接口测试工作。