Postman学习笔记

学习来源:黑马

学习时间:2022年3月6日

测试网址(黑马提供):

1 接口

1.1 接口的概念

接口就是数据交互的通道。在系统或组件之间,完成数据的传递。

image-20220306160550534

1.2 接口的类型

按划分形式,大致分为3类 :

  • 按协议分。协议不同,接口类型不同。 HTTP、TCP、UDP、IP、FTP、USB…

  • 按语言划分。Java、Python、C++、Php ….

  • 按范围划分:

    • 系统之间:内部系统之间,内部系统和外部系统之间

    image-20220306160742904

    • 程序内部:方法(函数)和方法(函数)之间。类和类之间。模块和模块之间。

    image-20220306160755839

2 接口测试

接口测试:测试系统或组件之间交互的数据的正确性,以及逻辑依赖关系的正确性。

2.1 原理

  • 数据(预期结果)从哪里来

    • 根据用户需求
  • 怎样校验:

    • 借助工具、代码模拟客户端。组织数据。
    • 用工具或代码模拟客户端,向服务器发送请求,校验服务器回发的响应数据是否与预期结果一致。

2.2 特点

  1. 提早介入,符合测试的质量控制前移原则
  2. 接口测试可以发现 页面操作发现不了的问题。如:支付密码,输入 非数字、特殊字符。
  3. 低成本高收益(接口的一个bug ,可能对应上层界面 N 个bug)
  4. 接口测试,不同于传统的单元测试,站在用户的角度展开测试。

2.3 实现方式

  • 工具实现:

    • Postman、fiddler(抓包)、jmeter(压力测试)
  • 代码实现:

    • Python + UnitTest + requests

什么是自动化接口测试?

利用工具、代码代替人工,自动判断响应结果和预期结果是否一致。依赖断言。

3 HTTP协议

3.1 URL格式

URL:(Uniform Resource Locator统一资源定位符,是互联网上标准资源的地址。HTTP使用URL来建立连接和传输数据。

格式

image-20220306161327814

  • 协议:httphttps

  • 域名:本质是IP地址(定位网络环境中的一台主机)

  • 端口号:在网络主机上,定位一个应用。端口号可以省略。没有指定端口号,默认跟随协议

    • http 协议默认端口:80
    • https 协议默认端口:443
  • 资源路径:对应网页的源代码或网络中的一个数据资源。

    • 资源路径可以为空(没有),相当于资源路径为 /。例如https://baidu.com/https://baidu.com
    • 如有查询参数,则资源路径为 ?之前域名(端口) 之后的所有内容
    • 如果没有查询参数,则资源路径从域名(端口) 之后,直到结束。
  • 查询参数:传参给网页源代码。

    • ?与 资源路径 隔分
    • 查询参数可以有多个,之间用 & 隔分。
    • 参数以k=v的键值对形式出现

3.2 HTTP请求

  • 由客户端发送给服务器 –> http request

  • 规定了发送给服务器的数据的语法格式

3.2.1 整体格式

  • 请求行,请求头,请求空行,请求体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
POST http://tpshop-test.itheima.net/index.php HTTP/1.1
Host: tpshop-test.itheima.net
Connection: keep-alive
Content-Length: 53
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://tpshop-test.itheima.net
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://tpshop-test.itheima.net/Home/user/login.html
Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9
Cookie: is_mobile=0; province_id=1; city_id=2; district_id=3; is_distribut=1; PHPSESSID=1b80tii77mhle0fqd2bg52ucg5; cn=0

username=13800138006&password=123456&verify_code=8888

image-20220306162411570

3.2.2 请求行

  • 作用: 指定请求方法、请求资源
  • 语法格式:请求方法(空格)URL(空格)协议版本(\r\n),例如:
1
POST http://tpshop-test.itheima.net/index.php HTTP/1.1
  • 请求方法:

    • GET:查询。没有请求体
    • POST:新增。登录、注册主要使用。有请求体
    • PUT:修改。有请求体。
    • DELETE: 删除。没有请求体
  • URL:数据资源的定位符。

  • 协议版本:

    • http1.1 http1.2 http2.0
    • 主要使用 http1.1

3.2.3 请求头

  • 作用:向服务器描述客户端(浏览器)的基本信息。
  • 语法:键值对k:v,例如
1
2
3
4
5
6
7
8
9
10
11
Host: tpshop-test.itheima.net
Connection: keep-alive
Content-Length: 53
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://tpshop-test.itheima.net
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://tpshop-test.itheima.net/Home/user/login.html
Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9
Cookie: is_mobile=0; province_id=1; city_id=2; district_id=3; is_distribut=1; PHPSESSID=1b80tii77mhle0fqd2bg52ucg5; cn=0
  • 常用的键值对

    • Content-Type:向服务器描述请求体的数据类型。

      • application/json:json类型数据

      image-20220306164033571

      • application/x-www-form-urlencoded:表单类型数据

      image-20220306163754522

    • User-Agent:向服务器描述浏览器的类型。

3.2.4 请求体

  • GET、DELETE 请求方法,没有请求体。
  • POST、PUT 请求方法,有请求体。
  • 请求体的数据类型,受请求头中Content-Type的值影响

3.3 HTTP响应

  • 由服务器回发送给客户端 –> http response
  • 规定了服务器回发给客户端的数据的语法格式

3.3.1 整体格式

  • 响应行(状态行)、响应头、空行、响应体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HTTP/1.1 200 OK 
Server: nginx
Date: Mon, 29 Jun 2020 03:36:28 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.40 Set-Cookie: is_mobile=0; expires=Mon, 29-Jun-2020 04:36:28 GMT; Max-Age=3600; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post- check=0, pre-check=0
Pragma: no-cache
Set-Cookie: user_id=3338; path=/
Set-Cookie: is_distribut=1; path=/
Set-Cookie: uname=13800138006; path=/
Set-Cookie: cn=0; expires=Mon, 29-Jun-2020 02:36:28 GMT; Max- Age=-3600; path=/
Content-Length: 805

{"status":1,"msg":"\u767b\u9646\u6210\u529f","result": {"user_id":3338,"email":"","password":"519475228fe35ad067744465 c42a19b2","paypwd":null,"sex":0,"birthday":0,"user_money":"0.00 ","frozen_money":"0.00","distribut_money":"0.00","underling_num ber":0,"pay_points":100,"address_id":0,"reg_time":1590980161,"l ast_login":1590980161,"last_ip":"","qq":"","mobile":"1380013800 6","mobile_validated":1,"oauth":"","openid":null,"unionid":null ,"head_pic":null,"province":0,"city":0,"district":0,"email_vali dated":0,"nickname":"13800138006","level":1,"discount":"1.00"," total_amount":"0.00","is_lock":0,"is_distribut":1,"first_leader ":0,"second_leader":0,"third_leader":0,"token":"a26e177bd6506ff f68c01fd13e742073","message_mask":63,"push_id":"0","distribut_l evel":0,"level_name":"\u6ce8\u518c\u4f1a\u5458"},"url":""}

image-20220306164754422

3.3.2 响应行

  • 语法格式:协议版本(空格)状态码(空格)状态码描述 \r\n,例如:
1
HTTP/1.1 200 OK 
  • 协议版本:详见请求行内容

  • 状态码:针对 http请求,响应的状态

    • 1xx: 信息类,请求需要进一步访问。
    • 2xx: 成功。 200 ok
    • 3xx: 重定向。数据资源需要重定向访问。
    • 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

优点

  1. 对开发的技术要求低,只需要 get、post 方法即可。
  2. 代码实现灵活。

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风格接口

  1. 请求方法使用 get、post、delete、put 对应 查、增、删、改
  2. 数据资源的定位符(URL)是否唯一。
  3. 在 URL中,不使用动词,替换使用名词,并结合请求方法,界定具体操作。

4 接口测试流程

image-20220306172805093

  1. 结合需求文档,需求分析
  2. 结合开发提供的接口文件,进行接口分析
  3. 出具接口测试用例 (送审)
  4. 执行接口测试用例
  5. 缺陷(bug)的管理和跟踪
  6. 生成测试报告
  7. 接口自动化持续集成(可选)

5 接口文档

概念

接口文档也叫 API 文档(Application Programming Interface应用程序接口),是由开发人员编写,描述接口相关信息的文档。

5.1 作用

  1. 方便前端开发人员和后端开发人员在开发时进行对接
  2. 在人员更迭时,方便新入职的员工快速接手项目
  3. 方便测试人员编写接口测试用例

5.2 展现形式

  • 在线文档 (html)
  • 离线文档
    • word
    • xmind
    • pdf
    • 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是一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用,开发人员也会经常使用。

特点

  1. 简单易用的图形用户界面
  2. 可以保存接口请求的历史记录
  3. 使用测试集Collections可以更有效的管理组织接口
  4. 可以在团队之间同步接口数据

安装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请求,发送搜索接口请求。

image-20220309150202893

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 请求,测试登录接口。

  • 查询参数和响应结果

image-20220309151053167

  • 请求头

image-20220309151133849

  • 请求体:表单数据格式,要与请求头的Content-Type的格式保持一致

image-20220309151232974

6.2.3 案例三

从接口文档,获取登录接口的 http请求,使用 Postman 发送登录请求访问iHRM系统。

  • 请求方式:POST
  • 请求URL:http://ihrm-test.itheima.net/api/sys/login
  • 请求头:application/json
  • 请求体:
1
2
3
4
{
"mobile": "13800000002",
"password": "123456"
}

发送结果

  • 请求头和响应结果

image-20220309151831334

  • 请求体

image-20220309151908187

6.3 高级用法

6.3.1 管理测试用例Collections

Collections相当于一个文件夹,里面可以存放多个测试用例和子文件夹。子文件夹又可存放多个测试用例和子文件夹。

① 创建
  • 总览

image-20220309152644826

  • 创建测试用例或子文件夹

image-20220309152740077

② 导出和导入

导出

image-20220309162542909

导入

image-20220309162631949

6.3.2 断言机制

利用 Postman 自带的断言机制,帮助我们自动判断预期结果和实际结果是否一致。

  • 使用的是 JavaScript 脚本语言,写在 Tests 的标签页中。

image-20220309163003384

  • Tests中的脚本在发送请求之后执行,会把断言的结果(PASS/FAIL)在TestResults 标签中显示。
  • 断言的代码可以根据postman提供的模块快速生成
① 断言响应状态码

以案例三为例:Status code: Code is 200

image-20220309163703588

1
2
3
4
// 断言响应状态码为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});

代码解释

  • pm:Postman的一个实例
  • test()
    • 参数1:"Status code is 200",断言完成后,给出的提示信息,可自定义,根据断言的实际作用书写,例如断言响应状态码为404
    • 参数2:回调函数
  • pm.response.to.have.status(200);:Postman的响应结果中,有状态码200

结果1——断言成功

image-20220309164255250

结果2——断言失败

image-20220309164334804

② 断言响应体体是否包含某个字符串

以案例三为例:Response body: Contains string,断言响应体中包含某个字符串

1
2
3
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("操作成功");
});

结果1——断言成功

image-20220309165108963

结果2——断言失败

image-20220309165209752

③ 断言响应体是否等于某个字符串(对象)

Response body: Is equal to a string