使用Postman工具接口测试

文章目录

  • 一、接口
    • [1.1 接口的概念](#1.1 接口的概念)
    • [1.2 接口的类型](#1.2 接口的类型)
  • 二、接口测试
    • [2.1 概念](#2.1 概念)
    • [2.2 原理](#2.2 原理)
    • [2.3 特点](#2.3 特点)
  • 三、HTTP协议
    • [3.1 http协议简介](#3.1 http协议简介)
    • [3.2 URL格式](#3.2 URL格式)
    • [3.3 HTTP请求](#3.3 HTTP请求)
      • [3.3.1 请求行](#3.3.1 请求行)
      • [3.3.2 请求头](#3.3.2 请求头)
      • [3.3.3 请求体](#3.3.3 请求体)
    • [3.4 HTTP响应](#3.4 HTTP响应)
      • [3.4.1 状态行](#3.4.1 状态行)
      • [3.4.2 响应头](#3.4.2 响应头)
      • [3.4.3 响应体](#3.4.3 响应体)
    • [3.4 传统风格接口](#3.4 传统风格接口)
    • [3.5 RESTful风格接口](#3.5 RESTful风格接口)
  • 四、接口测试流程
  • 五、接口用例设计
    • [5.1 为什么写](#5.1 为什么写)
    • [5.2 测试点](#5.2 测试点)
      • [5.2.1 功能测试](#5.2.1 功能测试)
      • [5.2.2 性能测试](#5.2.2 性能测试)
      • [5.2.3 安全测试](#5.2.3 安全测试)
    • [5.3 设计方法与思路](#5.3 设计方法与思路)
  • 六、Postman工具
    • [6.1 下载与介绍](#6.1 下载与介绍)
    • [6.2 运行jar包](#6.2 运行jar包)
  • 七、实战使用postman
    • [7.1 get方法的使用](#7.1 get方法的使用)
    • [7.2 Post方法的使用](#7.2 Post方法的使用)
    • [7.3 postman环境讲解](#7.3 postman环境讲解)
    • [7.4 变量](#7.4 变量)
    • [7.5 变量细节刨析](#7.5 变量细节刨析)
    • [7.6 postman沙箱](#7.6 postman沙箱)
    • [7.7 postman实战之预处理脚本](#7.7 postman实战之预处理脚本)
    • [7.8 postman实战之断言](#7.8 postman实战之断言)
    • [7.9 runner测试](#7.9 runner测试)
    • [7.10 利用postman生成在线的api文档](#7.10 利用postman生成在线的api文档)

一、接口

1.1 接口的概念

系统与系统之间,组件与组件之间,数据传递交互的通道

1.2 接口的类型

  • 按协议划分:http、tcp、IP
  • 按语言划分:C++、java、php
  • 按范围划分:
    系统之间:
    "多个内部系统之间"
    "内部系统与外部系统之间"
  • 程序之间划分:
    "方法与方法之间、函数与函数之间、模块与模块之间"

二、接口测试

2.1 概念

接口测试就是,对系统或组件之间的接口进行测试。校验传递的数据正确性和逻辑依赖关系的正确性

2.2 原理

接口测试,主要针对的测试目标 ------ 服务器

  • 怎么测?
    模拟客户端,向服务器发送请求
  • 用什么测?
    工具:fiddler、postman、jmter
    代码:python + UnitTest框架 + Requests框架
  • 测什么?
    测试 服务器针对客户端请求,回发的响应数据是否与预期结果一致!

2.3 特点

  • 符合质量控制前移的理念
  • 可以发现一些页面操作发现不了的问题
  • 接口测试低成本高效益
  • 接口测试是从用户的角度对系统进行检测

三、HTTP协议

3.1 http协议简介

HTTP:(HyperText Transfer Protocol)超文本传输协议,是一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的一种网络协议

特征:

  1. 支持客户端/服务器模式

  2. 简单快速

  3. 灵活

  4. 无连接

  5. 无状态

3.2 URL格式

概念:统一资源定位符

作用:在网络环境中,唯一的定义一个数据资源

  • 协议:http。 规定数据传输的方式。
  • 域名(IP):在网络环境中找到主机。------ 用 : // 与协议隔分
  • 端口(port):(常省略)在网络主机上,标识一个进程(应用程序)------ 用: 与域名
  • 资源路径:标识网络资源(文件、图片、音视频、变量...)------ 用: / 与端口格分
  • 查询参数:传递给资源路径对应的数据。------ 用 ? 与资源路径隔分。 查询参数内部 用 & 隔分多个kv对

3.3 HTTP请求

作用:

  • 客户端(app、浏览器),发送请求给服务器时,使用的协议 ------ http请求协议
  • 规定 发送给服务器的数据传输的语法格式

整体格式:

  • 请求行:http请求第一行。请求方法 (空格) URL (空格) 协议版本
  • 请求头:语法格式:k :v
    • User-Agent:描述 请求发送端的 浏览器类型。
    • Content-Type:描述 请求体 的 数据类型!
  • 空行:代表http请求头结束。
  • 请求体:请求发送时携带的数据。数据类型 Content-Type 的值!
    • post 和 put 有请求体
    • get 和 delete 没有请求体

3.3.1 请求行

  • http 请求方法:大小写均可
    • GET:查询 ------ 没有请求体
    • POST:添加(登录时常用)
    • put: 修改
    • delete: 删除 ------ 没有请求体

3.3.2 请求头

  • 数据格式:k:v
  • Content-Type:
    • application/json: JSON数据格式
    • application/x-www-form-urlencoded: form表单数据

3.3.3 请求体

  • GET和DELETE 没有
  • PUT 和POST有
  • 数据类型受 Content-Type 值影响

3.4 HTTP响应

作用:

  • 服务器端,针对客户端发送的 http请求,回发响应数据。------ http应答!
  • 规定 回发给客户端的数据组织格式

整体格式

  • 响应行(状态行):协议版本 (空格) 状态码 (空格) 状态描述
  • 响应头:语法格式:k:v
    • Content-Type: 描述 响应体中数据类型。
  • 空行:代表响应头结束
  • 响应体:绝大多数不为空(请求成功:回发数据,失败:回发错误信息)
    • 数据类型受 Content-Type值影响

3.4.1 状态行

状态码:

  • 1xx:代表指示信息。表请求已经被接收,等待继续处理
  • 2xx:代表请求成功被处理、接收。 常见:200、201
  • 3xx:重定向,待访问的资源,需求重新指定路径访问
  • 4xx:代表客户端错误。常见:404、 403
  • 5xx:访问器端错误

3.4.2 响应头

  • 语法格式:k:v
  • Content-Type:值为 响应体 的数据类型
  • Content-Length: 响应体的大小。可以不写,浏览器会自动求取。一旦写,必须准确!

3.4.3 响应体

  • 回发给客户端的 消息内容。常见的有 html网页、xml、json

3.4 传统风格接口

特点:

  • 请求方法,只使用 get 和 post 即可
  • URL 不唯一。同一个操作可以对应不同的 URL
  • 状态码的使用较单一。200 最常见

3.5 RESTful风格接口

特点:

  1. 每一个URL代表一种资源;
  2. 客户端和服务器之间,传递这种资源的某种表现层;
    • 表现层:数据的不同表现形式(如:图片、文字表现同一个数据对象)
  3. 客户端通过四个HTTP动词(GET、post、delete、put),对服务器端资源进行操作,实现"表现层状态转化";
  4. 接口之间传递的数据最常用格式为JSON'

四、接口测试流程

  • 分析需求,产生需求文档
  • (开发产生接口文档)解析接口文档
  • 产生接口测试用例(评审)
  • 执行测试用例
    工具:postman、jmeter、fiddler
    代码:python + Requests + UnitTest
  • 提交测试报告、跟踪缺陷
  • 生成测试报告
  • 接口自动化持续集成

五、接口用例设计

5.1 为什么写

  1. 防止测试点漏测。条理清晰
  2. 方便分配工作,评估工作量和时间

5.2 测试点

5.2.1 功能测试

  • 单接口功能:
    • 手工测试中的单个业务模块,一般对应一个接口。
      • 登录业务 ------> 登录接口
      • 加入购物车业务 ------> 加入购物车接口
      • 订单业务 ------> 订单接口
      • 支付业务 ------> 支付接口
    • 借助工具、代码。绕开前端界面,组织接口所需要的数据,展开接口测试
  • 业务场景功能:
    • 按照用户实际 使用场景,梳理 接口业务 场景
    • 组织业务场景时,一般只需做 正向 测试即可(与手工一致)
    • 一般建议用最少的 用例 覆盖最多的业务场景
      • 登录 ------ 搜索商品 ------ 加购物车 ------ 下单 ------ 支付 ------ 评价

5.2.2 性能测试

  • 响应时长
  • 吞吐量
  • 并发数量
  • 服务器资源利用率

5.2.3 安全测试

  • 攻击安全。 ------ 与测试工程师无关

  • 业务安全。 ------ 测试的方向

5.3 设计方法与思路

与手工设计相同之处

  • 手工测试 对应的 功能测试点,与接口测试对应的功能 完全一致

shop商城 登录 页面,手工功能测试用例设计要点:

  1. 页面布局是否符合需求
  2. 测试 用户名 输入框,输入的数据是否正确
  3. 测试 密码 输入框,输入的数据是否正确
  4. 测试 验证码 输入框, 输入的数据是否正确

shop商城 登录 页面,接口测试用例设计要点:

  1. 测试 用户名 输入框对应的 username 的值 是否正确
  2. 测试 密码 输入框对应的 password 的值,是否正确
  3. 测试 验证码 输入框对应的 verify_code 的值,是否正确

与手工设计不同之处

  1. 手工测试,测写入到输入框中的数据是否正确。接口测试测 参数 对应的 参数值 是否正确
  2. 接口测试,不单单针对 参数值进行,还可以针对 参数本身 进行测试
    • 正向参数:
      • 必选参数:所有的 必选(必填)都包含
      • 组合参数:所有的 必选 + 任意一个或多个可选参数
      • 全部参数:所有的 必选 + 所有的 可选参数
    • 反向参数:
      • 多参:多出一个或多个必选参数 (可以任意指定)
      • 少参:缺少一个或多个必选参数
      • 无参:没有必选参数
      • 错误参数:参数名输入错误

六、Postman工具

6.1 下载与介绍

什么是 postman 是一款非常流行的http接口测试工具

Postman有两种种安装方式

分别为:

应用程序和浏览器插件

postman下载 postman下载地址

jdk安装:

jdk的简介

jre: java runtime environment

jdk:java development kit
win10怎么配置jdk变量

右键此电脑-》属性-》高级系统设置-》环境变量
jdk默认安装路径

新建两个变量

JAVA_HOME

变量值为jdk的安装路径

PATH

%JAVA_HOME%\bin

%JAVA_HOME%\jre\bin
测试环境是否安装成功

javac

java -version

postman有四个操作区域:

上边工具栏

左边菜单栏

右边请求栏

下边状态栏

6.2 运行jar包

运行步骤:

进入含有jar的文件夹下 ,然后在地址栏中输入-》 cmd -》 然后回车 -》 java -jar postman.jar

七、实战使用postman

7.1 get方法的使用

  • get请求

特点:

参数和url通过 "?" 隔开

参数是以键值对的形式,例如:name=小杰

可以传递多个参数,参数与参数之间通过"&"隔开。例如:name=小杰&password=123

postman中响应的内容

body: 服务器相应的数据

cookies: 返回的cookes

headers: 对相应信息的描述,比如返回内容的格式 长度 返回的服务器

Test Restults: 显示脚本执行结果的地方

7.2 Post方法的使用

-post的常用三种格式:

  1. form-data格式
  2. x-www-form-urlencoded格式
  3. json格式

post请求和get请求的区别:

  • post请求传输的数据相对安全
  • post请求可以上传文件

三种格式的实战案例

1、form-data格式

powershell 复制代码
请求的地址: localhost:8085/pub/api/flogin 
请求的参数:(参数都是必填的,不填或者参数不一致,将无法返回预期的结果) 
name:老王
password:12345
pcode:12345

2、x-www-form-urlencoded格式

powershell 复制代码
请求的地址: localhost:8085/pub/api/login
请求的参数:(参数都是必填的,不填或者参数不一致,将无法返回预期的结果)
name:老陈
password:12345
pcode:12345

3、json格式

powershell 复制代码
请求的地址: localhost:8085/pub/api/Jlogin
请求的参数:(参数都是必填的,不填或者参数不一致,将无法返回预期的结果)
{ "name":"老杨", "password":"12345", "pcode":"12345" }

7.3 postman环境讲解

我们首先要创建环境


这里就是我们所创建的环境

在这里我们就可以选择我们所要使用的环境

7.4 变量

postman中变量种类

  • 环境变量
  • 集合变量
  • 全局变量

在这里可以看到我们当前使用的环境是有什么变量

点击Edit 可以添加变量 我们在全局环境中添加变量

在这里我们修改下测试环境 添加变量

7.5 变量细节刨析

集合变量、环境变量和全局变量的作用范围:

  • 集合变量:作用范围在整个集合
  • 环境变量:作用范围在当前使用的环境
  • 全局变量:在所有集合所有环境中都可以使用

当集合变量、环境变量和全局变量的名字冲突的时候,postman是如何取值的?

  • 当集合变量和环境变量和全局变量冲突的时候 优先使用环境变量
  • 当集合变量和全局变量冲突的时候 优先使用集合变量

7.6 postman沙箱

定义与功能

  • 定义:Postman沙箱是一个隔离的JavaScript执行环境,专为编写预请求脚本(Pre-request Script)和测试脚本(Test Script)而设计
  • 功能:
    1、预请求脚本:在请求发送之前执行,用于修改请求参数、设置环境变量等。
    2、测试脚本:在请求响应后执行,用于断言响应内容、检查状态码等,以确保响应符合预期

脚本编写与执行

  • 用户可以在Postman的"Pre-request Script"和"Tests"标签页中编写JavaScript脚本
  • 这些脚本在Postman沙箱中执行,不会影响到Postman应用本身或其他请求的执行
  • 通过Postman提供的API(如pm.environment.set、pm.test等),用户可以轻松地设置环境变量、进行断言等操作

应用场景

  • 参数化请求:通过预请求脚本设置不同的请求参数,实现批量测试
  • 环境变量管理:在预请求脚本中设置环境变量,以便在请求中使用
  • 断言响应:在测试脚本中编写断言,验证响应内容是否符合预期
  • 构建复杂的工作流:通过脚本控制请求的发送顺序,实现复杂的工作流

注意事项

  • 脚本性能:由于脚本在沙箱中执行,其性能可能受到JavaScript引擎的限制。因此,应避免编写过于复杂的脚本,以免影响请求的性能
  • 安全性:在编写脚本时,应注意安全性问题,避免执行不安全的操作(如执行外部代码)
  • 兼容性:随着Postman版本的更新,沙箱中的API和功能可能会有所变化。因此,在编写脚本时,应参考最新的Postman文档

7.7 postman实战之预处理脚本

一:在请求运行之前编写脚本

1.点击集合中的任意一个接口

2.点击Pre-request Script,即可在此下方编写脚本

3.点击send,Pre-request Script下的代码将在Postman将请求发送到API之前执行

二:如何编写脚本

Postman中提供一些选项,点击一下,则会在Pre-request Script中生成对应的脚本,可根据自己的需求来编写脚本

点击集合中的任意一个接口

点击Pre-request Script,即可在此下方编写脚本

点击右侧的Snippets下的提示

三:使用请求数据编写脚本

pm.request对象提供对运行脚本的请求的数据的访问。对于预请求脚本,这是即将运行的请求

可以使用pm.request对象预请求脚本在请求运行之前更改请求配置的各个部分。

该pm.request对象提供以下属性和方法:

  • 为当前请求添加具有指定名称和值的标头:
    pm.request.headers.add(header:Header):function
bash 复制代码
pm.request.headers.add({
    key:"client-id",
    value:"abcdef"
})

如:在Postman中的预请求脚本中,添加上述示例代码,打开控制台,在该请求接口中看到headers中新增了我们设置的key和value

  • 删除指定名称的请求头:

pm.request.headers.remove(headerName:String):function

如:上述在headers中添加了key和value,在下面我们选择删除数据,在预请求脚本中添加上述代码,在控制台中则会发现,不会出现新增的key和value

7.8 postman实战之断言

在 postman 中我们是在Tests标签中编写断言,同时右侧封装了常用的断言,当然 Tests 除了可以作为断言,还可以当做后置处理器来编写一些后置处理代码,经常应用于:

  • 获取当前接口的响应,传递给下一个接口

  • 控制多个接口间的执行顺序

    常见的断言方法

1、状态码断言

  • 判断接口响应的状态码:Status code: code is 200

pm.test("Status code is 200", function () {

//Status code is 200是断言名称,可以自行修改 pm.response.to.have.status(200);

//这里填写的200是预期结果,实际结果是请求返回结果

});

  • 判断接口响应码是否与预期集合中的某个值一致

pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([201,202]);

//检查响应码是否为201或者202

});

  • 判断状态码名称(也就是状态码后面的描述)是否包含某个字符串:Status code:code name has string

pm.test("Status code name has string", function () { pm.response.to.have.status("OK");

//断言响应状态消息包含OK

});

2、响应内容断言

  • 断言响应体中包含XXX字符串:Response body:Contains string

pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search");

//pm.response.text()

});

  • 响应结果如果是json,断言响应体(json)中某个键名对应的值:Response body : JSON value check

pm.test("Your test name", function () {

var jsonData = pm.response.json();

//获取响应体,以json显示,赋值给jsonData .注意:该响应体必须返会是的json,否则会报错 pm.expect(jsonData.value).to.eql(100);

//获取jsonData中键名为value的值,然后和100进行比较

});

  • 断言响应体等于XXX字符串:Response body : is equal to a string

pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string");

//获取响应体等于response_body_string

});

3、响应头断言

  • 断言响应头包含:Response headers:Content-Type header check

pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type");

//断言响应头存在"Content-Type"

});

4、响应速度断言

  • 判断实际响应时间是否与低于预期时间:Response time is less than 200ms

pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); });

如下图所示

常用断言对应的脚本
清除一个环境变量

postman.clearEnvironmentVariable("variable_key");

断言响应数据中是否存在某个元素

tests["//断言返回的数据中是否存在__pid__这个元素"] = responseBody.has("pid");

断言response等于预期内容

tests["Body is correct"] = responseBody === "response_body_string";

断言json解析后的key的值等于预期内容

tests["Args key contains argument passed as url parameter"] = 'test' in responseJSON.args

检查response的header信息是否有被测字段

tests["Content-Type is present"] = postman.getResponseHeader("Content-Type");

校验响应数据中,返回的数据类型

var jsonData = JSON.parse(responseBody);//第一步先转化为json字符串。其中变量(jsonData)可以自行定义...

tests["//data.category.name__valuse的值的类型是不是string"] = typeof(jsonData.data.category[0].name) == "string";

响应时间判断

tests["Response time is less than 200ms"] = responseTime < 200;

设置环境变量

postman.setEnvironmentVariable("variable_key", "variable_value");

断言状态码

tests["Status code is 200"] = responseCode.code != 400;

检查响应码name

tests["Status code name has string"] = responseCode.name.has("Created");

断言成功的post请求返回码

tests["Successful POST request"] = responseCode.code === 201 || responseCode.cod

7.9 runner测试

启动runner有两种方式:
一、启动runner

二、设置Collection runner运行参数

进入到runner,选中Collection之后,在页面的右侧栏会显示Collection中的请求列表,runner允许通过以下方式自定义请求的执行

  • 执行顺序:请求以它们出现在Collecntion运行器的"运行顺序"窗格中的顺序执行。可以通过拖放来重新排序执行。

  • 选择性执行:可以使用Collecntion运行器的" 运行顺序"窗格中的前面的复选框来禁用请求,从而阻止执行请求

1、Environment:环境切换

如果选择的Collection的请求中需要用到特定的环境,可以通过此选项切换

2、Iterations:迭代次数

按照设置的请求执行顺序,执行设置的迭代次数

3、Delay:设置请求之间的延时

收集运行中每个请求之间的间隔(以毫秒为单位)

4、Data:提供用于收集运行的数据文件

支持application/Json、text/csv文件格式,并且提供了数据预览功能,下一篇文章专门讲解参数化的使用。

5、save responses:保存响应结果

限制运行Collection时的响应日志记录,默认情况下,所有响应都会被记录,可以更改该设置以提高执行效率。更改方式可以有如下几种:

a、对于所有请求,将记录所有请求的响应。

b、对于失败的请求,将仅记录对至少一项测试失败的请求的响应。

c、对于没有请求,将不会记录任何响应。

6、keep variable values:保存运行中的变量

启用此选项将在运行结束时保存变量的值,并覆盖先前的值。

7、Save Cookies after collection run:运行collection之后保存cookie值

Collection中的请求可以在执行期间创建/更新cookie。该选项可以将cookie保存到cookie管理器,从而覆盖任何现有cookie。启用此选项会将会话的cookie保存到cookie管理器

三、运行测试集Collection

下面上面六个接口为例运行,上面的设置参数中,需要勾选保存响应结果项,其他无要求:

点击上图中的Run按钮,即可启动测试集请求的执行,运行结果如下:

四:查看Collection执行结果

在此运行结果中,可以进行如下分析:

1、在右侧边栏可以看到明显的编号,如果多次迭代会有相应的数字,本次运行的迭代次数为1,

2、每一行请求,都是一个执行结果,点击可以列出该请求发出后的所有内容(请求及返回的响应结果)

3、绿色的方块表示无断言或者断言通过,红色的方块表示断言失败,有一个断言失败,则请求失败

4、在左侧边栏上,可以过滤断言成功的请求或者失败的请求,点对应颜色的方框即可

5、在本页可以点击页面上部的export result,导出Json格式的执行结果文件,不过可读性不好

7.10 利用postman生成在线的api文档

这个就是我们postman生成的在线文档了

相关推荐
明明跟你说过6 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
惜.己18 小时前
Jmeter中的断言(二)
测试工具·jmeter·1024程序员节
互联网杂货铺1 天前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
go_to_hacker1 天前
容器安全检测和渗透测试工具
测试工具·安全
惜.己1 天前
Jmeter中的断言(四)
测试工具·jmeter·1024程序员节
半桶水专家1 天前
tcpdump抓取流量包详解
网络·测试工具·tcpdump
小流年 °1 天前
抓包工具Wireshark
网络·测试工具·wireshark
LucianaiB2 天前
丹摩|丹摩助力selenium实现大麦网抢票
selenium·测试工具
码上一元2 天前
Wireshark 分析SQL 批量插入慢的问题
sql·测试工具·wireshark