欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Postman使用技巧之四:pre-request-script和test script

程序员文章站 2024-03-21 20:37:58
...

之前都两篇文章都是一年多之前的事情了。最开始的初衷是想把各种细节都写了,中途因为忙其他事情,就忘记了,放弃了。但我这个博客好像最火的就是这个系列,一直有人评论。针对问的最多的问题,我还是试着看看写下一些东西,看看是否有用吧。。。

虽然postman一直也有在用,但用最简单的方式构建request去测试接口已经满足我日常工作的需求,就很少有动力再去仔细研究了。这两天又看看官网,发现文档变得更全了,功能也变多了。时常有人私信我,问postman能否动态的定制化request的内容。首先,postman就是为custom request而生的,动态的定制化肯定是支持的,只是需要多点研究而已。这篇文章主要介绍postman里面的scripts,搬砖之作,希望对您有帮助。

postman中的script

postman集成了一个强大的,基于nodejs的script引擎,借助它,您可以为requests和collections添加动态的行为。
这样就可以在编写test suite时,构建可以包含动态参数的request,在request之间传递数据等等。您可以在流程中的两个事件中添加要执行的JavaScript代码:
1. 在发送request之前,编写pre-request script,定制化request。
2. 收到response之后,用test script,处理返回的数据。

整个流大概是这样的:
Postman使用技巧之四:pre-request-script和test script

Pre-request scripts

pre-request script就是一段在发送request之前执行的代码。大家可以自己脑补在什么场景可以用到它。比如,随机的URL参数,变化的requst body等。
这里要注意的是,pre-request script和test scripts一样,都是javascript,同时,和angular js一样,可以用两个{{}}访问环境变量。
还是赶紧来举例吧。

递增的url参数

最近一直在玩elasticsearch,就用elasticsearch的API来作为例子吧。我们通过GET API,可以获取ES中的数据。我现在从tushare上把新华保险的日线数据导出为json格式的文件,存储到ES当中。每条记录都有一个id。通过postman单个调用接口,大概是这样的:(截图中的url应该是localhost:9200/xhbx/stock-record/_search?q=_id:707)
Postman使用技巧之四:pre-request-script和test script
但是如果我想通过run collections的方式,一次读出100天的数据呢?那就是从712开始,每次request递增1。查询100次。
借助于pre-request script我们可以很方便的实现这个需求。
首先,查看当前的环境变量,点击右上角的眼睛图标:
Postman使用技巧之四:pre-request-script和test script
你可以看到自定义的SampleHostGlobals

我们可以定一个global变量xhbxId,用于自增。点击上图的Edit。或者点击眼睛图标旁的齿轮图标,添加一个global变量:
Postman使用技巧之四:pre-request-script和test script

然后,配置我们的request使用xhbxId。点击send,你会发现,能够正确请求到id为707的数据:
Postman使用技巧之四:pre-request-script和test script

点击parameter下方的Pre-request scripts选项,编辑我们的脚本:

var temp = parseInt(postman.getGlobalVariable("xhbxId"));
temp += 1;
postman.setGlobalVariable("xhbxId", temp);
  • 1
  • 2
  • 3

脚本的意思是给xhbxId自增1。前面已经说过,pre-request script会在request被发送之前运行,所以,所以每次我们点击send,xhbxId都应该增加1。也就是下一次是708。
另外,这里要注意的是,所有的环境变量或者global变量,都是以字符串的形式存储的,所以我们的自增操作需要先转化为int。
运行结果如图:
Postman使用技巧之四:pre-request-script和test script

变化的request body

很多人也问我,request body的问题。其实和url参数一样,直接引用就是了。
保持我们之前的Pre-request scripts不变。把request的类型改成POST,编辑我们的request body,使用{{xhbxId}}的方式获取参数。本次调用正确的递增了Id为709。
Postman使用技巧之四:pre-request-script和test script

test script

接下来,通过test script测试结果。保持我们之前的Pre-request scripts不变。如果再按一次send,则返回的结果中,应该包含如下字符串:
"_id":"710"
那么,我们就应该在test script里面,测试response里面应该包含如上字符串。test script和pre-request script是一样的,所以我们可以很方便的使用xhbxId作为判断的比较值。

var temp = postman.getGlobalVariable("xhbxId");
tests["Body matches string"] = responseBody.has("\"_id\":\""+temp+"\"");
  • 1
  • 2

具体操作如下图:
Postman使用技巧之四:pre-request-script和test script

  • 选择Tests
  • 读出xhbxId
  • 放入response body: Contains strings的snippet
  • 运行之后,test的结果是OK的,1/1
  • 710被匹配上。

在test suite中运行

好了,准备好上面的条件,我们把test case保存到collection当中(我新建了一个叫test_script的collections,不知道怎么操作的话看我的教程2)。运行个100次。

Postman使用技巧之四:pre-request-script和test script

测试通过,接口没问题。这时,运行了100次,global的xhbxId应该从710增加到810了。

Postman使用技巧之四:pre-request-script和test script

确实是这样,postman正确运行。

相关标签: postman