1、什么是Postman?
2、Postman基础操作
3、Postman高级用法
1.1Postman简介
Postman是一个进行API测试和调试的工具,它帮助开发者模拟各种HTTP请求,以检查API的响应和行为。通过Postman,开发者可以发送请求并查看返回的响应,检查响应的内容和状态,以及调试和测试API。Postman还支持设置请求头、参数、环境变量等,可以帮助开发者更全面地测试API的功能和行为。此外,Postman还支持请求的录制、批量执行、断言等功能,这些功能可以帮助开发者自动化测试流程,提高测试效率和准确性。
1.2Postman特点
Postman是一款简单方便的接口调试工具,它便于分享和协作,具有以下特点:
接口调试:Postman可以用于发送HTTP请求并查看响应,支持多种HTTP方法和请求类型,如GET、POST、PUT、DELETE等。
请求集管理:Postman可以创建和管理多个请求集合,用于批量发送请求或进行测试。
环境配置:Postman允许用户定义环境变量和集合变量,以方便在不同的请求中使用不同的参数和值。
参数化:Postman支持参数化请求中的某些部分,以便轻松地更改和重用相同的请求。
断言:Postman可以执行断言测试,以确保请求的响应符合预期。
批量执行:Postman可以批量执行请求集合中的所有请求,并生成相应的报告。
请求录制:Postman支持请求录制功能,可以记录通过Postman发送的所有请求,并将其保存为请求集合并进行管理。
Mock Server:Postman内置了Mock Server功能,可以在本地模拟服务器的响应,以便在没有真实服务器的情况下进行测试。
接口文档:Postman可以自动生成接口文档,方便团队成员查看和使用。
接口监控:Postman支持接口监控功能,可以实时监控接口的性能和状态。
1.3Postman主界面功能
在Postman的主界面中,主要有菜单栏、工具栏、请求管理区、环境管理区、请求设计区及状态栏等主要部分组成。使用Postman进行接口测试的具体步骤包括获取请求的基本参数、设计测试用例、通过Postman工具拼接请求、断言以及查看结果等步骤。
Postman基础操作
PART 02
2.1常见的接口请求
利用python的web框架Flask编写三个简单的用户查询和添加接口。如下所示:
from flask import Flask, jsonify, request
app = Flask(__name__)
# 使通过jsonify返回的中文显示正常,否则显示为ASCII码
app.config["JSON_AS_ASCII"] = False
# 因为是简单模拟,所以数据就以下面字典形式存储,而不是存储在数据库
user_data = [
{"id": 1, "username": "张三", "age": "18", "sex": "女"},
{"id": 2, "username": "李四", "age": "50", "sex": "女"},
{"id": 3, "username": "王二", "age": "30", "sex": "男"}
]
@app.route("/users", methods=["GET"])
def get_all_users():
"""
查询所有用户信息
:return:
"""
return jsonify({"code": 1000, "data": user_data, "msg": "查询成功"})
@app.route("/users/<int:user_id>", methods=["GET"])
def get_user(user_id):
"""
查询某个用户信息
:param user_id: 用户id
:return:
"""
if user_id > 0 and user_id <= len(user_data):
return jsonify({"code": 1000, "data": user_data[user_id - 1], "msg": "查询成功"})
return jsonify({"code": 1000, "msg": "用户不存在"})
@app.route("/register", methods=['POST'])
def user_register():
"""
添加用户
:return:
"""
# request.json.get("username")即从发送的json格式的请求参数中获取username的值
username = request.json.get("username").strip() # 用户名
age = request.json.get("age").strip() # 年龄
sex = request.json.get("sex").strip() # 性别
# 获取已存在的所有用户名
username_old = []
for x in user_data:
username_old.append(x["username"])
if username and age and sex:
if username in (username_old):
return jsonify({"code": 2001, "msg": "用户名已存在!"})
elif sex not in (["男", "女"]):
return jsonify({"code": 4001, "msg": "请输入正确的性别!"})
else:
return jsonify({"code": 1000, "msg": "注册成功!"})
else:
return jsonify({"code": 2001, "msg": "用户名、年龄、性别不能为空,请检查!"})
if __name__ == '__main__':
app.run(debug=True)
通过postman调用get类型接口基础步骤(以查询用户接口为例):
1、打开postman,新建请求页;
2、在请求的URL中输入请求地址http://127.0.0.1:5000/users,选择请求方法GET;
3、点击Send按钮,这时就可以在下部的窗格中看到来自服务器的json响应数据。
通过postman调用post类型接口基础步骤(以添加用户接口为例):
1、打开postman,新建请求页;
2、在请求的URL中输入请求地址http://127.0.0.1:5000/register,选择请求方法POST;
3、在body区域选择raw并选择json格式,输入请求参数:{"username":"测试","age":"11","sex":"女"};
4、点击Send按钮,这时就可以在下部的窗格中看到来自服务器的json响应数据。
2.2常用接口数据请求类型
url参数的接口请求
URL参数(Query Parameters):这些参数通常用于GET请求中,位于URL的末尾,以“?”或“&”分隔。在POST或PUT请求中,如果需要传递数据,则通常将这些数据编码为URL参数,并放在URL的主体中。(在url地址和params中填写参数是一样的效果)
表单类型的接口请求
form-data:它是HTTP请求中的multipart/form-data,会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。它既可以上传键值对,也可以上传文件。
x-www-form-urlencoded:它是application/x-www-from-urlencoded,会将表单内的数据转换为键值对。
raw数据格式的接口请求
raw:在Postman中,使用"raw"数据类型可以上传任意格式的数据,包括text、Javascript、Json、Html、Xml等。在创建请求时,你可以在Body选项卡中选择"raw",然后在空白文本框中输入要上传的数据。Postman会自动将数据转换为相应的格式,并在请求中发送这些数据。(在大多数前后端分离的web项目中,通常使用的是json格式数据进行前后端数据交换)
binary数据格式的接口请求
binary:在Postman中,使用"binary"数据类型可以上传二进制文件。在创建请求时,可以在Body选项卡中选择"binary",然后点击选择文件按钮,选择要上传的二进制文件。在上传文件后,Postman会将文件转换为二进制格式,并在请求中发送这个文件。"binary"数据类型一次只能上传一个文件,而且无法保存历史记录。每次都需要重新选择文件并提交。另外,当使用"binary"数据类型时,需要在Headers中设置正确的Content-Type(在使用这种数据类型时,Postman会自动设置正确的Content-Type头部,该头部根据所选文件的类型进行设置。),例如对于PNG图片,应该设置为"image/png"。
2.3接口管理&批量执行
1、创建一个新的Collections。可以通过点击Collections标签页的下拉菜单,选择“+”图标,然后输入文件夹的名称来创建Collections。Collections是一个组织结构,可以将相关的接口请求放在一起,方便管理和维护。
2、在Collections下,可以创建子目录以进一步细分测试用例。选择“添加文件夹”图标,然后输入文件夹的名称来创建子目录。
3、创建接口测试用例,即新建HTTP请求。选择请求方式、写好URL、请求头和请求体。
4、接口合集批量运行,点击运行按钮,选择要运行的测试用例或请求,然后点击“运行”按钮开始执行批量测试。执行结果将在屏幕上显示,包括每个测试用例或请求的状态(通过/失败)、请求URL、请求头、请求体信息、响应头、响应体信息和状态码等信息。
2.4接口关联
接口关联场景:
登录获取token,然后使用token访问其他接口。
需要分页获取数据,一页一页的获取数据,然后将每页的数据进行关联。
将多个接口的响应数据放在同一个请求中返回到前端,然后前端再将数据传到另一个服务中进行使用。
前端控制层之间的调用,比如一个接口需要调用另一个接口获取数据,然后将获取到的数据作为自己的请求参数。
postman中接口关联方法:
json提取器实现接口关联
:在Postman中,可以使用JSON提取器来从响应中提取数据,并将其存储为环境变量。这样,在后续的接口请求中就可以使用这些变量来实现接口关联。
步骤一:在查询单个用户的接口中,利用test模块编写js代码获取用户名称并保存为全局变量。
//使用json提取器提取查询用户的username
//获取请求响应结果转换为json格式
var jsonData = pm.response.json();
console.log(jsonData.data.username)
//把提取的username保存为全局变量
pm.globals.set("username", jsonData.data.username);
步骤二:在添加用户的接口中,利用全局变量username作为请求参数,实现两个接口之间的关联。
正则表达式提取器实现接口关联
:在Postman中,可以使用JSON提取器来从响应中提取数据,并将其存储为环境变量。这样,在后续的接口请求中就可以使用这些变量来实现接口关联。
步骤一:在查询单个用户的接口中,利用test模块通过编写正则提取js代码获取用户名称并保存为全局变量。
//获取请求响应结果并通过正则提取响应数据的username值
var data = responseBody.match(new RegExp('"username":"(.*?)"'))[1];
console.log(data)
//把提取的username保存为全局变量
pm.globals.set("username1", data);
步骤二:在添加用户的接口中,利用全局变量username1作为请求参数,实现两个接口之间的关联。
2.5接口参数化
Postman接口参数化指的是在Postman中通过某种方式动态地传递参数值到接口请求中。当请求的数据需要动态变化或者需要批量读取时,通过将请求的数据存放在一个文件中,然后依次读取该文件中的数据,达到使用动态数据请求接口的目的。
这样做的好处是可以在不改变接口的情况下,实现对接口的多次请求和测试,并且可以方便地修改和更新请求的数据,而无需手动更改代码。在Postman中,可以使用全局变量、环境变量、查询参数或请求体等多种方式来实现接口参数化。
案例:我们现在需要测试添加用户这个接口,需要测试请求参数用户名必填项、用户名的唯一性以及性别的取值范围。按正常来说我们需要写三个接口来进行测试,通过参数化我们只需要一个接口就能完成。
步骤一:设置需要参数化的变量
步骤二:构造各变量参数化的数据,第一条数据验证用户名唯一性、第二条数据验证用户名必填项、第三条数据验证性别的取值范围
步骤三:利用postman的集合运行,上传txt文件数据,并配置迭代次数
步骤四:配置好后点击运行,查看结果
2.6接口断言
在Postman中,断言用于验证接口响应的状态码、返回值等信息是否符合预期。通过断言可以增加测试的准确性和可靠性,帮助我们发现潜在的问题并修复它们。断言功能主要通过Test模块来实现,该模块基于Node.js。你可以在请求返回之后显示并查看断言结果,这些结果会展示在Test Results中。
常见的断言类型包括如下四种,可通过这四种结合实际场景进行变通:
状态码断言:
示例一:判断接口响应的状态码是否为200。
pm.test("响应状态码为200", function () {
pm.response.to.have.status(200);
});
示例二:判断接口响应码是否与预期集合中的某个值一致。
pm.test("判断接口响应码是否与预期集合中的某个值一致", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});
示例三:判断状态码名称(也就是状态码后面的描述)是否包含某个字符串。
pm.test("断言响应状态消息包含OK", function () {
pm.response.to.have.status("OK");
});
响应正文内容断言:
示例一:断言响应体中包含XXX字符串。
pm.test("断言响应体是否包含xxx字符串", function () {
pm.expect(pm.response.text()).to.include("xxx");
});
示例二:如果响应结果为json,断言响应体json中某个键名对应的值。
pm.test("断言响应体json键值", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
示例三:断言响应体等于XXX字符串。
pm.test("断言响应体等于xxx字符串", function () {
pm.response.to.have.body("xxx");
});
响应头断言:
示例一:检查报文头中是否包含Content-Type字段。
pm.test("断言响应头是否包含Content-Type字段", function () {
pm.response.to.have.header("Content-Type");
});
接口速度断言:
示例一:断言接口响应时间小于200ms。
pm.test("断言响应时间是否小于200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
Postman高级用法
PART 03
3.1生成测试报告
Postman 本身不提供生成测试报告的功能,但您可以使用第三方工具或自定义脚本来生成测试报告。下面将介绍通过第三方工具Newman生成测试报告:
1、Newman 是一个命令行工具,可以运行 Postman 集合并生成详细的测试报告。首先,您需要安装 Newman。在命令行中输入以下命令(前提是已安装node):
npm install -g newman
2、导出接口测试用例集合
3、输入newman命令:
newman run 用例集名称.json -e 环境文件名称.json -r html --reporter-html-export 生成测试报告的路径以及名称.html
至此,简单的接口测试报告就生成了!
3.2接口文档
可利用postman自带的接口文档在线分享。
1、查看接口集合的文档,进行发布共享。
2、共享前的一些基本设置。
3、访问共享地址查看接口集合的文档。
3.3mock服务
Postman的mock服务是一种功能强大的工具,它允许用户模拟服务器的行为并获取模拟数据的响应。在测试工作中,尤其是在环境问题或系统复杂度存在的情况下,我们经常需要使用Mock方式进行数据的模拟。重要的是,Mock服务并不是一个真实的服务,而是一个被伪装成真实服务的假服务。通过创建Mock服务,我们可以测试我们的API并验证结果的正确性。
1、通过postman左侧栏新建mock服务。
2、配置mock接口的请求方法、路径、响应信息等。
3、创建mock服务,可查看请求地址。
4、测试mock接口。
3.4监视器
Postman的监视器,也被称为Monitors,是一个功能强大的工具,它允许用户定期运行一个集合以检查其性能和响应。这个功能是基于Postman集合API的灵活监控,用于监控API的正常运行时间、响应能力和正确性,并提供详细的监测结果报告。
1、为用户管理接口新增监视器。
2、配置监视器信息,定时任务可以根据需要按照分钟、小时、周时间点对接口进行监控,当接口出现错误时,会发送预警邮件。
3、保存后,将根据定时任务执行,进行监控,也可到监控页面自行运行;如果接口集合运行异常将通过配置的邮箱发送邮件。
3.5连接数据库
Postman本身并不支持直接连接数据库,但是可以通过使用xmysql第三方依赖来实现连接数据库的目的。通过安装并启动xMySQL(连接数据库后生成服务,暴露接口,调用相应的接口来获取数据库的数据)或者其他适用于你的方法(还可以通过postman提供的预请求脚本Pre-request Script进行配置,编写js代码连接数据库)。例如,你可以设置请求参数从数据库中获取,或者在请求成功后将响应结果存入数据库,还可以将通过获取数据库的数据来进行断言等。下面将介绍postman如何连接mysql数据库并进行操作:
1、在本地安装xmysql(前提是需要先安装好nodejs)
npm install -g xmysql
2、在远程服务器上启动mysql数据库服务
3、在本地通过xmysql连接数据库
xmysql -u username -p password -d databasename
xmysql命令参数介绍:
-h 连接数据库主机名
-u 连接数据库用户名
-p 连接数据库密码
-d 连接数据库名
-r 连接数据库输入的主机名,无这个选项默认为 localhost
-n 连接这个服务设置的端口,无这个选项默认为 3000
4、通过浏览器访问localhost:3000,可查看所有(227个)接口地址。
5、通过GET请求某一个表名,获取整张表的数据。(以goods数据库表为例)
GET http://localhost:3000/api/goods
6、通过GET请求某一个表的一行数据(id是使用该表的主键)
GET http://localhost:3000/api/goods/id
7、通过POST请求为该表新增一条数据(PUT也可新增)
POST http://localhost:3000/api/goods
# 在body中添加参数,参数字段和数据库表字段一致
8、通过PATCH修改刚刚新增的数据(id是使用该表的主键)
PATCH http://localhost:3000/api/goods/id
# 在body中添加参数,参数字段和数据库表字段一致
9、通过DELETE删除数据(id是使用该表的主键)
DELETE http://localhost:3000/api/goods/id
10、从postmn对数据库的操作来看,我们可以对数据库进行增删改查;这样我们在做业务接口测试时,可提取数据库的数据和接口响应数据进行校验;还能提取数据库的数据作为请求参数(通过正则提取或者json提取)。并且还能为数据库构造业务数据,当测试完成后,清除数据库的测试数据。通过xmysql和postman的结合,能够提高接口测试效率,并充分保障接口的准确性。
下一条:postman如何使用
品质保证
多年的生产力软件专家
专业实力
资深技术支持项目实施团队
安全无忧
多位认证安全工程师
多元服务
软件提供方案整合,项目咨询实施
购软平台-找企业级软件,上购软平台。平台提供更齐全的软件产品、更专业的技术服务,同时提供行业资讯、软件使用教程和技巧。购软平台打造企业级数字产品综合应用服务平台。用户体验和数字类产品的专业化服务是我们不断追求的目标。购软平台您身边的企业级数字产品优秀服务商。