首页>软件资讯>常见问题

常见问题

Postman工具介绍

发布时间:2024-01-02 09:45:45人气:196


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基础操作

postman.png

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)

操作.png

通过postman调用get类型接口基础步骤(以查询用户接口为例):


1、打开postman,新建请求页;


2、在请求的URL中输入请求地址http://127.0.0.1:5000/users,选择请求方法GET;


3、点击Send按钮,这时就可以在下部的窗格中看到来自服务器的json响应数据。


服务器的json响应数据.png

通过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响应数据。

Send.png

2.2常用接口数据请求类型


url参数的接口请求


URL参数(Query Parameters):这些参数通常用于GET请求中,位于URL的末尾,以“?”或“&”分隔。在POST或PUT请求中,如果需要传递数据,则通常将这些数据编码为URL参数,并放在URL的主体中。(在url地址和params中填写参数是一样的效果)

url参数的接口请求.png

表单类型的接口请求


form-data:它是HTTP请求中的multipart/form-data,会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。它既可以上传键值对,也可以上传文件。

表单类型的接口请求.png

x-www-form-urlencoded:它是application/x-www-from-urlencoded,会将表单内的数据转换为键值对。

表单类型的接口请求2.png

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接口测试工具的高级用法

下一条:postman如何使用