Postman学习笔记
Postman学习笔记
学习来源:黑马
学习时间:2022年3月6日
测试网址(黑马提供):
1 接口
1.1 接口的概念
接口就是数据交互的通道。在系统或组件之间,完成数据的传递。
1.2 接口的类型
按划分形式,大致分为3类 :
按协议分。协议不同,接口类型不同。 HTTP、TCP、UDP、IP、FTP、USB…
按语言划分。Java、Python、C++、Php ….
按范围划分:
- 系统之间:内部系统之间,内部系统和外部系统之间
- 程序内部:方法(函数)和方法(函数)之间。类和类之间。模块和模块之间。
2 接口测试
接口测试:测试系统或组件之间交互的数据的正确性,以及逻辑依赖关系的正确性。
2.1 原理
数据(预期结果)从哪里来
- 根据用户需求
怎样校验:
- 借助工具、代码模拟客户端。组织数据。
- 用工具或代码模拟客户端,向服务器发送请求,校验服务器回发的响应数据是否与预期结果一致。
2.2 特点
- 提早介入,符合测试的质量控制前移原则
- 接口测试可以发现 页面操作发现不了的问题。如:支付密码,输入 非数字、特殊字符。
- 低成本高收益(接口的一个bug ,可能对应上层界面 N 个bug)
- 接口测试,不同于传统的单元测试,站在用户的角度展开测试。
2.3 实现方式
工具实现:
- Postman、fiddler(抓包)、jmeter(压力测试)
代码实现:
- Python + UnitTest + requests
什么是自动化接口测试?
利用工具、代码代替人工,自动判断响应结果和预期结果是否一致。依赖断言。
3 HTTP协议
3.1 URL格式
URL:(Uniform Resource Locator
)统一资源定位符,是互联网上标准资源的地址。HTTP使用URL来建立连接和传输数据。
格式
协议:
http
和https
域名:本质是IP地址(定位网络环境中的一台主机)
端口号:在网络主机上,定位一个应用。端口号可以省略。没有指定端口号,默认跟随协议
http
协议默认端口:80https
协议默认端口:443
资源路径:对应网页的源代码或网络中的一个数据资源。
- 资源路径可以为空(没有),相当于资源路径为
/
。例如https://baidu.com/
和https://baidu.com
- 如有查询参数,则资源路径为
?
之前域名(端口) 之后的所有内容 - 如果没有查询参数,则资源路径从域名(端口) 之后,直到结束。
- 资源路径可以为空(没有),相当于资源路径为
查询参数:传参给网页源代码。
- 以
?
与 资源路径 隔分 - 查询参数可以有多个,之间用
&
隔分。 - 参数以
k=v
的键值对形式出现
- 以
3.2 HTTP请求
由客户端发送给服务器 –>
http request
规定了发送给服务器的数据的语法格式
3.2.1 整体格式
- 请求行,请求头,请求空行,请求体
1 | POST http://tpshop-test.itheima.net/index.php |
3.2.2 请求行
- 作用: 指定请求方法、请求资源
- 语法格式:请求方法(空格)URL(空格)协议版本(
\r\n
),例如:
1 | POST http://tpshop-test.itheima.net/index.php |
请求方法:
- GET:查询。没有请求体
- POST:新增。登录、注册主要使用。有请求体
- PUT:修改。有请求体。
- DELETE: 删除。没有请求体
URL:数据资源的定位符。
协议版本:
http1.1
http1.2
http2.0
- 主要使用
http1.1
3.2.3 请求头
- 作用:向服务器描述客户端(浏览器)的基本信息。
- 语法:键值对
k:v
,例如
1 | Host: tpshop-test.itheima.net |
常用的键值对
Content-Type
:向服务器描述请求体的数据类型。application/json
:json类型数据
application/x-www-form-urlencoded
:表单类型数据
User-Agent
:向服务器描述浏览器的类型。
3.2.4 请求体
- GET、DELETE 请求方法,没有请求体。
- POST、PUT 请求方法,有请求体。
- 请求体的数据类型,受请求头中
Content-Type
的值影响
3.3 HTTP响应
- 由服务器回发送给客户端 –>
http response
- 规定了服务器回发给客户端的数据的语法格式
3.3.1 整体格式
- 响应行(状态行)、响应头、空行、响应体
1 | 200 OK |
3.3.2 响应行
- 语法格式:协议版本(空格)状态码(空格)状态码描述
\r\n
,例如:
1 | 200 OK |
协议版本:详见请求行内容
状态码:针对 http请求,响应的状态
1xx
: 信息类,请求需要进一步访问。2xx
: 成功。 200 ok3xx
: 重定向。数据资源需要重定向访问。4xx
: 客户端错误。 404 Not Found 文件/资源 不存在。403 Forbidden 文件/资源拒绝被访问(没有权限)5xx
: 服务端错误。 502 Bad Gateway
状态描述:对状态码的说明。
3.3.3 响应头
- 作用:向客户端描述 服务器的基本信息。
- 语法:
k:v
键值对 - Content-Type:向客户端描述响应体的数据类型
3.3.4 响应体
- http响应报文,大多数是有响应体
- 响应体的数据类型,受响应头中
Content-Type
的值影响。- json类型
- 表单类型
- 图片类型:
image/png
…
3.4 传统风格接口
特点
- 使用 GET、POST 实现所有数据的增删改查操作。
- 针对用户的某一个操作,URL 不唯一。
- 状态码统一使用 200
例如对用户进行操作的相关接口,包括增删改查:
操作 | 请求方式 | URL | 成功状态码 |
---|---|---|---|
查询某个用户 | GET/POST | http://127.0.0.1:8080/myweb/user/getUser?id=1 | 200 |
查询所有用户 | GET/POST | http://127.0.0.1:8080/myweb/user/getUserList | 200 |
添加用户 | POST | http://127.0.0.1:8080/myweb/user/addUser | 200 |
修改用户 | POST | http://127.0.0.1:8080/myweb/user/updateUser | 200 |
删除用户 | GET/POST | http://127.0.0.1:8080/myweb/user/deleteUser?id=1 | 200 |
优点
- 对开发的技术要求低,只需要 get、post 方法即可。
- 代码实现灵活。
3.5 RESTful风格接口
定义
REST是一种软件架构风格、设计风格,而不是标准,它只是提供了一组设计原则和约束条件。
REST:Representational State Transfer
,表现层状态转化。
特点
- 使用
GET/POST/PUT/DELETE
分别表示查、增、改、删 - 使用一个 URL对应一个唯一的资源。
- 状态码根据实际操作请求加以区分。
操作 | 请求方式 | URL | 成功状态码 |
---|---|---|---|
查询某个用户 | GET | http://127.0.0.1:8080/myweb/users/1 | 200 |
查询所有用户 | GET | http://127.0.0.1:8080/myweb/users | 200 |
添加用户 | POST | http://127.0.0.1:8080/myweb/users | 201 |
修改用户 | PUT | http://127.0.0.1:8080/myweb/users/1 | 201 |
删除用户 | DELETE | http://127.0.0.1:8080/myweb/users/1 | 204 |
界定RESTful风格接口
- 请求方法使用 get、post、delete、put 对应 查、增、删、改
- 数据资源的定位符(URL)是否唯一。
- 在 URL中,不使用动词,替换使用名词,并结合请求方法,界定具体操作。
4 接口测试流程
- 结合需求文档,需求分析
- 结合开发提供的接口文件,进行接口分析
- 出具接口测试用例 (送审)
- 执行接口测试用例
- 缺陷(bug)的管理和跟踪
- 生成测试报告
- 接口自动化持续集成(可选)
5 接口文档
概念
接口文档也叫 API 文档(Application Programming Interface
,应用程序接口),是由开发人员编写,描述接口相关信息的文档。
5.1 作用
- 方便前端开发人员和后端开发人员在开发时进行对接
- 在人员更迭时,方便新入职的员工快速接手项目
- 方便测试人员编写接口测试用例
5.2 展现形式
- 在线文档 (html)
- 离线文档
- word
- xmind
- Excel
5.3 结构
基本信息:
- 接口描述
- URL:(协议+域名) + 资源路径
- 请求方法
请求参数:
- 请求头
- 请求体(GET、DELETE 没有)
返回结果:
- 状态码、状态描述
- 响应体
5.4 接口文档分析
5.4.1 登录接口
请求
请求行:
- 请求方法:POST
- URL:
http://ihrm-test.itheima/api/sys/login
- 协议版本:默认http/1.1
请求头:
- Content-Type:application/json
请求体:
1
2
3
4{
"mobile": "12345678909",
"password": "123456"
}
响应
响应行:
- 状态码,状态描述:200 ok
响应头:
- 无
响应体:
- 共有三种不同的情况
1
2
3
4
5
6{
"success": true,
"code": 10000,
"message": "操作成功",
"data": "XXX"
}1
2
3
4
5
6{
"success": false,
"code": 20001,
"message": "用户名或密码错误",
"data": null
}1
2
3
4
5
6{
"success": true,
"code": 99999,
"message": "系统繁忙,请稍后重试",
"data": null
}
5.4.2 员工修改接口
请求
请求行:
- 请求方法:POST
- URL:
http://ihrm-test.itheima/api/sys/user/:target
- 协议版本:默认http/1.1
请求头:
- Content-Type:application/json
- Authorization :Bearer f5050a1b-7919-444c-9ec4-3c1a7286536d
请求体:
1
2
3
4
5{
"username": "张三",
"password": "445566",
"departmentId": "110"
}
响应
响应行:
- 状态码、状态描述:200 ok
响应头:
- 无
响应体:
- 略
6 Postman
6.1 简介和安装
postman是一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用,开发人员也会经常使用。
特点
- 简单易用的图形用户界面
- 可以保存接口请求的历史记录
- 使用测试集Collections可以更有效的管理组织接口
- 可以在团队之间同步接口数据
安装newman插件
该插件用于生成测试报告
1 | npm i newman -g |
1 | npm i newman-reporter-html -g |
6.2 基本使用
6.2.1 案例一
需求:使用 postman 发送 http请求,访问 tpshop 商城的 “搜索” 接口,搜索内容为“手机”
- 请求方法:GET
- URL:
http://tpshop-test.itheima.net/Home/Goods/search.html?q=%E6%89%8B%E6%9C%BA
,参数是“手机”的URL编码,也可以直接写“手机”,postman会自动编码
发送结果
使用 Postman 创建一个标签页(tab),组织http请求,发送搜索接口请求。
6.2.2 案例二
需求:使用 Postman 向 topshop 商城登录接口发送一个密码错误的登录请求
- 请求方法:POST
- URL:
http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login&t=0.5285164048485933
- 请求头:
Content-Type: application/x-www-form-urlencoded
表单数据的形式发送 - 请求体:
username=13800138006 password=6666 verify_code=8888
发送结果
使用Postman组织上述数据,发送 http 请求,测试登录接口。
- 查询参数和响应结果
- 请求头
- 请求体:表单数据格式,要与请求头的Content-Type的格式保持一致
6.2.3 案例三
从接口文档,获取登录接口的 http请求,使用 Postman 发送登录请求访问iHRM系统。
- 请求方式:POST
- 请求URL:
http://ihrm-test.itheima.net/api/sys/login
- 请求头:
application/json
- 请求体:
1 | { |
发送结果
- 请求头和响应结果
- 请求体
6.3 高级用法
6.3.1 管理测试用例Collections
Collections相当于一个文件夹,里面可以存放多个测试用例和子文件夹。子文件夹又可存放多个测试用例和子文件夹。
① 创建
- 总览
- 创建测试用例或子文件夹
② 导出和导入
导出
导入
6.3.2 断言机制
利用 Postman 自带的断言机制,帮助我们自动判断预期结果和实际结果是否一致。
- 使用的是 JavaScript 脚本语言,写在
Tests
的标签页中。
- Tests中的脚本在发送请求之后执行,会把断言的结果(
PASS/FAIL
)在TestResults
标签中显示。 - 断言的代码可以根据postman提供的模块快速生成
① 断言响应状态码
以案例三为例:Status code: Code is 200
1 | // 断言响应状态码为200 |
代码解释
pm
:Postman的一个实例test()
:- 参数1:
"Status code is 200"
,断言完成后,给出的提示信息,可自定义,根据断言的实际作用书写,例如断言响应状态码为404
- 参数2:回调函数
- 参数1:
pm.response.to.have.status(200);
:Postman的响应结果中,有状态码200
结果1——断言成功
结果2——断言失败
② 断言响应体体是否包含某个字符串
以案例三为例:Response body: Contains string,断言响应体中包含某个字符串
1 | pm.test("Body matches string", function () { |
结果1——断言成功
结果2——断言失败
③ 断言响应体是否等于某个字符串(对象)
Response body: Is equal to a string