为了更灵活地构造请求以及处理响应数据,postman提供了Pre-request-Script和Tests,在这两个标签中可以编写js代码辅助测试。之前学习了在发送请求的Tests标签如何添加断言以及postman中的环境变量,有了上述基础后,就可以继续学习如何在不同接口之间传递参数了,这一篇就主要说一说如何在Pre-request-Script和Tests标签中添加合适的脚本提取我们需要的数据。

收到response之后,可以在Tests标签中编写脚本,处理返回的数据

想象如下场景:假如测试2个接口,接口A负责生成地址信息,且返回一个地址流水号;接口B负责删除地址信息,且就是根据地址流水号还来删除,而且删除后,该地址流水号便无法再次使用。

这样的话我们在测试接口B时,每次都要提前准备一条可用的地址流水号,而且如果更换测试环境,就得重新造数据,用起来非常不方便。

基于此,可以考虑每次在测试接口B之前,都先调用接口A来生成一条地址流水号,然后把数据传给B,这样即使是更换数据库也能够灵活进行测试了,不需要再提前准备数据。

1.提取接口A生成的地址流水号

首先该请求的响应内容如下,为响应为json格式的字符串

在Tests标签中编写如下脚本

var JsonData = JSON.parse(responseBody);  //定义一个变量,并且将请求返回的内容赋给该变量
pm.environment.set("address_seq", JsonData.data.seq); //定义一个环境变量address_seq,且把响应内容中的seq值赋给该变量
console.log(JsonData.data.seq); //利用postman的console.log()来查看环境边境变量的值

发送这个请求,可以在console中查看运行情况

2.在接口B中调用环境变量address_seq

如上,只要每次在执行B接口前,先执行A,则不必担心地址流水号会失效,达到了地址流水号参数化的目的

在发送request之前,编写pre-request script,来定制化request

上面的例子已经演示了如何抽取一个请求响应中数据供其他端口来调用,但是这里有个弊端,那就是在执行接口B之前,必须先执行一次接口A,也就意味着批量测试接口时,必须把接口A放在接口B前面。

此外,当又出现一个接口C,负责更新地址信息,这个接口放在接口B后面,意味着,接口A生成地址流水号后,紧接着就被接口B删掉了,此时接口C再调用时就会提示该地址流水号不存在。

为了解决这2个问题,我们可以在执行接口B和接口C之前,各自先调用一下接口A,生成地址流水号仅供自己使用。

1.切换到Pre-request Script标签,在右侧代码片段中可以找到一个Send a request,这是postman提供的发送请求的代码片段

不幸的是,postman封装的sendRequest()方法默认发送的是get请求,而我生成地址流水号的接口是POST请求,导致一直发送失败~~

经过多番查找,在朋友的帮助下终于找到如何在这里发送post请求了

代码如下

var data = {key1:"value1",key2:"value2",key3:"value3"};  //定义接口A的body参数值(生成地址流水号那个接口)
const echoPostRequest = {
url: 'http://ip:port/XXX?key4=value4&key5=value5', //请求url
method: 'POST', //请求方法为POST
// body: { //post请求的body参数,有则传,无则不用传
// mode: 'raw',
// raw: JSON.stringify(data) //如果有body参数的话,将data传进来
// }
};
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(res.json());
pm.environment.set("del_seq", res.json().data.seq); //定义一个环境变量del_seq,并将前置请求响应中的seq赋给它
console.log(res.json().data.seq); //打印前置请求生成的地址流水号
});

最终如下

发送这个请求,可以在console中查看运行情况

2.在接口B中调用环境变量del_seq

可以看出来,上面其实就是经常讲到的参数化过程,掌握了这些技巧,基本上就可以用postman很好地完成接口测试了

下面是传送门,想了解postman使用sendRequest异步发送请求,请移步:

http://blog.getpostman.com/2017/10/03/send-asynchronous-requests-with-postmans-pm-api/


2018-12-29 22:26:12

postman(五):在不同接口之间传递数据的更多相关文章

  1. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  2. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  3. Android 笔记-Fragment 与 Activity之间传递数据

    Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...

  4. H5 页面与小程序之间 传递数据

    H5 页面与小程序之间 传递数据 小程序里面的 H5页面与小程序之间怎么传递数据 webview与小程序之间的实时通信 webview主动发消息给小程序 webview可以利用jssdk提供的 wx. ...

  5. Controller之间传递数据:属性传值

    在项目中,Controller之间传递数据非常之多,这里简单介绍一下属性传值.例如有FirstController 和 SecondController,数据从First传递到Second中,我们如何 ...

  6. 28、activity之间传递数据&批量传递数据

    import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...

  7. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  8. Android基础知识04—Activity活动之间传递数据

    ------活动之间传递数据------ 向下一个活动传递数据: Intent中提供了一系列的putExtra()方法,可以把数据暂存到Intent中,启动另一个活动的时候就可以取出来. 代码: (存 ...

  9. Android之间传递数据包

    在Android中 ,我们知道,两个activity之间通讯要用到Intent类,传递简单数据的方式我们也已经知道了.那么,如何在两个activity之间传递数据包呢,这就要用到我们的Bundle类了 ...

随机推荐

  1. phpredis Redis阵列 Redis Arrays

    官方URL:https://github.com/phpredis/phpredis/blob/master/arrays.markdown#readme 2017年10月29日20:44:01 Re ...

  2. Java学习-049-正则工具类

    自去年九月份决定再次入学和职业资格进阶,开始备战二者考试至今,以及当下进行中的职称申请,犹如孤独的狼,不断前行在路上,而今凡凡总总的已历8月... 不感慨了,如下为一园友需要的正则工具类,直接上码: ...

  3. 类加载(四):spring-boot-loader 模块

    1. spring-boot jar包结构 2. 正常情况下,java -jar的类加载器是AppClassLoader 但是spring 使用自定义的URLClassLoader加载我们写的clas ...

  4. 如何知道网页浏览器cookie是什么?

    一直有网友问网页cookie如何获取,其实想知道自己访问网页时的cookie没那么难,用Chrome内核浏览器的debug功能就能看到,怎么查看呢?随ytkah一起来看看吧! 打开网页,按F12键,选 ...

  5. JAVA-数据库之MySQL与JDBC驱动下载与安装

    相关资料:<21天学通Java Web开发> MySQL下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-wi ...

  6. Django进阶之QuerySet和中介模型

    QuerySet QuerySet是查询集,就是传到服务器上的url里面的查询内容.其形态类似于Python的列表,列表中的元素是QuerySet对象.支持大部分列表的内置方法. 可切片 QueryS ...

  7. Python四线程爬取西刺代理

    import requests from bs4 import BeautifulSoup import lxml import telnetlib #验证代理的可用性 import pymysql. ...

  8. linux 单次定时任务

    使用at =======查看当前任务========= at -l  或者atq =======查看任务执行什么===== at -c =======配置任务========= at 02:00    ...

  9. EF设计模式之code first

    为了支持以设计为中心的开发流程,EF推出了以代码为中心的模式code first.我们称之为代码优先开发,代码优先的开发支持更加优美的开发流程,允许在不使用设计器或者定义一个XML映射文件的情况下进行 ...

  10. 2014西安赛区C题

    将A[i]同他后面比他小的建边,然后求最大密度子图 #include <iostream> #include <algorithm> #include <string.h ...