一、接口测试基础
1、什么是接口?
1)定义
前后端沟通的桥梁,数据传输的通道。
2)分类
内部接口(上层服务、下层服务、同级接口),外部接口(第三方接口,例如支付接口)。
2、什么是接口测试?
1)定义
通过工具/代码,填写数据,确定响应数据的正确性。
2)原因
- 成本更低:越底层发现bug,修复的成本越低;
- 提高效率:更早进入测试环节,不需要等前后端都开发完。
- 节约成本:接口不会频繁变动。
- 安全性强:跳过前端的校验(正则),直接访问接口。前端校验不需要发送接口请求,导致一些重要信息是否加密传输无法校验。
二、接口测试原理
1、接口测试原理是什么?
1)定义
接口测试主要从以下几点来测试:
- 请求与响应(HTTP请求):一般来说,接口请求和响应通常使用JSON或XML格式(接口测试基础重点-学习已完成总结本文);
- 参数传递:包括参数的类型、取值范围、必填性以及参数之间的依赖关系等;
- 功能测试:最重要的一部分,根据接口设计文档来验证,接口在各种情况下是否正确执行,以实现预期结果;
- 性能测试:包括接口的响应时间、吞吐量、并发性等方面的测试(高级接口测试-暂未学习到);
- 异常处理:异常情况下接口是否有给出适当的提示,例如:参数错误时返回错误码及错误信息;
- 依赖关系:各接口之间是否存在依赖关系,注册登录加入购物车订单提交等之间的依赖关系;
- 安全验证:数据传数的加密、权限控制、防止SQL注入、防止跨站脚本攻击等。
2)重点
URL 统一资源定位符(网页、图片、视频等资源)
组成:
(1)协议:HTTP、HTTPS。(常用协议)
(2)域名/主机IP(目标服务器)。例如:www.名字.com(域名)=14.XXX.XXX.XXX(IP),域名解析后就是IP,为什么域名化?因为方便好记,IP地址比较难记。http://www.名字.com,http://14.XXX.XXX.XXX。DNS:域名解析系统,自己本机:localhost、127.0.0.1。
(3)端口(不一定有):区分IP对应的是哪个服务(域名化时不显示,IP时或本机时有端口)。例如:公司地址:广东省XXX市XXX区XXX路XXX号(IP地址),门牌号:0000(端口)。
(4)路径:来到某个端口服务是为了做什么?例如:/reg(注册),/login(登录)。http://域名/reg。
(5)参数(不一定有):路径后面跟一个?,然后再接key=value,如果有多个参数用&进行连接。参数一般是存在get请求方式当中。
HTML 超文本标记语言(特点:成对出现<>内容</>,前端使用。)
HTTP 超文本传输协议(常用协议)
3)HTTP请求
四要素:请求URL、请求方法、请求数据(参数)、响应数据。
(1)请求URL:参考上面URL的组成。
(2)请求方法:HTTP1.0定义了三种GET、POST、HEAD。1.2版本新增了OPTIONS、PUT、DELETE、TRACE和CONNECT。
(3)请求数据:请求行、请求头、请求体。
A、请求行:请求方法、请求地址(URL)、协议版本。
B、请求头:很多字段,系统固定的,告诉服务器需求什么资源,描述对应的请求。注意:cookie(鉴权)、content-Type(传输数据的格式,和请求体数据格式一致)。
C、请求体:请求参数。get请求方式参数在URL中,post请求方式参数在body当中。
(4)响应数据:响应行、响应头、响应正文
A、响应行:协议版本、状态码(HTTP Status Code)、状态信息。
响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)。
B、响应头:告诉客户端返回的数据,比如大小、时间、返回数据格式等。
C、响应正文:具体响应数据得到后,对应的前端会进行渲染,得到用户能够看明白的数据格式及样式等。
2、怎么做接口测试?
1)接口工具
常用的有Postman、JMeter、SoapUI。工具帮助测试人员方便地发送请求、验证响应、生成测试报告等(初级接口测试-正在学习待总结)。
2)自动化测试
通过编写脚本(Python)和使用自动化测试框架(Pytest+Allure),提高测试效率和重复利用性(高级接口测试-暂未学习到)。
3、GET和POST的区别
1)get请求一般参数在请求的url当中,以 ? 隔开,?后面是参数,多个参数用&连接;post请求把数据放在http请求的Body中,且请求头content-type要与Body的数据类型一一对应。
2)get提交数据大小有限制(url长度有限制);post提交数据大小没有限制。
3)get需要使用Requests.QueryString来取得变量值;post需要使用Requests.Form来取得变量值。
4)get只能进行url编码,只接受ASCII字符;post支持多种编码,字符没有限制。
5)get提交数据会带来安全问题,一般用于查询,例如搜索商品;post相对比较安全,一般用于提交数据,例如注册、登录等。