9.1 接口测试认识
9.1.1 为什么 要进行接口测试
软件常见的主要分为客户端软件、网页端软件、移动端软件、小程序软件。
想要了解为什么要进行接口测试,来看看架构的演变过程。
- 单体架构主要分为用户层、服务层、存储层,而其中的存储层只负责数据存储,其中服务层是对外提供服务,用户通过接口来调用服务层所提供的服务。
- 当用户量变大时,就会导致服务层崩溃,所以出现了主从架构。用户层也出现了多种的用户平台、Web、安卓、IOS等,所以服务器变成两个,一个主子、一个从属服务器,当用户访问服务器把主服务器访问崩溃了,从属服务器就会顶上,此时从属服务器就会变成主服务器,原来的主服务器就会变成从属服务器,就这样来回倒腾,而服务器有一个主从,因此,存储层也多了一个从属数据库。
- 当用户量变得更多了,此时新的一个架构就出来了,微服务架构,此时的用户层也变得更加的兼容,而服务器也会变得更多,原本所有功能都在一个服务器上,但是现在把所有的相关的服务进行分类,然后部署到不同的服务器上,互不关联,例如这个服务器崩了,并不影响其他的服务,而存储层也会变成对应的数据库。
- 但是这样还是会出现相关的问题,例如当用户量逐渐增加,用户服务基本上是每个用户优先调用的服务,此时又会出现服务器崩溃的情况,因此出现了微服务负载均衡架构。此时网关的作用就体现出来了,当部分服务器压力比较高时,通过API负载均衡进行请求分发,发送到同一个服务的不同服务器上,因此存储层也会有相对应的存储数据库,而存储层也会分为存储热(冷)备,热备就是存储器一直活跃着,冷备不活跃,还有读写分离,也能减轻存储器的压力。
随着用户的增多,服务层就会变得越来越复杂,同时导致接口也会变得越来越多,因为每一个服务也不是单独的,用户服务也会调用账户服务等。因此接口的增多就要保障接口与接口之间的稳定性,所以要进行接口测试。
9.1.2 什么是接口
接口分为硬件接口和软件接口,硬件接口就是电脑上的USB接口这些。
- 接口定义:通过某种约定,对其他设备进行接入,以实现设备与设备之间的交互。
- 接口服务调用:提供一个接口,只要符合接口对外暴露的约定,就可以调用接口服务。
- 常见的软件接口举个例子例如WiFi。
- 在软件中,一个完整的功能实现,就是用过接口与接口之间的调用进行的,例如下图,不同的用户端可以调用不同的服务,而服务与服务之间也可以进行调用。
- 系统中软件接口的常见约定(就是网络协议):网络协议http协议 https协议 TCP协议 UDP协议等等。
9.1.3 接口测试与功能测试的区别
- 功能测试方法:
- 围绕页面上的功能点进行测试用例设计与执行。
- 从页面的反馈层面验证,侧重验证功能的逻辑实现的准确性。
- 接口测试方法:
- 根据接口协议,结合接口参数进行测试用例设计与执行。
- 从接口返回的数据验证,侧重验证返回数据的准确性。
- HTTP协议的接口请求方法:
- get请求
- 通过url(地址链接)来向接口传递的数据请求方式。
- 比较适合传输数据量小,并且保密性低的数据。
- post请求
- 通过请求体的方式向接口传递数据的请求方式。
- 比较适合传递数据量偏大或者数据保密性高的数据。
- head请求
- put请求
- delete请求
- connect请求
- options请求
- trace请求等等
- get请求
从测试流程上看介入时机不同,接口测试要比功能测试时机要更早一些。
9.2 Python接口开发
9.2.1 Get接口开发
首先我们来开发一个Get接口,例如:
from flask import Flask,request # 导入Flask和request
# 固定写法,主要是获取一个flask的对象,用这个对象来启动flask的服务
app = Flask(__name__)
# 中间写一些接口逻辑
@app.route("/")# 后面这个是它的访问路径
def hello_world():
return "hello,world"
# 这里就是启动flask服务
if __name__ == "__main__":
app.run()
当我们运行后,如图所示:
通过网址我们会发现,运行打印的内容会出现在网页上。
在HTTP文章中提到,当HTTP使用GET请求方法请求到URL,那么这种情况怎么理解呢?
HTTP请求URL是指在客户端发送HTTP请求时,用于标识要访问的资源的统一资源定位符(URL)。URL由几个部分组成,包括协议、主机名、端口号、路径和查询参数等。
例如,一个典型的HTTP请求URL可能如下所示:
https://www.baidu.com:8080/path/to/resource?param1=value1¶m2=value2…
在这个例子中,协议是HTTPS,主机名是www.baidu.com;端口号是8080;路径是/path/to/resource;查询参数有两个:param1和param2;后面还有其他的,这后面的这部分称为锚点,相当于书签。
通过HTTP请求URL,客户端可以向服务器发送请求并获取相应的资源。服务器根据URL中的信息来确定要返回的资源,并使用HTTP协议进行通信。
那个网址是可以随意注册的,那么后边的数据是怎么得来的呢?
我们举个例子当我们搜索flask后,点击回车,百度上的导航栏就会出现新的地址,https://www.baidu.com(这一段代表域名)/baidu(返回的username或者其他的)?tn=34046034_10_dg&ie=utf-8&wd=flask(后边这一截就是参数了):
来看下一段代码:
from flask import Flask,request # 导入Flask和request
# 固定写法,主要是获取一个flask的对象,用这个对象来启动flask的服务
app = Flask(__name__)
# 中间写一些接口逻辑
@app.route