Postman 快速入门之脚本语法

Postman是访问各种API的客户端。它的强大之处在于其允许在对某一个request访问的之前和之后分别运行自定义的一段Javascript脚本,这样直接就完成了一个chain request的效果,可以将数条request连结成一个流程完成一体化测试。这在很多的API操作中都是极其有用的,所以这里有必要总结一些常用语句。

参考postman官方:Intro to scripts

Script workflow 脚本执行流程

在这里插入图片描述
collection pre-request script -> folder pre-request script -> request pre-request script -> collection test -> folder test script -> request pre-request test

  • pre-request脚本,是在对API进行请求之前的脚本,一般用于动态生成参数、JSON数据包、链接地址等。
  • test脚本,其实更应该叫post-request,实在完成API访问并得到其response回应之后运行的脚本,一般用于获取response的内容,用于之后对于别的资源的请求,如获取页面标题和内容等。

Requirements 运行脚本要求

需要注意,pre-request脚本,在里面直接写代码就可以了,但是test脚本需要在某个指定的函数pm.test(…)中执行才会被识别,且作为test脚本运行。如下图:
在这里插入图片描述
pm.test()中第一个参数是测试描述(会在测试结果栏显示,应和其它测试描述做以区分),第二个参数是一个函数,具体执行代码都在这个函数中运行。
另外,pm对象是Postman的主要对象,所有的内置函数,数据调用等,都需要通过它来实现。
在这里插入图片描述

Code Snippets 常用语句

一般会在脚本编写栏的右边都会有常用语句片段,点击以下就会出来代码,但是一开始不太了解的话点出来其实也看不懂。如下图:
在这里插入图片描述官方文档解释的各种函数调用链接在这里:Postman Sandbox API

以下是常用代码片段:

// 获取response返回内容
var res = responseBody; // 是字符串格式

// 获取环境变量
var v = pm.environment.get(“variable_key”);

// 获取全局变量
var gb = pm.globals.get(“variable_key”);

// 获取普通变量
var nm = pm.variables.get(“variable_key”);

// 设置环境变量
// 只能存储字符串,如果是对象的话则无法在下次运行时获取到内容
// 如需要存储JSON数据,可以用JSON.stringify()存储,再用JSON.parse()转化为对象使用
pm.environment.set(“variable_key”, variable_value);

// 设置全局变量
pm.globals.set(“variable_key”, “variable_value”);

// 清除某个环境变量
pm.environment.unset(“variable_key”);

// 清除某个全局变量
pm.globals.unset(“variable_key”);

// 发送请求
pm.sendRequest(“https://postman-echo.com/get”, function (err, response) {
console.log(response.json());
});

// Javascript 获取变量类型
console.log( typeof pm.enviroment );

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

Pre-request Script 预处理脚本

发送请求之前往往需要准备数据,比如设置header中参数或者计算签名。

使用Pre-request Script可以编写一些准备数据。参考官方文档:Pre-request scripts

常用的准备工作有:

  • 获取环境变量
  • 环境变量赋值
  • 发送一个请求
  • 拼接组合提交request请求所需要的参数,比如authentication code。

常用的语句如下:

// 获取环境变量
var v = pm.environment.get("variable_key");

// 获取全局变量
var gb = pm.globals.get(“variable_key”);

// 获取普通变量
var nm = pm.variables.get(“variable_key”);

// 设置环境变量
// 只能存储字符串,如果是对象的话则无法在下次运行时获取到内容
// 如需要存储JSON数据,可以用JSON.stringify()存储,再用JSON.parse()转化为对象使用
pm.environment.set(“variable_key”, variable_value);

// 设置全局变量
pm.globals.set(“variable_key”, “variable_value”);

// 清除某个环境变量
pm.environment.unset(“variable_key”);

// 清除某个全局变量
pm.globals.unset(“variable_key”);

// 发送请求
pm.sendRequest(“https://postman-echo.com/get”, function (err, response) {
console.log(response.json());
});

// 获取毫秒级时间戳
var timestamp1 = Math.round(new Date().getTime());

// 获取秒级时间戳
var timestamp2 = Math.floor(new Date().getTime()/1000);

// md5加密
// 获取环境变量password
var tmp = pm.environment.get(“password”);
// 加密
var m = CryptoJS.MD5(tmp).toString();
// 加密后的值写入password
pm.environment.set(“password”, m);

// 设置一个1到4的随机整数,字段名是number,parselnt 是强制转换为整数
pm.globals.set(“number”,parseInt(4*Math.random())+1);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 获取毫秒/秒级时间戳演示
    在这里插入图片描述
    在这里插入图片描述
  • md5加密演示:

问题:一个登录接口,password需要md5加密后的值
则:在Pre-request Script中拿到环境变量中password的值,进行md5加密,再将加密后的值保存进password变量。
在这里插入图片描述
pre脚本执行后,可看到运行后的环境变量password已经是加密后的值
在这里插入图片描述
也可在postman console(点击左上角View - Show Postman Console或使用快捷键Alt+Ctrl+C)中查看Request Body
在这里插入图片描述
小结:
当postman的请求body或header中使用到了变量,有什么方法可以知道请求发送出去的实际值是什么?

  • 通过运行后的环境变量查看
  • 通过postman console查看
  • 通过fiddler等抓包查看

Test Script 测试脚本

测试脚本是在request之后,对Response的返回值进行下一步处理的脚本

参加postman 官方:Test scripts
参加postman 官方:Test examples

常用的处理有:

  • 接口断言,保证用例可回归
  • 接口返回值数据的处理
  • 可以对环境变量赋值
  • 读取response回复的数据,存为环境变量

常用的语句如下:

// 获取response headers中某一个值
ctype = postman.getResponseHeader("Content-Type");

// 获取response body的全部内容
text = pm.response.text();

// 获取response返回的全部JSON
json_data = pm.response.json();

// 获取JSON中某一个值,比如name的值:
var myName = json_data.name;

// 检查一个JSON值
var data = JSON.parse(responseBody);
tests[“Your test name”] = data.value === 100;

// XML转JSON
var jsonObject = xml2Json(responseBody);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

常用断言方法如下,更多详见postman官方:Test scripts

断言响应时间

// 断言响应事件小于200ms
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

 
 
  • 1
  • 2
  • 3
  • 4

断言状态码

// 断言状态码200-202区间
pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([200,202]);
});

// 断言状态码等于200
pm.test(“Status code is 200”, function () {
pm.response.to.have.status(200);
});

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

断言response的body中是否包含字符串

// 断言响应body中包含字符串:string_you_want_to_search 可替换为需要检验的内容
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

// 例:需要校验body是否包含"OK"
pm.test(“Body matches string”, function () {
pm.expect(pm.response.text()).to.include(“OK”);
});

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

断言response的header中是否包含Content-Type

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

 
 
  • 1
  • 2
  • 3

断言响应中的字段等于某个值

// 断言响应中"message" = ok"
pm.test("message test", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData["message"]).to.eql("ok");
});

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

断言响应中的字段不等于某个值

// 断言响应中"message" != bad"
var jsonData = JSON.parse(responseBody);
tests["message不为bad"] = jsonData["message"] != "bad";

 
 
  • 1
  • 2
  • 3

断言响应中的列表长度

// 断言响应中"list"的字段长度
pm.test("data list test", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData["data"].length).to.eql(41);
});

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

断言响应中的列表中第几个元素的字段值

// 断言响应中"list 0的"的time字段的值
pm.test("data list 0 test", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData["data"][0]["time"]).to.eql("2018-11-28 17:27:41");
});

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

Test Result 测试结果

除了上面的具体功能代码外,经常还需要返回一个结果,告诉Postman这个测试结果是Pass还是Fail,默认是pass。

这里返回值就不是简单的return语句可以,必须要通过Postman自带的对象或方法才可以,一般是通过pm.expect()或tests[]这两个地方返回测试结果。

完整的测试示范:

// 测试接口返回状态码是200:
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

 
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
这些方法名看起来都很容易理解,一般都会叫pm.expect()或.to.be()或.to.have()这样的,字面意思就是期待什么或要求它必须是什么或必须有什么,才能通过测试。
另外,同样的测试结果,实际上还有更简单的写法,即不通过pm对象,而是内置tests对象。

常用操作如下:

// 反应时间必须少于200毫秒
tests["Response time is less than 200ms"] = responseTime < 200;

// 判断反应代号是否等于某一个指定的代号
tests[“Status code name has string”] = responseCode.name.has(“Created”);

  • 1
  • 2
  • 3
  • 4
  • 5

看这个用法,猜测tests是一个JSON格式的对象,tests[…]括号内的字符串是测试的描述, =后面是判断语句,然后将True或False赋予为tests[…]的值,然后postman轮训所有tests对象里的参数,并返回pass与否的结果。

这里是官方总结的常用测试脚本方法:Test examples

以下是常用的返回测试结果的内置函数:

# “期待”返回结果必须包含某一段内容
pm.expect(从response里获取的字符串).to.include("必须包含的内容");

返回body值必须完全等于某一段内容

pm.response.to.have.body(“必须等于的内容”);

反应时间必须少于200毫秒

pm.expect(pm.response.responseTime).to.be.below(200);

必须返回某一个状态 如"Created"

pm.response.to.have.status(“状态名”);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Debugging 脚本调试

如果要看已经设置的Enviroment变量的话,可以点开右上方小眼睛看到,如下图,我设置了2个环境变量:
在这里插入图片描述
调试时要打印的话,一般都是用console.log(…),这样就能在console中看到:

  • 如果你的Postman是Chrome app的话,直接在chrome浏览器的开发者工具里调试就行。
  • 如果是Mac等桌面软件,则需要打开内置的console才能看到调试信息。
    位置在左下角,如下图:
    在这里插入图片描述
    postman console 页面如下图:
    在这里插入图片描述

Postman Sandbox

Postman的Sandbox是Postman内部默认引入的第三方JS库。

参考:Postman Sandbox API reference 官方引用的脚本库详解

1.常用的库和工具

  • jQuery (Deprecated)
    Cross-platform JavaScript library. This will be removed in future versions of the sandbox.

  • Lodash
    JS utility library

  • BackboneJS (Deprecated)
    Provides simple models, views, and collections. This will be removed in future versions of the sandbox.

  • SugarJS
    Extends native JS objects with useful methods

  • tv4 JSON schema validator
    Validates JSON objects against v4 of the json-schema draft

  • CryptoJS
    standard and secure cryptographic algorithms. Supported algorithms: AES, DES, EvpKDF, HMAC-MD5, HMAC-SHA1/3/256/512, MD5, PBKDF2, Rabbit, SHA1/3/224/256/512, TripleDES

  • xml2Json(xmlString)
    This function behaves the same in Newman and Postman

  • xmlToJson(xmlString)(Deprecated)
    This function does NOT behave the same in Newman and Postman

  • postman.getResponseHeader(headerName) (Test-only)
    returns the response header with name “headerName”, if it exists. Returns null if no such header exists. Note: According to W3C specifications, header names are case-insensitive. This method takes care of this.
    postman.getResponseHeader(“Content-type”) and postman.getResponseHeader(“content-Type”) will return the same value.

生成MD5字符串:

var hashed  = CryptoJS.MD5("待加密的字符串").toString();

 
 
  • 1

文件转base64字符串:

s = 'Hello';
// 先转化成UTF-8编码的字符串
utf8 = CryptoJS.enc.Utf8.parse( s );
// 用CryptoJS第三方库(Postman已经内置了)进行编码
b64 = CryptoJS.enc.Base64.stringify(utf8)

console.log(b64);
// aGVsbG8=

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Postman SDK

不同于Sandbox,这是Postman内部较高级的SDK,可以引用一些方便的方法。
参考官网:Tutorial: Postman SDK Concepts

URL转换成JSON格式,并获取指定的参数值:

var sdk = require('postman-collection');
query = ( new sdk.Url(callback) ).toJSON().query;

for (var i in query) {
console.log(query[i].key +": "+ query[i].value);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
                                </div><div><div></div></div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>

转载:https://blog.csdn.net/fantian_/article/details/106519479

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Postman pre-script脚本编写是指在发送请求之前执行的脚本编写。这些脚本可以用来设置请求头、请求参数、请求体等信息,也可以用来进行数据验证、数据处理等操作。在编写pre-script脚本时,需要使用Postman提供的JavaScript语言进行编写。常见的pre-script脚本包括: 1. 设置请求头信息: 在pre-script脚本中,可以使用postman.setHeaders()方法来设置请求头信息。例如: postman.setHeaders({ 'Content-Type': 'application/json', 'Authorization': 'Bearer xxxxxxxx' }); 2. 设置请求参数: 在pre-script脚本中,可以使用postman.setQueryParams()方法来设置请求参数。例如: postman.setQueryParams({ 'page': 1, 'limit': 10 }); 3. 设置请求体: 在pre-script脚本中,可以使用postman.setRequestBody()方法来设置请求体。例如: postman.setRequestBody({ 'name': '张三', 'age': 18 }); 4. 数据验证: 在pre-script脚本中,可以使用断言(assertion)来进行数据验证。例如: pm.test("响应状态码为200", function () { pm.response.to.have.status(200); }); 5. 数据处理: 在pre-script脚本中,可以使用JavaScript语言进行数据处理。例如: var jsonData = pm.response.json(); var token = jsonData.token; pm.environment.set("token", token); 以上是Postman pre-script脚本编写的一些常见用法,可以根据实际需求进行编写。 ### 回答2: Postman是一款强大的API测试工具,它可以帮助开发人员简化API测试的流程。其中,Postman pre-script脚本可以帮助用户在发送请求前执行一些自定义的JavaScript代码,用于设置或修改请求参数、请求头等内容,从而实现更高效、准确的测试。 以下是Postman pre-script脚本编写的具体步骤: 1. 打开Postman并创建一个请求。 2. 在请求页面中,点击“Pre-request Script”选项卡。 3. 在文本编辑框中输入JavaScript代码,这些代码将会在每次发送请求之前执行。 在pre-script脚本编写中,可使用各种JavaScript API,如fetch、Promise、console等,以及Postman自带的内置变量和函数,如pm.request、pm.environment、pm.sendRequest等。 例如,可以在pre-script脚本中设置请求头、请求参数等: ```javascript // 设置请求头 pm.request.headers.add({ key: 'Authorization', value: 'Bearer ' + pm.environment.get('access_token') }); // 修改请求参数 pm.request.body.urlencoded.update({ key: 'name', value: 'tom' }); ``` 除了基本的设置和修改,还可以在pre-script脚本中进行数据处理、加密解密、判断逻辑等操作,以实现更复杂的测试场景。 需要注意的是,尽管Postman在测试中提供了很多便利,但也需要开发人员具备基本的编程能力和测试思路,合理运用pre-script脚本,才能发挥Postman的最大价值。 ### 回答3: postman pre-script是一种在请求发送之前运行的JavaScript脚本,可以用来设置请求的变量、设置头文件、修改请求体、进行数据转换等一系列操作。下面是使用postman pre-script脚本的详细步骤: 1. 打开postman并创建新的请求。 2. 选择想要使用的请求方式,如GET、POST等。 3. 在请求的Headers或Body等区域编写所需要的内容。 4. 在请求页面下方找到“Pre-request Scripts”按钮并点击打开。 5. 在代码编辑器中输入自己需要的JavaScript代码。此脚本可以被当成一个公用模块来使用,在其他请求中都可以引用。 6. 在代码编辑器右下角点击“Save”按钮来保存代码。 7. 测试请求,看到请求是否成功以及数据是否符合预期。 在pre-script脚本中,可以使用下列代码段进行常用操作: 1. 设置变量: postman.setEnvironmentVariable('variableName', 'value'); 2. 修改请求头: pm.request.headers.add({'key':'Content-Type', 'value':'application/json'}) 3. 修改请求体: pm.request.body.raw=JSON.stringify({ “foo”: “bar”}) 4. 进行加密/解密/编码/解码操作: let encryptedValue = CryptoJS.AES.encrypt('secretMessage', 'secretKey') let decryptedValue = CryptoJS.AES.decrypt(encryptedValue, 'secretKey'); let encodedValue = btoa('hello world'); let decodedValue = atob(encodedValue); 总之,postman pre-script脚本postman的用户提供了更加完备的自动化测试工具。它能够让用户更加方便地对请求进行设置和修改,从而更加方便地进行接口测试操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值