最强PostMan使用教程(3)- script

最强PostMan使用教程(3)- scriptpostman中的scriptPre-requestscripts递增的url参数变化的requestbodytestscript在testsuite中运行之前都两篇文章都是一年多之前的事情了。最开始的初衷是想把各种细节都写了,中途因为忙其他事情,就忘记了,放弃了。但我这个博客好像最火的就是这个系列,一直有人评论。针对问的最多的问题,我还是试着看看写下一些东西,看看是否有用吧。

大家好,又见面了,我是你们的朋友全栈君。

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

虽然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,处理返回的数据。

整个流大概是这样的:
这里写图片描述

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)
这里写图片描述
但是如果我想通过run collections的方式,一次读出100天的数据呢?那就是从712开始,每次request递增1。查询100次。
借助于pre-request script我们可以很方便的实现这个需求。
首先,查看当前的环境变量,点击右上角的眼睛图标:
这里写图片描述
你可以看到自定义的SampleHostGlobals

我们可以定一个global变量xhbxId,用于自增。点击上图的Edit。或者点击眼睛图标旁的齿轮图标,添加一个global变量:
这里写图片描述

然后,配置我们的request使用xhbxId。点击send,你会发现,能够正确请求到id为707的数据:
这里写图片描述

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

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

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

变化的request body

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

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+"\"");

具体操作如下图:
这里写图片描述

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

在test suite中运行

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

这里写图片描述

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

这里写图片描述

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139451.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 正则表达式用法简介与速查

    正则表达式用法简介与速查

    2021年7月5日
    199
  • 修改表名列名mysql_怎么修改mysql的表名和列名?

    修改表名列名mysql_怎么修改mysql的表名和列名?在mysql中,可以通过“ALTERTABLE旧表名RENAME新表名;”语句来修改表名,通过“ALTERTABLE表名CHANGE旧字段名/列名新字段名/列名新数据类型;”语句来修改列名。修改mysql的表名MySQL通过ALTERTABLE语句来实现表名的修改,语法规则如下:ALTERTABLERENAME[TO];其中,TO为可选参数,使用与否均不影…

    2022年5月17日
    40
  • c语言scanf函数用法详解_c语言输入scanf格式

    c语言scanf函数用法详解_c语言输入scanf格式本节介绍输入函数scanf的用法。scanf和printf一样,非常重要,而且用得非常多,所以一定要掌握。概述scanf的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为:#include<stdio.h>intscanf(constchar*format,…);它有两种用法,或者说有两种格式。1)scanf(“输…

    2025年7月27日
    4
  • 查找窗口句柄

    查找窗口句柄HWNDSearchWindow(CStringstrWinName){//获得桌面窗口CWnd*pDesktopWnd=CWnd::GetDesktopWindow();//获得第一个子窗口CWnd*pWnd=pDesktopWnd->GetWindow(GW_CHILD);CStringstrClassName=_T(“”);CString

    2022年7月14日
    23
  • sdio 驱动_usb接口安装驱动失败

    sdio 驱动_usb接口安装驱动失败1.简介1.1SDIO接口应用场景SDIO通过SD的I/O管脚来连接外部的外围device并传输数据。这些外围设备,我们称为SDIO设备,常见的有:Wi-Ficard(无线网络卡)CMOSsensorcard(照相模块)GPScardGSM/GPRSmodemcardBluetoothcardRadio/TVcard2.硬件接口2.1SDIO总线SDIO总线和USB总线类似,SDIO也有两端,其中一端是HOST端,另一端是d

    2022年10月3日
    1
  • SpringBoot使用@Mapper和@MapperScan注解无效的解决方法

    SpringBoot使用@Mapper和@MapperScan注解无效的解决方法在使用@Mapper注解时,注解无效,service层,dao层该添加的注解都添加了,最后发现是少加了一个jar包&amp;lt;!–缺少此jar包,导致@Mapper注解无效–&amp;gt;&amp;lt;dependency&amp;gt;&amp;lt;groupId&amp;gt;org.mybatis.spring.boot&amp;lt;/groupId&amp;gt;

    2022年6月10日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号