一、接口
接口概念:指的是系统或组件之间的交互点,通过这些交互点可以实现数据的交互(数据交互的通道)
接口分类:硬件接口与软件接口,作为测试工程师,更多关注软件层面的接口
接口是最小的质量保证网
软件测试常常会问到这样的问题:已经有了功能测试,为什么还要进行接口测试?
比如测试用户注册功能,规定用户名为6~18个字符,包含字母(区分大小写)、数字、下划线。首先功能测试时肯定会对用户名规则进行测试时,比如输入20个字符、输入特殊字符等,但这些可能只是在前端做了校验,后端可能没做校验,如果有人通过抓包绕过前端校验直接发送到后端怎么办呢?试想一下,如果用户名和密码未在后端做校验,而有人又绕过前端校验的话,那用户名和密码不就可以随便输了吗?如果是登录可能会通过SQL注入等手段来随意登录,甚至可以获取管理员权限,那这样不是很恐怖?
所以,接口测试的必要性就体现出来了:
①、可以发现很多在页面上操作发现不了的bug
②、检查系统的异常处理能力
③、检查系统的安全性、稳定性
④、前端随便变,接口测好了,后端不用变
二、接口测试
接口测试:是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系。
原理:
复习Django请求生命周期:
http请求首先到达wsgi服务器,解析封装为request对象, 交给web框架处理
在框架中,中间件对请求进行进一步处理(例如:csrf、session、路由匹配)
然后进行路由匹配, 执行不同的视图函数,可能涉及到数据库操作,模版渲染等
最后将结果传递到中间件, 封装为response响应对象
最后wsgi服务器将响应对象转换为http报文,返回给浏览器
模拟客户端向服务器发送请求,服务器接收后进行响应的业务处理,并向客户端返回响应数据,检查响应数据是否符合预期。
特点:
实现方式:
1、使用接口测试工具来实现(比如:JMeter、Postman)
接口测试的本质就是通过向接口发送请求,查看响应是否正确,现阶段主要以postman工具来实现接口测试,JMeter会在后续的性能测试中重点讲解。
2、通过编写代码来实现(比如:python+requests)
接口测试的另一种方式就是通过代码实现,由于本质就是向接口发送请求,同样可以使用代码实现,并且代码相比工具实现起来更加灵活,但要求测试人员具有一定的coding能力。
自动化:
测试分类:
按照是否自动化进行测试分类,可以分为:手工测试、自动化测试
接口自动化测试:针对接口进行测试,用工具或代码代替人进行测试的一种活动
三、网络协议
常见的网络协议:http、https
TCP(传输控制协议)、UDP(用户数据报协议)
FTP(文件传输协议)、SFTP
SSH(远程登录协议)
http协议
http协议,(HyperText Transfer Protocol)超文本传输协议,是一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的一种网络协议。
特点:
1、支持客户端/服务器模式;
2、简单快捷:快速传输,http协议比HTTPS协议更加高效(https协议比HTTP协议更加安全);
3、灵活;
4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接;
5、无状态:协议对于事务处理没有记忆能力,对同一个url请求没有上下文关系,每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况。
URL:
URL(Uniform Resource Locator)统一资源定位符,是互联网上标准资源的地址。HTTP使用URL来建立连接和传输数据。
URL格式:
四、请求与响应
http请求由三部分组成:请求行、请求头、请求体
请求需要掌握:
http响应由三部分组成:状态行、响应头、响应体
响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理响应数据
响应体:就是响应的消息体,数据可以是普通文本、XML、JSON、 HTML源码
五、RESTful接口规范
概念:RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
REST:即(Representational State Transfer)的缩写,词组翻译为“表现层状态转化”,如果一个架构符合REST原则,就称它为RESTful架构。
RESTful接口风格:
RESTful接口特点:
六、接口测试流程



