官方语法例子:https://learning.postman.com/docs/writing-scripts/script-references/test-examples/

官方语法库:https://www.chaijs.com/api/bdd/

官方动态变量库:Dynamic variables | Postman Learning Center

一、基础语法使用

变量生效顺序,本地变量》迭代变量》环境变量》集合变量》全局变量,具有最接近作用域的变量将覆盖任何其他变量

1、pm.variables:操作变量

 //括号里”变量名“必须是字符串,下面的变量名都是如此
pm.variables.has("变量名") //是否存在该变量,返回是boolean类型
pm.variables.get(”变量名“) //获取该变量的值
pm.variables.set(”变量名“, 任意类型的变量值) //设置变量
pm.variables.replaceIn(”变量名“) //返回脚本中动态变量的值
pm.variables.toObject() //返回一个对象,其中包含当前作用域中所有变量及其值。根据优先级顺序,这将包含来自多个作用域的变量。

2、pm.envrionment:操作环境变量

pm.environment.nam //获取当前活动的环境名字
pm.environment.has("变量名") //是否存在该环境变量,返回是boolean类型
pm.environment.get(”变量名“) //获取该环境变量的值
pm.environment.set(”变量名“, 任意类型的变量值) //设置环境变量
pm.environment.unset(”变量名“) //删除该环境变量
pm.environment.clear() //清除所有环境变量
pm.environment.replaceIn(”变量名“) //返回脚本中动态变量的值
pm.environment.toObject() //返回一个对象,其中包含当前作用域中所有变量及其值。根据优先级顺序,这将包含来自多个作用域的变量。

3、pm.collectionVariables:操作集合变量

pm.collectionVariables.has("变量名")   //是否存在该集合变量,返回是boolean类型
pm.collectionVariables.get(”变量名“) //获取该集合变量的值
pm.collectionVariables.set(”变量名“, 任意类型的变量值) //设置集合变量
pm.collectionVariables.unset(”变量名“) //删除该集合变量
pm.collectionVariables.clear() //清除所有集合变量
pm.collectionVariables.replaceIn(”变量名“) //返回脚本中动态变量的值
pm.collectionVariables.toObject() //返回一个对象,其中包含当前作用域中所有变量及其值。根据优先级顺序,这将包含来自多个作用域的变量。

4、pm.globals:操作全局变量

pm.globals.has("变量名")   //是否存在该全局变量,返回是boolean类型
pm.globals.get(”变量名“) //获取该全局变量的值
pm.globals.set(”变量名“, 任意类型的变量值) //设置全局变量
pm.globals.unset(”变量名“) //删除该全局变量
pm.globals.clear() //清除所有全局变量
pm.globals.replaceIn(”变量名“) //返回脚本中动态变量的值
pm.globals.toObject() //返回一个对象,其中包含当前作用域中所有变量及其值。根据优先级顺序,这将包含来自多个作用域的变量。

5、pm.iterationData:操作迭代变量

pm.iterationData .has("变量名")   //是否存在该迭代变量,返回是boolean类型
pm.iterationData .get(”变量名“) //获取该迭代变量的值
pm.iterationData.unset(”变量名“) //删除迭代变量
pm.iterationData .toJSON(”变量名“) //将 iterationData 对象转换为 JSON 格式
pm.iterationData .toObject() //返回一个对象,其中包含当前作用域中所有变量及其值。根据优先级顺序,这将包含来自多个作用域的变量。

6、pm.request:操作请求数据

pm.request.url
pm.request.headers
pm.request.method
pm.request.body
pm.request.headers.add(header:Header)
pm.request.headers.remove(headerName:String)
pm.request.headers.upsert({key: headerName:String, value: headerValue:String}) //更新现有headernanme的字段值

7、pm.respnose:操作响应数据

pm.response.code
pm.response.status
pm.response.headers
pm.response.responseTime
pm.response.responseSize
pm.response.text():Function → String
pm.response.json():Function → Object

8、pm.info:操作当前事件信息输出

pm.info.eventName  //放在Test里就显示”test“,在Pre-request就显示”pre-request“
pm.info.iteration //当前迭代的变量值
pm.info.iterationCount //该请求或者集合计划迭代的次数
pm.info.requestName //正在运行的请求名称
pm.info.requestId //正在运行的请求的唯一 GUID

9、pm.cookies:操作cookie

pm.cookies.has(cookieName:String):Function → Boolean
pm.cookies.get(cookieName:String):Function → String
pm.cookies.toObject():Function → Object 使用指定用于访问请求 Cookie 的域。pm.cookies.jar
pm.cookies.jar():Function → Object
//使用名称和值设置 Cookie:
jar.set(URL:String, cookie name:String, cookie value:String, callback(error, cookie)):Function → Object //使用PostmanCookie或兼容对象设置 Cookie
jar.set(URL:String, { name:String, value:String, httpOnly:Bool }, callback(error, cookie)):Function → Object
例如:
const jar = pm.cookies.jar();
jar.set("httpbin.org", "session-id", "abc123", (error, cookie) => {
if (error) {
console.error(`An error occurred: ${error}`);
} else {
console.log(`Cookie saved: ${cookie}`);
}
}); //获取cookie
jar.get(URL:String, cookieName:String, callback (error, value)):Function → Object //获取所有cookie
jar.getAll(URL:String, callback (error, cookies)):Function //删除cookie
jar.unset(URL:String, token:String, callback(error)):Function → Object //清除cookie
jar.clear(URL:String, callback (error)):Function → Object

10、pm.sendRequest:可以使用该方法从预请求或测试脚本异步发送请求

// Example with a plain string URL
pm.sendRequest('https://postman-echo.com/get', (error, response) => {
if (error) {
console.log(error);
} else {
console.log(response);
}
}); // Example with a full-fledged request
const postRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',
header: {
'Content-Type': 'application/json',
'X-Foo': 'bar'
},
body: {
mode: 'raw',
raw: JSON.stringify({ key: 'this is json' })
}
};
pm.sendRequest(postRequest, (error, response) => {
console.log(error ? error : response.json());
}); // Example containing a test
pm.sendRequest('https://postman-echo.com/get', (error, response) => {
if (error) {
console.log(error);
} pm.test('response should be okay to process', () => {
pm.expect(error).to.equal(null);
pm.expect(response).to.have.property('code', 200);
pm.expect(response).to.have.property('status', 'OK');
});
});

11、postman.setNextRequest:设置集合工作流,在当前请求之后运行指定的请求(集合中定义的请求名称,例如"获取客户")

//通过请求名字或者请求ID进行下一步的请求
postman.setNextRequest(requestName:String):Function
postman.setNextRequest(requestId:String):Function
//停止工作流
postman.setNextRequest(null);

12、脚本可视化

pm.visualizer.set(layout:String, data:Object, options:Object):Function  //layout必选,其他两个参数自选
//例子
var template = `<p>{{res.info}}</p>`;
pm.visualizer.set(template, {
res: pm.response.json()
}); pm.getData(callback):Function //用于检索可视化模板字符串中的响应数据
//例子
pm.getData(function (error, data) {
var value = data.res.info;
});
//回调函数接受error和data两个参数,error传递任何错误信息,data传递数据到pm.visualizer.set

13、pm.test:断言

测试检查响应是否有效
pm.test("response should be okay to process", function () {
pm.response.to.not.be.error;
pm.response.to.have.jsonBody('');
pm.response.to.not.have.jsonBody('error');
}); 可选的回调可以传递给 ,以测试异步函数
pm.test('async test', function (done) {
setTimeout(() => {
pm.expect(pm.response.code).to.equal(200);
done();
}, 1500);
}); pm.test.index():Function → Number //在代码中获取从特定位置执行的测试总数

二、断言和语法例子

输出变量值或者变量类型,打印日志

console.log(pm.collectionVariables.get("name"));
console.log(pm.response.json().name);
console.log(typeof pm.response.json().id);

if (pm.response.json().id) {
console.log("id was found!");
// do something
} else {
console.log("no id ...");
//do something else
}
//for循环读取
for(条件){
语句;
}

状态码检测:

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

多个断言作为单个测试的结果:

pm.test("The response has all properties", () => {
//parse the response JSON and test three properties
const responseJson = pm.response.json();
pm.expect(responseJson.type).to.eql('vip');
pm.expect(responseJson.name).to.be.a('string');
pm.expect(responseJson.id).to.have.lengthOf(1);
});

不同类型的返回结果解析

//获取返回的json数据
const responseJson = pm.response.json();
//将number转换为JSON格式
JSON.stringify(pm.response.code)
//将json数据转换为数组
JSON.parse(jsondata)
//获取xml数据
const responseJson = xml2Json(pm.response.text());
//获取csv数据
const parse = require('csv-parse/lib/sync');
const responseJson = parse(pm.response.text());
//获取html数据
const $ = cheerio.load(pm.response.text());
//output the html for testing
console.log($.html());

直接处理未解析的返回数据,使用include

pm.test("Body contains string",() => {
pm.expect(pm.response.text()).to.include("customer_id");
}); pm.test("Body is string", function () {
pm.response.to.have.body("whole-body-text");
});

测试响应正文reponseBody中的特定值

pm.test("Person is Jane", () => {
const responseJson = pm.response.json();
pm.expect(responseJson.name).to.eql("Jane");
pm.expect(responseJson.age).to.eql(23);
});
//获取响应正文
responseBody
pm.response.text()

测试某个值是否为集合中的一种,使用oneof

pm.test("Successful POST request", () => {
pm.expect(pm.response.code).to.be.oneOf([201,202]);
});

测试响应header

//测试响应头是否存在
pm.test("Content-Type header is present", () => {
pm.response.to.have.header("Content-Type");
});
//测试响应头的特定值
pm.test("Content-Type header is application/json", () => {
pm.expect(pm.response.headers.get('Content-Type')).to.eql('application/json');
});

//获取响应头”Server“数据
  postman.getResponseHeader("Server")

测试cookie

//测试是否存在相应的cookie
pm.test("Cookie JSESSIONID is present", () => {
pm.expect(pm.cookies.has('JSESSIONID')).to.be.true;
});
//测试该cookie是否等于特定值
pm.test("Cookie isLoggedIn has value 1", () => {
pm.expect(pm.cookies.get('isLoggedIn')).to.eql('1');
});

测试响应时间是否在范围内,使用below

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

测试reponsebody中某个值和某个变量的值一致

pm.test("Response property matches environment variable", function () {
pm.expect(pm.response.json().name).to.eql(pm.environment.get("name"));
});

测试响应数据的类型

/* response has this structure:
{
"name": "Jane",
"age": 29,
"hobbies": [
"skating",
"painting"
],
"email": null
}
*/
const jsonData = pm.response.json();
pm.test("Test data type of the response", () => {
pm.expect(jsonData).to.be.an("object");
pm.expect(jsonData.name).to.be.a("string");
pm.expect(jsonData.age).to.be.a("number");
pm.expect(jsonData.hobbies).to.be.an("array");
pm.expect(jsonData.website).to.be.undefined;
pm.expect(jsonData.email).to.be.null;
});

测试数据为空,或者包含特定项

/*
response has this structure:
{
"errors": [],
"areas": [ "goods", "services" ],
"settings": [
{
"type": "notification",
"detail": [ "email", "sms" ]
},
{
"type": "visual",
"detail": [ "light", "large" ]
}
]
}
*/ const jsonData = pm.response.json();
pm.test("Test array properties", () => {
//errors array is empty
pm.expect(jsonData.errors).to.be.empty;
//areas includes "goods"
pm.expect(jsonData.areas).to.include("goods");
//get the notification settings object
const notificationSettings = jsonData.settings.find(m => m.type === "notification");
pm.expect(notificationSettings).to.be.an("object", "Could not find the setting");
//detail array should include "sms"
pm.expect(notificationSettings.detail).to.include("sms");
//detail array should include all listed
pm.expect(notificationSettings.detail).to.have.members(["email", "sms"]);
});

断言对象包含键、属性

pm.expect({a: 1, b: 2}).to.have.all.keys('a', 'b');
pm.expect({a: 1, b: 2}).to.have.any.keys('a', 'b');
pm.expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');
pm.expect({a: 1}).to.have.property('a');
pm.expect({a: 1, b: 2}).to.be.an('object').that.has.all.keys('a', 'b');

断言值为父对象的一部分,使用deep,数据里嵌套的数据不会被检查到

/*
response has the following structure:
{
"id": "d8893057-3e91-4cdd-a36f-a0af460b6373",
"created": true,
"errors": []
}
*/ pm.test("Object is contained", () => {
const expectedObject = {
"created": true,
"errors": []
};
pm.expect(pm.response.json()).to.deep.include(expectedObject);
});

断言选定的测试活动环境

pm.test("Check the active environment", () => {
pm.expect(pm.environment.name).to.eql("Production");
});

断言响应结构

const schema = {
"items": {
"type": "boolean"
}
};
const data1 = [true, false];
const data2 = [true, 123]; pm.test('Schema is valid', function() {
pm.expect(tv4.validate(data1, schema)).to.be.true;
pm.expect(tv4.validate(data2, schema)).to.be.true;
});

常见断言错误分析

//问题:AssertionError: expected <value> to deeply equal '<value>'
//原因:相比较的双方类型不一致导致,如字符串和数字对比
pm.expect(1).to.eql("1"); //例子

//问题:ReferenceError: jsonData is not defined
//原因:引用尚未声明或超出测试代码范围的 JSON 对象时,通常会发生这种情况
pm.test("Test 1", () => {
const jsonData = pm.response.json();
pm.expect(jsonData.name).to.eql("John");
}); //正确操作例子
pm.test("Test 2", () => {
pm.expect(jsonData.age).to.eql(29); // jsonData is not defined
});
//错误操作例子

//问题:AssertionError: expected undefined to deeply equal..
//原因:断言的属性未定义错误
pm.expect(jsonData.name).to.eql("John"); //该jsonData.name未被定义,出现AssertionError: expected undefined to deeply equal 'John'namejsonData

 

发送异步请求

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

postman脚本语法大全,不包括插件语法的更多相关文章

  1. Inno Setup脚本语法大全

    Inno Setup脚本语法大全 ResourceShare Bruce 11个月前 (10-28) 6136浏览 0评论   Inno Setup 是什么?Inno Setup 是一个免费的 Win ...

  2. freemarker(FTL)常见语法大全

    [转载]freemarker(FTL)常见语法大全 FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}  ${boo ...

  3. MYSQL 语法大全自己总结的

    mysql语法大全 --------数据链接---------------------数据库服务启动net start mysql --关闭服务net stop mysql --登录 -u,-p后面不 ...

  4. Swift入门教程:基本语法大全

    原文:Swift入门教程:基本语法大全       简介:                                                                        ...

  5. 【知识库】-数据库_MySQL常用SQL语句语法大全示例

    简书作者:seay 文章出处: 关系数据库常用SQL语句语法大全 Learn [已经过测试校验] 一.创建数据库 二.创建表 三.删除表 四.清空表 五.修改表 六.SQL查询语句 七.SQL插入语句 ...

  6. 轻量级jQuery语法高亮代码高亮插件jQuery Litelighter。

    <!DOCTYPE html><html><head><meta charset="UTF-8" /><title>jQ ...

  7. sublime 支持php语法错误提示的插件

    求一个好用的sublime 支持php语法错误提示的插件.我装过sublimelinter,但是有时候出现错误也不会提示. 可以试试http://cs.sensiolabs.org/ 这个看哦它有对应 ...

  8. Emmet语法大全手册

    这是基于官方手册整理制作的,因为那个手册网页打开很慢,所以就整理在这里了.以备不时之需. Syntax   Child: > nav>ul>li <nav> <ul ...

  9. JAVA正则表达式语法大全

    [正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n ...

  10. Razor语法大全(转)

    Razor语法大全 因为最近在看mvc的时候在学习Razor的发现了这个不错的博文,故转之. 本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078 ...

随机推荐

  1. clicknium-划时代的自动化

    说起UI自动化,selenium一直是不可替代的存在,它的安装量.百度数量已经奠定了它在自动化.爬虫等相关领域的霸主低位,可以说,只要涉及到UI自动化,选selenium就对了. 细数过往,相关的UI ...

  2. Autoit 制作上传工具完美版

    一. 制作上传器 在ui自动化过程中经常遇到需要上传的动作,我们可以使用input标签来送值,但这样不太稳定,所以建议使用autoit制作出来的exe工具. 下面就教大家如何制作上传器,如何使用吧! ...

  3. Vladik and fractions

    题目大意 给出 \(n\),求一组 \(x,y,z\) 满足 \(\frac 1x + \frac 1y + \frac 1z = \frac 2n\) 若不存在合法的解,输出 \(-1\) 其中 \ ...

  4. JZOJ 3293. 【SHTSC2013】阶乘字符串

    \(\text{Problem}\) 给定一个由前 \(n\) 个小写字母组成的串 \(S\). 串 \(S\) 是阶乘字符串当且仅当前 \(n\) 个小写字母的全排列(共 \(n!\) 种)都作为 ...

  5. 3D场景建模

    在这个虚拟现实的世界里,我们将会和你一起在云端构建属于自己的世界. 这里有一款3D场景编辑器可以让你在上面进行编辑.设计及渲染. 它是一个非常炫酷的软件,在这里,你可以尽情发挥你的想象力,创造出独一无 ...

  6. LeetCode-1220 统计元音字母序列的数目

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-vowels-permutation 题目描述 给你一个整数 n,请你帮忙统计一下我们 ...

  7. 23年用vuex进行状态管理out了,都开始用pinia啦!

    1 Vue2项目中,Vuex状态管理工具,几乎可以说是必不可少的了.而在Vu3中,尤大大推荐我们使用pinia(拍你啊)进行状态管理,咱得听话,用就完了. 使用之前我们来看一下,使用 pinia 给我 ...

  8. js控制关闭layui的switch开关

    <input class="switch" type="checkbox" lay-skin="switch" lay-filter= ...

  9. JOI 公園 (JOI Park)

    原题链接:AT2434 JOI 公園 (JOI Park) 写完之后看到题解区的三分吓了一跳 分析与解答 由于最终答案与边权有关,所以不妨考虑判断一条边是否会对答案有贡献. 记 \(dis\) 表示以 ...

  10. lg8365题解

    容易发现我们一定会先加后乘,使用调整法可以证明这个结论. 并且可以发现除了\(a_i\)值为\(1\)的数外(假设他们的\(a\)值和为\(s\)),其他的数最多只会选\(1\)个做加法操作(设如果其 ...