软件测试之接口测试基础知识
1、接口的含义
接口也叫API(Application Programming Interface,应用程序编程接口)
- 是一组定义、程序及协议的集合;
- 它提供访问一组例程的能力,无需访问源码或理解内部工作机制的细节。
2、接口的分类
第一种是代码内部的接口或称程序接口
- 是程序模块间的接口,代码A与代码B在组合的时候,必然需要定义一些名称以及参数、类型;
- 对于程序接口的测试,一般需要使用与开发程序接口相同的编程语言,通过对类、方法和函数的调用,验证其返回结果是否正确进行测试;
- 这种测试一般划分在白盒测试中,也算是集成测试阶段,既可以有开发人员自己完成,也可以由有良好的编程能力的测试人员来做。
第二种接口是协议接口
- 是系统与系统之间,通过网络数据的传递进行交互,这种类型的接口对底层代码做了封装,系统通过不同的协议提供接口对外提供调用;
- 此类测试一般不涉及底层程序,也看不到代码,属于黑盒层面,可以通过各种手段将网络数据发送到接口从而得到接口的响应信息,达到测试的目标;
- 这一类测试工作多数情况下由测试人员完成。通常所说的的接口测试主要是对协议接口的测试。
3、接口测试
3.1 接口测试的含义
- 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点;
- 测试的重点是要检查数据的交换,传递和控制管理过程以及系统间的相互逻辑依赖关系等。
3.2 接口测试的意义
- 更早的发现问题;
- 缩短产品研发周期;
- 发现更底层的问题;
- 前端随便测,接口测好了,后端不用变。
3.3 接口测试的原理
模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端再接收应答的一个过程。
4、接口的组成
4.1 接口文档的内容
- 接口说明;
- 调用url;
- 请求方法(get/post);
- 请求参数、参数类型、请求参数说明、请求头header;
- 返回参数说明、请求响应的代码、响应内容。
4.2 http请求方法与请求参数
-
参数是客户端向服务器发送的数据,有的可见,有的不可见;
-
GET请求:
1、发送指定参数的请求来取得服务器上的某一资源;
2、提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如 EditPosts.aspx?name=test1&id=123456;
3、get请求数据不会出现在body中。 -
POST请求
1、向指定资源提交数据,数据被包含在请求体中(提交的数据放在HTTP包的Body中);
2、不在URL中出现。 -
GET和POST的区别
1、GET使用URL或Cookie传参,而POST将数据放在BODY中;
2、GET的URL会有长度上的限制,而POST的数据则可以非常大;
3、GET请求能够被缓存,请求会保存在浏览器的浏览(历史)记录中,请求的数据会显示在地址栏中,不安全,请求的url能够保存为浏览器书签(收藏夹)。而POST请求不能被缓存,请求不会保存在浏览器浏览记录中;请求的数据不会显示的地址栏中,相对安全;请求的URL无法保存为浏览器书签所以POST比GET安全;
4、一般GET请求用来获取数据,POST请求用来发送数据;
5、GET请求数据只支持ASCII类型,POST请求数据类型没有限制,支持二进制数据。
4.3 header
标头 (header)是服务器以HTTP协议传HTML资料到浏览器前所送出的字串,一般存放cookie、token等信息。
- header和入参的关系
它们都是发送到服务器里的参数,但它们是有区别的,header里存放的参数一般存放的是一些校验信息,比如cookie,它是为了校验这个请求是否有权限请求服务器,如果有,它才能请求服务器,然后把请求地址连同入参一起发送到服务器,然后服务器会根据地址和入参来返回出参。也就是说,服务器是先接受header信息进行判断该请求是否有权限请求,判断有权限后,才会接受请求地址和入参的。 - Cookie
1、万维网站点使用 Cookie 来跟踪用户;
2、Cookie表示在 HTTP 服务器和客户之间传递的状态信息;
3、使用 Cookie 的网站服务器为用户产生一个唯一的识别码。利用此识别码,网站就能够跟踪该用户在该网站的活动。 - Session
1、Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间,以及如果需要的话,可能还有一定的操作空间;
2、Session是用于保持状态的基于 Web服务器的方法;
3、Session允许通过将对象存储在 Web服务器的内存中在整个用户会话过程中保持任何对象。
请求头信息
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
常用的请求报头如下:
- Accept:浏览器可接受的MIME类型;
- Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip;
- Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时会用到;
- Connection:表示是否需要持久连接。从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性;
- Host:初始URL中的主机和端口,它通常是从HTTPURL中提取出来的;
- User-Agent:请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。
响应头信息
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
常用的响应报头如下:
- Content-Type:表示后面的文档属于哪种MIME类型;
- Date:当前的GMT(国际时)时间;
- Server:包含了服务器用来处理请求的软件信息;
- X-Frame-Options:用来给浏览器指示允许一个页面可否在、或者中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,从而也避免了点击劫持(click jacking)的攻击。
4.4 http响应状态码
每发出一个http请求之后,都会有一个响应,http本身会有一个状态码,来标示这个请求是否成功。
常见的状态码有以下几种:
- 1**:表示服务器收到请求,需要请求者继续执行操作;
- 200:2开头的都表示这个请求发送成功。最常见的是200,代表这个请求是ok的,服务器也返回了;
- 300:3开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了;
- 400:400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面;
- 500:5开头的代表服务器有异常,500代表服务器内部异常,503代表由于超载或系统维护,服务器暂时无法处理客户端请求,504代表服务器端超时,没返回结果。
4.5 响应数据
当我们在请求一个页面的时候,会显示服务器返回的资源,其中包含了HTML、CSS和JavaScript,除此之外,服务器还可以返回图片、视频、字体和插件等类型的资源。这些资源全部使用HTTP协议传输。
如果把HTTP协议看作是高速公路的话,那么在高速公路上跑的各种拉满不同货物的车辆就是资源。不同的车辆装载的货物不一样,因此它们的目的地也不一样。
如有些车辆拉的是生猪,是要送到屠宰场的;有些车辆拉的是西瓜,是要送到水果批发市场的。
HTTP协议上传输的资源也是一样,类型不同,作用也不一样。数据就是其中的一种资源,数据是接口的本质。
- 可以选择不同的运输方式,走高速公路或走铁路,这就是数据传输协议的选择(如HTTP/SOAP);
- 西瓜的存放方式,是直接将西瓜堆积到车厢里,还是把每个西瓜放到盒子里再装箱,这就是数据格式的选择(如TEXT/XML/JSON/CSV)。
JSON格式
- JSON(JavaScript Object Notation,即JavaScript对象表示法)是一种轻量级的数据交换格式。它独立于语言和平台,JSON解析器和JSON库支持不同的编程语言;
- JSON具有自我描述性,很容易理解;
- JSON格式是当前主流的接口数据格式之一。从接口的调用方式和数据格式来看,JSON不是直接给普通用户来使用的,它主要为其他开发者提供调用。
JSON响应数据的格式
{
status:200,
message:"success",
data:{
start_time:"06-17 18:00:00",
eid:1,
status:true,
address:“公司”,
}
"employees":[
{"firstName":"Bill","lastName":"Gates"},
{"firstName":"George","lastName":"Bush"},
{"firstName":"Thomas","lastName":"Carter"}
]
}
- 数据在名称/值对中;
- 数据由逗号分隔;
- 花括号保存对象;
- 方括号保存数组。
5、怎么做接口测试
5.1 接口测试的流程
- 熟悉业务和需求;
- 分析接口文档;
- 编写接口测试用例;
- 提测后开始测试;
- 提交测试报告。
5.2 编写接口文档
编写接口文档是接口开发中非常重要的一个环节,因为开发的接口是给其他开发人员调用的,那么如何知道接口是怎么调用的呢?当然需要通过参考接口文档了。那么接口文档就必须要做到更新及时,内容准确。
案例
接口名称 | 添加… | 说明 |
---|---|---|
URL | http://127.0.0.1:8000/api/add_event/ | 测试add_event接口 |
调用方法 | POST | |
传入参数 | eid、name、limit、status(1/0) | 参数含义:事件编号、参数含义:事件名字、参数含义:限时、参数含义:开启状态 |
返回值 | ‘status’:200,‘message’:‘add event success’ | |
状态码 | 10021:parameter error、10022:event id already exists、 10023:event name already exists 、 200:add event success |
5.3 通用接口用例设计
- 通过性验证:首先肯定要保证这个接口功能是正确的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果;
- 参数组合;
- 接口安全:
1、绕过验证;
2、绕过身份验证;
3、参数是否加密;
4、密码安全规则。 - 异常验证:就是不按照接口文档上的要求输入参数,来验证接口对异常情况的校验。
5.4 根据业务逻辑来设计用例
就是根据系统的业务来设计用例,这个每个公司的业务不一样,就得具体的看自己公司的业务了,其实这也和功能测试设计用例是一样的。