当前位置: 首页 > news >正文

用Postman实现自动化接口测试

主要功能

软件入口

  1. workplaces:工作区
  2. collections:集合
  3. environment:环境
  4. request:接口请求的最小单位

Request

  1. 地址栏:输入URL
  2. Params:参数列表,一般get请求用到
  3. Authorization:鉴权,collections和request中都有,控制范围不一样
  4. header:请求头
  5. Body:请求体
  6. 发送Json数据: Raw->json
  7. 发送Form表单: x-www-form-urlencoded
  8. 发送文件:form-data
  9. Script:脚本
  10. Setting:配置
  11. Cookies:缓存

Run Collection

Iterations 可以控制发送请求的数量

生成测试报告时,可以打开runner->persist responses for a session,查看生成报告的响应内容

内置对象

介绍

Postman 在执行请求时自动注入的全局对象,无需手动定义

主要内置对象

  • pm.globals 全局变量
  • pm.environment 环境变量
  • pm.collectionVariables 集合变量(pm9.0+)
  • pm.variables 临时变量/局部变量
  • Pm.response 处理响应数据,仅限tests脚本
  • Pm.interationdata 访问集合运行时的外部数据(如csv)
  • Pm.visualizar 在 Visualize 选项卡中渲染可视化HTML/图表
  • Pm.info 请求元数据
  • Pm.sendRequest 发送异步请求
  • Pm.requests 直接控制底层请求引擎(如超时、代理等)

Pm.response

  • pm.response.to.have.status(code)

验证状态码(如 200、404)。

  • pm.response.to.have.header(key)

验证响应头是否存在。

  • pm.response.to.be.json

验证响应体是否为 JSON。

  • pm.response.to.include.json(key)

验证 JSON 响应中是否包含指定字段。

Pm.collectionVariables

  • pm.collectionVariables.get("key")
  • pm.collectionVariables.set("key", "value")

内置变量对象的作用域优先级

Globals<environmet<collectionVariables<variables

示例

// 从存储中获取 JSON 字符串并解析为对象const testCases = JSON.parse(pm.variables.get("testCases"));
  • pm.variables.get("testCases")
    获取名为 "testCases" 的变量值(可能是之前通过 pm.variables.set() 存储的)。
  • JSON.parse()
    将字符串(如 '[{"dataId":1,"expectedCode":0}]')解析为 JavaScript 对象。
  • const testCases
    声明一个常量,存储解析后的对象,防止后续代码意外修改它。

变量存储

内置动态变量

https://postman.xiniushu.com/docs/writing-scripts/script-references/variables-list

原创文章,请勿转载:

https://blog.csdn.net/qq_33562122/article/details/151761769

脚本

postman使用的是nodeJs,原生支持是JavaScript,不支持其他语言

JavaScript基础

数据类型

Number:64位浮点数,取值范围±2^53 - 1,大数要用bigInt,在数字末位加n,或直接转成字符串类型存储。

String:双引号包裹,取值范围:无固定上限,受内存限制。

Boolean: 取值范围:true/false

Null:空对象指针,取值范围:null

Undefined:未初始化,取值范围:undefined

Symbol:唯一且不可变的值,对象属性键

BigInt(ES2020):表示任意精度的整数

Set:唯一值集合,去重

Map:键值对集合,键可为任意类型

JavaScript-chai语法

声明变量:使用 var、let 或 const 声明变量

特性

var

let

const

作用域

函数作用域

块级作用域

块级作用域

变量提升

是(undefined)

是(未初始化)

是(未初始化)

可重复声明

可重新赋值

适用场景

旧代码兼容

循环、临时变量

常量、固定值

执行顺序

Collections pre-requests -> requests pre-requests -> collections post-response ->requests post-response

常用的 JavaScript 内置方法

Postman 的测试脚本(Pre-request Script/Tests)基于 JavaScript,支持以下核心方法:

1. JSON 处理

  • JSON.stringify(obj)
    • 将对象转为 JSON 字符串

用途:数据存储、Api请求、调试):

基本语法

Json.stringify(value, replacer?, space?)

value:要转换的 JavaScript 对象或值。

replacer(可选):过滤或修改属性的函数或数组。

space(可选):缩进空格数(用于美化输出)。

const data = { name: "Alice", age: 25 };
pm.environment.set("userData", JSON.stringify(data));
  • JSON.parse(str)
    • 将 JSON 字符串转为对象(如解析响应体):
const response = pm.response.json(); // 直接解析(Postman 封装方法)
// 或手动解析
const jsonStr = pm.response.text();
const parsedData = JSON.parse(jsonStr);

2. 断言测试

  • pm.test(description, callback)
pm.test("Status code is 200", () => {
pm.response.to.have.status(200);
});
  • pm.expect(value).to.method()
    • 链式断言(支持 equal、include、exist 等):
       
pm.expect(pm.response.json()).to.have.property("token");pm.expect(res.code).to.be.a('number');pm.expect(res.code,`current code is ${res.code},is not ${code}`).to.eql(code);pm.expect(res.msg).to.eql('success')

3. 环境变量操作

  • pm.environment.get(key) / pm.environment.set(key, value)
  • 读写环境变量:
pm.environment.set("token", "abc123");
const token = pm.environment.get("token");

4. 日期与时间

  • Date 对象
    • 生成时间戳或格式化日期:
const now = new Date();
console.log(now.toISOString()); // 输出 ISO 格式时间

5. 字符串与数组操作

  • 字符串方法:includes()、split()、join() 等。
const str = "hello,world";
console.log(str.split(",")); // ["hello", "world"]
  • 数组方法:push()、pop()、map()、filter() 等。
const arr = [1, 2, 3];
const doubled = arr.map(x => x * 2); // [2, 4, 6]

    6. 数学运算

    • Math 对象:生成随机数、四舍五入等。
    const randomNum = Math.floor(Math.random() * 100); // 0-99 随机整数

    7. 异步请求(Postman 特有)

    • pm.sendRequest(url, callback)
      发送自定义请求并处理响应:

      javascript
    pm.sendRequest("https://api.example.com/data", (err, res) => {if (err) console.error(err);else console.log(res.json());
    });

    8.正则表达式

    Match()

    示例:获取请求中的dataId的number类型值

    const url = pm.request.url.toString()const dataId = parseInt(url.match(/dataId=(\d+)/)[1]);

    9.字符串插值

    动态变量

    pm.variables.replaceIn('{{$timestamp}}')

    字符串插值(用反引号)

    `current msg is ${res.msg},is not ${msg}`

     原创文章,请勿转载:

    https://blog.csdn.net/qq_33562122/article/details/151761769

    10.其他

    查找对象中的列表

    const testCases = JSON.parse(pm.variables.get("testCases"));// 找到当前dataId对应的预期结果const testCase = testCases.find(item => item.dataId === dataId);if(!testCase){throw new Error('No test case defined for dataId= ${dataId}');}

    获取对象的数据类型

    对象.type

    接口测试协作规范

    1.    组建团队workplaces,提高效率和协作性(建议)
    2.    按接口的模块分类collections,提高可维护性。暂时亦可按测试人员构建接口集。
    3.    按按测试环境和开发环境配置配置environments
    4.    除调试外,地址和参数应做好request的参数化
    5.    变量按照最小原则存储,避免冲突
    6.    header只需要content-type和authorition,其他不是必须的,保持最小原则
    7.    鉴权使用authorition管理,放置到collection->Authrizaton中。
            i.    Auth Type =Oauth 2.0
            ii.    Add auth data to =request data
            iii.    Token = Token值
    8.    params不要直接写地址栏上,写在params中
    9.    按照测试用例把测试用例插入到Script中 
    10.    断言错误输出应具体清晰
    11.    变量使用小驼峰命名法


    文章转载自:

    http://KzQ3Fyv3.hdtcj.cn
    http://1qtjgh7V.hdtcj.cn
    http://T81k4VkJ.hdtcj.cn
    http://kBzNTL7m.hdtcj.cn
    http://HgNML2of.hdtcj.cn
    http://CWbtu3TI.hdtcj.cn
    http://55X0tCos.hdtcj.cn
    http://7bwOSZtN.hdtcj.cn
    http://BBgMFGB9.hdtcj.cn
    http://vUCs8TGf.hdtcj.cn
    http://8xss8RS0.hdtcj.cn
    http://rqLzlnVr.hdtcj.cn
    http://Knb80pfd.hdtcj.cn
    http://r96KgtGV.hdtcj.cn
    http://ngXZ1dxB.hdtcj.cn
    http://jJNda8db.hdtcj.cn
    http://zQhQKC9O.hdtcj.cn
    http://HaXGJ3mo.hdtcj.cn
    http://eKkDlnMh.hdtcj.cn
    http://FPrcKHe5.hdtcj.cn
    http://vXUvF7pd.hdtcj.cn
    http://aBqqSrbW.hdtcj.cn
    http://qFtmUuuH.hdtcj.cn
    http://NxxIim4E.hdtcj.cn
    http://cAdgYDEp.hdtcj.cn
    http://U3fnLPXE.hdtcj.cn
    http://KA2K0yIK.hdtcj.cn
    http://vuGnbYDM.hdtcj.cn
    http://7c3cNBeg.hdtcj.cn
    http://C0l5N7Mv.hdtcj.cn
    http://www.dtcms.com/a/386080.html

    相关文章:

  • Hyper Rust HTTP 库入门教程
  • 软考系统架构设计师之软件架构评估法-ATAM
  • 贪心算法应用:图着色问题(顶点着色)
  • 基于51单片机的电子琴弹奏及播放系统
  • 守护每一滴水的清澈与安全
  • Python入门教程之成员运算符
  • 简易BIOS设置模拟界面设计
  • Git教程:常用命令 和 核心原理
  • Tomcat Session 管理与分布式方案
  • 声纹识别技术深度剖析:从原理到实践的全面探索
  • 第6章串数组:特殊矩阵的压缩存储
  • 多账号矩阵管理再也不复杂
  • 电商接口之电子面单API接口对接以及调用:以快递鸟为例
  • Ubuntu22.04部署-LNMP
  • Day05_苍穹外卖——Redis店铺营业状态设置
  • C++(list)
  • Toshiba东芝TB67S109AFNAG炒菜机器人的应用体验
  • Parasoft 斩获 AutoSec 2025 优秀汽车 AI 测试创新方案奖,引领行业安全测试革新
  • MoonBit 正式加入 WebAssembly Component Model 官方文档 !
  • 【线性代数:代数余子式】
  • 基于一种域差异引导的对比特征学习的小样本故障诊断方法
  • k8s pod优雅滚动更新实践
  • Day43 嵌入式 中断、定时器与串行通信
  • Flink框架中的窗口类别:时间窗口、计数窗口
  • PayPal将加密货币整合到点对点支付中,打通Web2与Web3?
  • 正则表达式学习
  • IP 打造:如何长期保持表达动力与热情?
  • 网站使用独立ip有什么好处
  • 【保姆级喂饭教程】MySQL修改用户对应IP范围
  • Linux内存管理章节十六:非均匀的内存访问:深入Linux NUMA架构内存管理