前面章节解决了“请求本身”的问题,但“请求前后的动作”是怎样处理的呢?比如在发送一个请求前,需要获取当前时间戳,这就需要用到Pre-request Script的知识了。另外,似乎还忽略了一个非常重要的知识点,请求返回响应后,如何自动判断响应是否正确呢?这就需要用到Tests的知识。本章将重点介绍Pre-request Script和Tests的相关知识。

对于单个请求而言,两个脚本执行顺序:

Pre-request Script:在发送请求之前执行

Tests:在发送请求之后执行

Postman教程-Pre-request Script和Tests脚本的介绍_Postman

站在集合角度,执行顺序如下:

① 与集合相关的Pre-request Script脚本将在集合中的每个请求之前运行。

② 与文件夹相关联的Pre-request Script脚本将在文件夹中的每个请求之前运行。

③ 与集合相关的Tests脚本将在集合中的每个请求之后运行。

④ 与文件夹关联的Tests脚本将在该文件夹中的请求之后运行。

集合和文件夹也能设置脚本,这点我之前没关注过:

Postman教程-Pre-request Script和Tests脚本的介绍_Tests_02

因此可以得出结论:

集合级脚本>文件夹级脚本>请求级脚本   {优先级从高->低}

Pre-request Script脚本的使用场景:

一般用来在发送请求之前对数据进行一些预处理,比如获取当前时间戳、随机数之类的用于接口传参。

常见的函数以及用法有:

pm.environment.get("variable_key");
pm.globals.get("variable_key");
pm.variables.get("variable_key");
pm.collectionVariables.get("variable_key");
pm.environment.set("variable_key", "variable_value");
pm.globals.set("variable_key", "variable_value");
pm.collectionVariables.set("variable_key", "variable_value");
pm.environment.unset("variable_key");
pm.globals.unset("variable_key");
pm.collectionVariables.unset("variable_key");
pm.sendRequest("https://postman-echo.com/get", function (err, response) {
    console.log(response.json());
});

说明:

postman中的自己编写的脚本目前一般是只支持用js,但是你可以通过其他的方式去间接的嵌入python脚本, postman在Pre-request Script脚本中是可以发送请求的,那么你可以把写的python或者其他语言的脚本发布为api的接口,然后在postman中以接口的形式去进行调用。

Tests脚本使用场景:

Postman工具借助测试脚来帮助用户自动判断接口请求是否正确,相当于Load Runner工具中的检查点或者JMeter中的断言功能。

列举结果最基础的断言里面常用的函数:

//检查响应状态是不是200
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});


//检查返回结果会否包含某个字符串
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});


//响应时间会否小于200毫秒
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

官网上,一些脚本的使用案例,感兴趣的可以自己学习:

https://learning.postman.com/docs/writing-scripts/script-references/test-examples/

英文文档并不可怕,一些简单的英文单词什么的还是应该要能够看懂的。