postman 是一个用于构建和使用 API 的 API 平台。Postman 简化了 API 生命周期的每个步骤并简化了协作,可以更快地创建更好的 API。

官网下载:https://www.postman.com/downloads/

脚本

Postman包含一个基于Node.js的强大的运行时,允许您向请求和分组添加动态行为,这允许您编写测试套件,构建可以包含动态参数的请求,在请求之间传递数据等等。

执行流程的2个脚本事件:

  • pre-request script:请求前脚本,在请求接口前执行
  • test script:测试脚本,在请求接口并响应数据后执行

ps:可以添加JavaScript代码来执行流程中的这2个事件

脚本的执行顺序:

每一个接口请求,脚本都会按照如上顺序执行。

为什么postman可以执行JavaScript代码?

因为Postman Sandbox(沙箱),是一个JavaScript执行环境,可以在为请求编写预请求和测试脚本时使用(在Postman和Newman都是如此),无论您在这些部分中编写什么代码,都将在这个沙箱中执行。

pre-request script

请求前脚本,可以在Postman请求接口之前使用pre-request script执行JavaScript

即可以在分组、文件夹或请求接口的pre-request script选项卡中编写JavaScript代码,进行预处理。(譬如:设置变量值、参数、头和正文数据,还可以使用预请求脚本进行调试代码,如将输出记录到控制台)

pre-request script选项的位置

  • collectionpre-request script选项
  • folderpre-request script选项
  • requestpre-request script选项

test script

测试脚本,在Postman发送接口请求响应时执行,可以为每个请求添加所需的任何测试。

当向分组(collection)中添加测试时,测试将在分组中的每个请求响应后执行。

test script选项的位置

  • collectiontest script选项
  • foldertest script选项
  • requesttest script选项

断言测试

测试脚本可以检测请求响应的各个方面,包括正文、状态代码、头、cookie、响应时间等,只有测试符合自定义的要求后才能通过。

测试状态码

pm.test("Status code is 200", function() {pm.response.to.have.status(200);
});
pm.test("Status code is 200", function() {pm.expect(pm.response.code).to.eql(200);
});

测试响应时间,是否在指定范围内

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

测试脚本也可以包含多个断言作为单个测试的一部分,你可以将相关断言组合在一起。如果包含的任一个断言失败,整个测试将失败,所有断言都必须成功,测试才能通过

pm.test("The response has all properties", () => {const responseJson = pm.response.json(); //将响应体body转换成JSON格式pm.expect(responseJson.type).to.eql('vip'); // type等于vippm.expect(responseJson.name).to.be.a('string'); // name值的类型为string类型pm.expect(responseJson.id).to.have.lengthof(1); // id的长度为1
}

解析响应体

为了在响应中执行断言,首先需要将数据解析为断言可以使用的JavaScript对象。

  1. 解析JSON
const responseJson = pm.response.json();
  1. 解析xml
const responseXml = xml2Json(pm.response.text());
  1. 解析csv
const parse = require('csv-parse/lib/sync');
const responseCsv = parse(pm.response.text());
  1. 解析HTML
const $ = cheerio.load(pm.response.text());
console.log($.html());

如果不解析成JavaScript对象是不是就不可以断言?当然不是,也可以不解析响应体断言。

// 测试响应体是否包含某个字符串
pm.test("Body contains string", () => {pm.expect(pm.response.text()).to.include("customer_id");
}

控制台调试

当你在测试脚本中遇到错误或意外行为时,postman控制台可以帮助你识别,通过将console.log调试语句与你的测试断言相结合,你可以检查http请求和响应的内容,以及变量之类的postman数据项。

通常可以使用控制台日志来标记代码执行,有时也称为“跟踪语句”。

if (pm.response.json().id) {console.log("id was found!");
} else {console.log("no id ...");
}

也可以异步进行测试

pm.sendRequest("https://postman-echo.com/get", function (err, response) {console.log(response.json());
});

设置cookie

// create a cookie jar
const cookieJar = pm.cookies.jar();cookieJar.set(URL,{name: cookie name,value: cookie value,httpOnly: true
}, callback (error, cookie));cookieJar.get(URL, cookie name, callback(error, cookie);// get the created cookies
cookieJar.getAll(URL, callback(error, cookies));// Delete the created cookie
cookieJar.unset(URL , cookie name, callback (error));// delete the set cookies
cookieJar.clear(URL, callback (error));

参数变量

我们可以把不固定的值进行变量化,方便管理和修改;变量可以在请求url、参数、请求头、授权和请求头预设中使用。当鼠标悬停在一个变量上时,可以看到该变量当前状态的概括,在请求中键入变量时,postman将提示你输入当前定义的任何变量;若变量未解析,则postman将用红色高亮显示该变量。

参数变量位置:

  • collection环境参数
  • Global全局环境参数
  • Environment独立环境参数

参数的使用:使用{{}}双花括号来引用变量

ps:新建的request请求需要保存到postman才能引用变量,对于分组环境中的变量需要保存到指定的分组中,否则是不可见的!!!

优先级: 不同环境下的同名参数,获取该参数时,会根据优先级获取!!!
environment(独立环境) -> collectionVariables(分组环境) -> globals(全局环境)

动态参数

官网文档:https://learning.postman.com/docs/writing-scripts/script-references/variables-list/

postman也内置动态参数(postman自带不需要进行任何设置)

  • 时间戳:{{$timestamp}}
  • 生成0-1000的随机整数:{{$randomInt}}
  • 生成一个GUID的字符串:{{$guid}}
  • 生成一个随机UUID:{{$randomUUID}}

参数变量设置

  1. 设置分组环境参数
pm.collectionVariables.set("varibale_key", "varibale_value");
  1. 设置全局环境参数
pm.globals.set("variable_key", "variable_value");
  1. 设置独立环境参数
// 设置环境变量
pm.environment.set("variable_key", "variable_value");// 删除环境变量
pm.environment.unset("variable_key");

只有当前环境有效,切换其他独立的环境是没有设置的,所有独立环境互不干扰!!!

参数变量使用查看

使用示例:

例如:在请求认证设置中引用一个名为“username”的变量,你可以使用以下语法

{{username}}

当运行请求时,postman将解析该变量并将其替换为其当前值。

例如:在请求接口时携带参数

http://pricey-trilby.glitch.me/customer?id={{cust_id}}

当请求运行时,Postman 将发送当前为 cust_id 变量存储的任何值。

或者,也可以在一个请求体,通过双引号包装变量的引用来访问变量

{"customer_id": "{{cust_id}}"}

脚本获取变量:

pm.variables.get("variable_key"); //获取变量(包括全局,集合、当前环境的变量),不能跨集合pm.globals.get("variable_key"); //获取全局环境的变量pm.collectionVariables.get("variable_key"); //获取集合(收藏夹)环境的变量pm.environment.get("variable_key"); //获取当前选中的环境的变量

查看参数变量:

Postman | JS脚本和动态参数的使用相关推荐

  1. 动态加载JS脚本的4种方法

    动态加载JS脚本的4种方法 2006-12-04 15:33 要实现动态加载JS脚本有4种方法: 1.直接document.write <script language="javasc ...

  2. 动态加载JS脚本【转】

    原文:http://mario-design.iteye.com/blog/147810 要实现动态加载JS脚本有4种方法: 1.直接document.write <script languag ...

  3. Kettle的使用分享~动态参数~JS脚本~多文本文件输入

    Kettle设置参数 通过js脚本设置参数变量并进行赋值,让参数变得可动态变化,便于后期定时任务的执行 生成记录 添加一个"输入->生成记录"对象,用于变量的声明 javas ...

  4. postman 动态参数设置

    postman 动态参数设置 1.设置动态参数 2.生成参数脚本代码

  5. PostMan动态参数及循环调用

    最近需要在测试环境批量创建es索引,也就是某个接口需要循环调用且参数还是变化的,但是我又不想写代码和脚本,于是研究了一下postman一些好玩的功能,希望能节约大家的开发时间 一.设置请求参数 1.获 ...

  6. 动态引入/添加js脚本

    前言 动态添加脚本到页面中 动态引入/添加js脚本 var script=document.createElement("script"); script.type="t ...

  7. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

  8. js脚本捕获页面 GET 方式请求的参数?其实直接使用 window.location.search 获得

    js脚本捕获页面 GET 方式请求的参数?其实直接使用 window.location.search 获得 转载于:https://www.cnblogs.com/yangai/p/7212248.h ...

  9. Postman进阶篇动态参数、自定义动态参数及自定义动态参数全局变量断言

    postman全局变量设置动态参数 1.内置动态参数 2.自定义动态参数设置全局变量 3.自定义动态参数断言(精确断言) 1.内置动态参数 多接口关联时遇见传参数是动态的,这个时候给接口关联设置全局变 ...

最新文章

  1. js 闭包 实战1
  2. JSP内置对象-config
  3. 用netstat查看网络状态详解
  4. 面试官:我想用Nginx提升系统10倍性能,你有哪些建议?
  5. GlassFish新纪元
  6. 微服务、容器、DevOps三者之间的演进关系,你清楚吗?
  7. new和delete
  8. [ZZ] 使用rsync来实现快速删除大量文件
  9. leetcode112 路径总和
  10. 最简单的moss单点登录第三方系统,有点非主流
  11. 【BZOJ1934】【codevs2341】善意的投票,二分图最小割
  12. 我的内核学习笔记2:platform设备模型
  13. Python Windows安装
  14. vue ---- ref
  15. Sentinel 实战-控制台篇
  16. 01-SQL基本语句
  17. 来了来了,2020 首场 Meetup ,可!
  18. 上海交通大学考研网络安全专业823复习策略
  19. NLP NLU NLG 简介
  20. android之计时器chronometer

热门文章

  1. eagle转载自乐视大数据部高级hadoop工程师蔡华宇
  2. 图片判断左脑发达还是右脑发达
  3. 基于php的乐山旅游攻略网站
  4. 聚焦新Flipboard打造自己的杂志
  5. 是指用计算机帮助各类,电子商务师三级试题
  6. 新闻|智链万源CEO董宁受邀参加2019可信区块链峰会,解读溯源行业标准
  7. 求解(树的子结构问题-何海涛100题)
  8. 这个夏天,有些东西需要记忆
  9. 2015——致我那终将逝去的青春
  10. 谢家华:汇报和上报是敏捷的敌人