Postman相关知识点

2 阅读10分钟

什么是postman?

postman是一款免费的API测试工具,它支持各种HTTP请求类型和数据格式,并且能提供有用的功能。如自动化测试、集成测试、监视和文档编写;

HTTP的常用请求方法有哪些?

get:从服务器获取数据,get方法只是获取数据,并不会对服务器资源产生影响。请求参数通常会附加在URL的查询字符串中;

post:向服务器发送数据,通常用于提交表单数据或上传文件,如果请求成功服务器可能会更新或创建资源。与get方法相比post方法可以发送更多数据,并且请求的数据通常会放在请求体中。

put:更新服务器上的资源,通常用于更新特定资源的全部信息,put方法会用请求的数据来替换指定的URL中的资源

delete:删除服务器上的资源 `

get和post方法有哪些区别?

` GET和POST是HTTP协议中常见的两种请求方法; 数据传输方式:

  • GET:通过URL传递数据,数据在URL中可见,以键值对的形式出现在URL中,通过?分割URL和参数,通过&分割参数
  • POST:通过HTTP请求的body传递数据,数据不会出现在URL中,而是作为请求的一部分进行发送

数据传输大小不同:

  • GET:由于数据在 URL 中传递,所以传输的数据量有限制,一般在 2KB 到 8KB 之间,不同浏览器有不同的限制。
  • POST:由于数据作为请求的一部分,所以传输的数据量相对较大,一般没有大小限制。

安全性:

GET:因为数据在 URL 中可见,所以不适合传输敏感信息,如密码等。

POST:因为数据不会出现在 URL 中,所以相对更安全,适合传输敏感信息。

缓存:

GET:可以被浏览器缓存,会留下历史记录

POST:不会被浏览器缓存,不会留下历史记录。

幂等性:

GET:幂等,即对同一 URL 的多次请求会返回相同的结果。

POST:不幂等,即对同一 URL 的多次请求可能会返回不同的结果

总而言之:

get将参数暴露在地址栏,post没有,post相较get安全 get参数必须是urlencode编码数据,post可以是任意数据 get请求无法传输文件,post可以 get请求参数大小有限制,post没有

`

常见的响应状态码有哪些?

  • 200--OK:请求成功。通常用于get或post请求;
  • 404--Not Found:请求的资源没有找到。客户端请求不存在的资源;
  • 403--Forbidden:服务器拒绝请求,权限不足;
  • 500--Internal Server Error:服务器遇到错误,无法完成请求;
  • 302--Found:请求资源已临时移动到其他位置;
  • 401--Unauthorized:需要用户认证才能获取请求的资源;
  • 301--Moved Permanently:资源的请求已永久的移动到其他位置
  • 504--Gateway Timeout:网关超时,服务器作为网关或代理,未能及时从上游服务器获取响应

使用postman时如何使用断言?

对接口请求后的内容进行设置,如状态码,响应头,响应正文等信息进行断言操作,在设置时会给定一个预期结果,在发送请求后会得到一个实际结果,如果请求预期结果与响应的实际结果一致,则认为是成功的,否则是失败;

Postman断言方式一:postman自带断言,点击即可自动生成断言脚本。

  • 状态码断言
  • 响应时间断言
  • 响应头断言
  • 响应正文断言
  1. 判断当前的状态是不是200,是则通过,不是则返回fall报错
 pm.test("Status code is 200", function () {
  pm.response.to.have.status(200);});
  1. 判断多个状态码:POST请求是否成功
pm.test("Successful POST request", function () {
 pm.expect(pm.response.code).to.be.oneOf([201, 202300]);});

3.判断响应时间是否小于200s

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

4.检查是否包含Content-Type响应头

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

5.检查响应body等于指定字符串:

pm.test("Body is correct", function () {
 pm.response.to.have.body("response_body_string");});
  1. 检查 API 返回的 JSON 数据中,value 字段的值是不是100
pm.test("Your test name", function () {
 var jsonData = pm.response.json();
 pm.expect(jsonData.value).to.eql(100);});
  1. 验证响应体(Body)中是否包含某个指定的字符串
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search");});

Postman工具之collection测试集管理使用

Collection就是Postman的测试集

  1. 可以分项目。分模块的方式来管理多个接口;
  2. 可以对接口进行批量测试,多次测试;
  3. 可以将测试集合的接口导出,进行接口测试的转义
  4. 可以对前置脚本,后置断言,变量进行设置;

Postman参数化

变量参数化

  • 环境变量:UAT环境,SIT环境,测试环境
  • 变量:一般用于入参;当全局变量和局部变量同时有限使用局部变量;
  • 局部变量:一般使用局部变量;仅限于当前测试集才可以去进行使用
  • 全局变量:所有测试集都可以使用,但要确保所有测试集都能使用

文档参数化

  1. 确定数据以及断言的字段
  2. 准备数据:TXT.CSV:字段名数据
  3. 对应的参数去进行引用{{变量名}},一定要是文档当中的变量名
  4. 设置断言;data.变量名
  5. 通过测试集去运行(一定要提前保存)

1.避免重复劳动,提高脚本复用性

比如你要测试“用户登录”接口,需要测试 10 组不同的账号密码。如果不参数化:你需要在 Postman 里创建 10 个请求,或者手动修改 10 次数据。

使用参数化:只需写 1 个请求,把用户名、密码替换成 {{username}} 和 {{password}},然后让 Postman 自动循环读取文件里的 10 行数据执行。

2.实现数据与脚本分离,便于维护

测试逻辑(URL、Header、断言)放在请求里。

测试数据(用户名、手机号、订单ID等)放在外部文件中。

当数据变化时(如新增一批测试账号),只需修改 CSV/JSON 文件,完全不用动 Postman 的请求配置。这大大降低了维护成本。

3.支持批量数据驱动的测试

这是最常用的场景:用一组不同的输入验证同一个接口。

登录接口:验证正常登录、密码错误、账号不存在、账号被锁定等多种情况。

注册接口:验证短密码、特殊字符、已存在手机号等边界值。

参数化配合 Postman 的 Runner(集运行器),可以一键跑完所有用例,并看到每条数据的通过/失败结果。

4.模拟真实用户并发行为

在压力测试或集成测试时,如果每次请求都用同样的数据(如总是用 user1 登录),可能会遇到服务端缓存、幂等性拦截等问题。

通过参数化文件提供 100 个不同的用户数据,可以更真实地模拟多用户同时操作的场景。

5.生成动态报告,快速定位问题

当 Runner 执行完毕后,生成的报告会明确指出是哪一组数据(例如 CSV 的第 3 行)导致了断言失败,而不是笼统地说“某个请求失败了”。这有助于快速排查特定数据引起的问题。

Postman接口关联

多个接口之间存在数据依赖关系,后一个接口的请求参数需要从前面接口的响应结果中动态获取;简单来说就是上一个接口的输出结果,会作为下一个接口的输入结果;

比如:
登录接口:输入账号密码,服务器返回一个身份令牌(比如 `token`)
查询订单接口:你必须带上刚才那个 `token` 证明是你要查询订单

利用Postman提取:
//先拿到登录的token
var jsonData =pm.response.json()
var token =jsonData.data.token
或者:
pm.globals.set("token", pm.response.json().token)
//设置对应的变量,然后在后续请求中用 {{token}}引用变量。

为什么要使用接口关联

  1. 模拟真实业务场景:用户操作本身就是连续、有依赖的(如登录→下单→支付)
  2. 保证测试有效性:避免硬编码数据,动态获取的数据(如真实订单号)比写死的更可靠
  3. 实现自动化:脚本能自动传递数据,无需人工干预

Postman报告环境介绍

在实际工作场景中,测试完成之后,会编写一份测试报告。通过报告直观的查看接口的执行测试结果

  1. 先安装Nodejs
  2. 再安装Newman(基于Nodejs)
  3. 安装Html报告
安装Newman
找到Nondjs的路径,打开CMD,并输入:npm install -g newman
方法一: 进入到Nondjs的路径,在路径栏上输入CMD
方法二:直接打开CMD,输入:Nondjs的路径
安装完成后输入newman -v来检查是否安装成功
安装HTML插件
进入到Nondjs的路径,打开CMD,并输入:npm install -g newman-reporter-html

postman中如何导出报告

生成报告:
newman run <你的集合文件.json> \
  -e <你的环境文件.json> \   # 可选,如果没有环境文件则删除本行
  -d <你的数据文件.csv> \    # 可选,如果没有数据文件则删除本行
  -n <迭代次数>
  -r htmlextra,cli \         # 指定报告格式,cli是控制台输出
  -g #后面跟全局变量文件
  --reporter-htmlextra-export report.html  # 生成报告的文件名
Newman 命令参数讲解
run 后边跟具体的接口脚本
-e 等同于--environment: 后边跟环境变量文件
-g 等同于--globais 后面跟全局变量文件
-n 等同于--iteration-count:设置迭代次数 postman参数化迭代测试
-d 等同于--iteration-data:指定用于迭代的数据源文件
-r 等同于--reporters:后面跟数据结果,可以跟cli,html,json等
   cli:直接在命令行打印结果
   html:将结果生成为html文件,指定生成到具体的目录需要配合--reporter-html-export文件名使用
   json:将结果生成为json文件,指定生成到具体的目录需要配合--reporter-json-export文件名使用

不同报告格式:

报告格式命令中的格式名称主要用途
增强版 HTMLhtmlextra最推荐。生成样式精美、包含详细图表和请求/响应信息的报告,适合团队分享。
标准 HTMLhtml生成基础的 HTML 报告,样式简单。
JSONjson生成结构化数据,便于你编写脚本进行二次处理或分析。
JUnit/XMLjunit生成 XML 格式报告,可被 Jenkins、GitLab CI 等持续集成系统直接识别和展示。

接口关联如何解决?

在一个接口的响应中提取出需要传递给其他接口的关键数据,然后将这些数据传递到后续接口的请求中去。

1、创建环境变量或者全局变量:创建一个新的环境或者全局变量;

2、设置变量值:可以在上游接口中“Test”脚本来提取请求的响应数据,并将其保存在一个环境变量或全局变量中;

3、在下游接口请求中使用变量:在后续请求中,你以通过双括号引用之前设置的环境或全局变量,从而实现接口之间的数据依赖;