提取接口返回值

1、获取响应的header值

var Content-Type=postman.getResponseHeader("Content-Type")

2、获取响应的cookie值

var xsrfCookie=postman.getResponseCookie("csrf_token")

3、获取响应的正文

var response=responseBody

4、使用正则表达式截取响应部分内容,通过要截取的字符串左右边界截取

var str=(responseBody.match(new RegExp('"expires_in":(.+?)}')))[1]

5、返回的是json数据,可以通过转换成json对象然后解析

var responseDate=JSON.parse(responseBody)
responseDate.expires_in

6、转化XML格式的响应成JSON对象 → Convert XML body to a JSON object

var jsonObject = xml2Json(responseBody)

接口关联(串行传参)

微信公众平台开发者文档中,创建用户分组接口需要获取access token接口返回的access_token值才能进行创建分组,之前我们使用的方式是先执行获取access token接口,得到值后,然后复制到创建用户分组接口。

上述做法不能完成接口自动化操作,只能手工逐个去执行,我们可以利用postman的相关功能组合完成获取access token接口的返回值送给创建用户分组接口,该过程称为接口关联。

1、利用postman获取上一个接口指定的返回值

2、使用postman全局变量保存上一个接口的值

postman.setGlobalVariable("access_token",str)

其中前面的参数为全局变量名称,后面为js变量

3、和之前引用全局变量一样,使用{{access_token}}即可

备注:由于有关联关系,所以两个接口要顺序执行才能互相之间传递数据。

设置动态参数

在runner里循环发n次请求/做自动化测试时,有些接口不适合写死参数

1.postman有以下内建变量,适合一次性使用:

{{$guid}}  //生成GUID
{{$timestamp}} //当前时间戳
{{$randomInt}} //0-1000的随机整数 //设置顺序值代码:
var j=parseInt(globals.i);
j=j+1;
postman.setGlobalVariable("i",j);

2.参数依赖上一个请求的返回:

上个请求的Tests里提取参数存环境变量,这个请求里用{{变量名}}取值

3.参数每次都不同,但之后的断言或别的请求里可能还要用:

在Pre-request Script里写代码处理,存为环境变量,参数里用{{变量名}}取值

Pre-request Script为执行接口请求之前要做的操作,而tests是执行完请求要做的操作。内建变量一般放在Request里,我们也可以用代码在Pre-request Script中实现,用代码实现的好处是可以复用。

//时间戳实现
var time = Date.now();
postman.setGlobalVariable("timess",times); //guid实现
const guid='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
.replace(/x/g,()=>(Math.floor(Math.random()*16)).toString(16))
.replace(/y/g,()=>(Math.floor(Math.random()*4+8)).toString(16)); //随机整数实现
constrandomInt=(min,max)=>Math.floor(Math.random()*(max-min+1))+min;
postman.setGlobalVariable("nums",randomInt(0,1000)); //从多个选项中选择实现
const getRandomValue=list=>list[randomInt(0,list.length-1)];
const charsInName=['王','李','张'];
postman.setGlobalVariable("options",getRandomValue(charsInName)); //顺序取值实现
var s =postman.getGlobalVariable("num");
s=parseInt(s)+1;
postman.setGlobalVariable("num",s); //随机手机号实现
environment.randomMobile='18${randomInt(100000000,999999999)}'; //同步等待实现
const sleep=(milliseconds)=>{
const start=Date.now();
while(Date.now()<=start+milliseconds){}
};

流程控制

流程控制只有在collection runner或Newman里才生效

假设2个接口的顺序为:接口A → 接口B

接口A:https://www.baidu.com/s?wd="海贼王"

接口B:https://www.baidu.com/s?wd="路飞"

如果希望执行顺序为:接口A → 接口B → 接口A,又不想复制一份接口A,那么在接口A的Tests中编写脚本

if(globals["wd"]=="海贼王")
{
postman.setNextRequest("null");
postman.setGlovalVariable("wd","first");
}
tests["A接口执行"]=true;

wd为接口B中的返回值,在接口B中将其定义成一个全局变量。接口A通过判断全局变量是否正确进而判断接口B是否执行。如全局变量判断正确,将终止执行,否则执行接口B。

接口B的Tests中编写脚本

var str=(responseBody.match(new RegExp('<title>(.+?)</title>')))[1];
postman.setGlobalVariable("wd",str);
postman.setNextRequest("A接口");

“A接口”为A接口的名称。如果需要实现多个接口的一次循环,只需在每个接口的Tests中编写脚本“postman.setNextRequest('下一个接口名');”

调试

1.使用ctrl+alt+c,可以打开postman的控制台,可以查看请求和响应(只适用于客户端,不适用于Chrome插件)‘

2.用console.log()打印,到控制台看

3.tests['这里拼出你想看的字符串']=true 在界面/报告看断言

定义公共函数

常用公共函数:

1)判断是否超时(assertNotTimeout)

var hasResponse=postman.getResponseHeader('Content-Type')?true:false;
if(!hasResponse)tests['服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false;

2)为超时,显示发出的请求参数(logParams)

if(hasResponse)tests['[INFO]请求参数(超过没返回时不解析):${JSON.stringify(request.data)}']=true;

3)未超时,解析返回的JSON对象(getResponseJson)

try{if(hasResponse)var json=JSON.parse(responseBody);}catch(err){tests['服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false;tests['[INFO]返回:${responseBody}']=true;console.error(err);}

4)返回元素的类型(assertType)

var assertType=(name,value,type)=>{let isType=(type==='array')?Array.isArray(value):typeof value===type;tests['${name}为${type}(实际值:${value})']=isType;};

5)返回元素是否与预期值一致(assertEqual)

var assertEqual=(name,actual,expected)=>{tests['${name}等于${expected}(实际值:${actual})']=actual!==expected;};

6)返回元素是否与预期值不一致(assertNotEqual)

var assertNotEqual=(name,actual,expected)=>{tests['${name}不等于${expected}(实际值:${actual})']=actual!==expected;};

将以上公共函数每行一对key:value的形式编辑成全局变量

全局变量设置完成后就可以引用这些公共函数了

页面访问请求:https://api.weixin.qq.com/cgibin/groups/create?access_token=ACCESS_TOKEN

该接口请求方式:POST

在body中填写json数据:{"group":{"name":"test"}}

在Tests中编写脚本

eval(globals.assertNotTimeout);
eval(globals.logParams);
eval(globals.getResponseJson); eval(globals.assertType);
eval(globals.assertEqual);
eval(globals.assertNotEqual); if(json){
assertType("name类型判断",json.name,string);
assertType("id类型判断",json.id,number);
assertType("是否name正确",json.name,"onepiece");
}

需要执行的测试用例可写在Tests的if语句中

assertType=(name,value,type);
//name为用例的名称,value为该元素的值,type为该元素的类型
assertType('name类型判断',json.name,string); //用例执行成功 assertEqual=(name,actual,expected);
//name为用例的名称,actual为返回的实际值,expected为预期值
assertEqual('是否name正确',json.name,'onepiece'); //用例执行成功 assertNotEqual=(name,actual,expected);
//name为用例的名称,actual为返回的实际值,expected为预期值
assertNotEqual('是否name正确',json.name,'onepiece'); //用例执行成功

外部数据文件

你可以在Collection Runner中使用数据变量去运行不同的数据,Collection Runner在HTTP requests和script中可以导入CSV文件或是JSON文件,从数据文件(即CSV或JSON文件)中使用values,为了在postman UI 中去使用它们,你需要遵循和environment or global variables一样的语法。

1.在你的Collection request中使用变量,所有变量将会被数据文件中的相应的值替换

2.准备你所需要运行的数据文件(JSON/CSV)

CSV文件要在collection Runner中工作,第一行必须是在request中要使用的变量名,每一行是一条用例,并表示一次迭代。

JSON文件,你需要确保你的文件有键/值对数组。数组中的每个元素是键值对的对象,代表了一次迭代。key是作为变量名,values是代替request里的值。

JSON格式书写

[
{"keyword":"海贼王"},
{"keyword":"路飞"},
] [
{"name":"admin","password":"123456"},
{"name":"testa","password":"123456"},
{"name":"testb","password":"123456"},
]

CSV格式书写

keyword
海贼王
路飞 name,password
admin,123456
testa,123456
testb,123456

3.打开collection runner窗口以及选择合适的Collection或文件夹

4.选择“Choose files”,从文件选择区加载数据文件,如果加载成功,你可以预览collection Runner中执行的数据量,通过选择Data File Type选择文件类型,然后点击Preview来预览数据。

5.设置迭代次数。每次迭代都将使用你的数据文件中的一行,如果迭代次数超过数据文件中的行数,将重复执行最后一行

6.运行collection以及观察结果

备注:

导入的外部数据文件,通过两种方式传递到postman参数中,

在HTTP requests中可以使用{{keyword}}去引用

在script中可以使用data.keyword或者data["keyword"]去引用

如果一定要在test里请求参数里填东西,比如传JSON字符串就用

JSON.parse[request.data].phone

如果是form就用request.data.phone

postman高级应用的更多相关文章

  1. 你应该学会的接口调试神器——Postman高级用法

    postman这个神器相信大家都用过,程序员作为非专业的测试人员,非常需要这么一款简单轻量级的restful测试工具,但是不知道你是否知道,postman的强大之处不只是测试一下接口,还有其他非常赞的 ...

  2. Postman高级应用——流程控制、调试、公共函数、外部数据文件

    postman客户端下载地址:https://www.getpostman.com/apps 目录 流程控制 调试 公共函数 外部数据文件 流程控制 流程控制简言之就是设置接口的执行顺序,流程控制只有 ...

  3. Postman高级应用——串行传参和动态传参详解

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...

  4. Postman 高级用法指南

    Postman是一款强大的API接口测试工具,有许多不容易发现的好用的功能,下面简单介绍其中一部分功能.详细内容可以参考文档,官方还有视频教程,非常方便入手.后续本博客会持续提供一些Postman使用 ...

  5. 【postman】postman使用教程

    postman基础功能 一.变量设置 编写的API往往需要在多个环境下执行,而Postman 提供了两种类型的变量:环境变量和全局变量,从而很好的解决了这个问题.同时变量还常用于关联接口间的参数传递. ...

  6. Postman使用技巧

    Postman是什么 Postman是chrome的一款插件,用于做接口请求测试,无论是前端,后台还是测试人员,都可以用postman来测试接口,用起来非常方便. Postman安装 官网下载(翻墙) ...

  7. 《Python自动化测试修炼宝典》线上课程已经成功入驻网易云课堂......

    <Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂...... IT测试老兵利用工作之余,亲自录制的<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课 ...

  8. oracle数据库创建表

    实际工作中,在数据库中创建表是经常会用到的.我们今天呢?主要给大家来分享一下在数据库如何通过sql语句去创建表.其实,创建表很简单,只需要把数据库的数据类型和约束搞清楚就可以了,其他的就好说了.接下来 ...

  9. API Test Postman接口测试之高级篇2

    API Test  Postman接口测试之高级篇2 一.继承父类的设置: 二.导出及导入: 三.分享文档: 四.发布接口文档: 五.常用脚本: 右边框选的是一些常用的脚本,postman提供的,可以 ...

随机推荐

  1. nuxt遇到的问题(一)window 或 document is not defined

    因为用了VUE做的官网,既然是官网了避免不了SEO的问题了(该死当初就不应该选择用vue) 很自然就是选择了使用nuxt.js来做ssr预渲染了. 因为网站不是响应式的,PC / 移动端要进行对应跳转 ...

  2. 20191017-6alpha week 2/2 Scrum立会报告+燃尽图 05

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9802 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 ...

  3. alpha week 2/2 Scrum立会报告+燃尽图 01

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9798 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 ...

  4. node mysql+node+express 表查询及接口建立(6)

    一.一张表查询 查询一张表在上一章节说过了,查询全部使用*,具体的就写字段名 'SELECT * FROM company' //查询所有使用* 'SELECT * FROM company WHER ...

  5. 【2018寒假集训 Day1】【位运算】翻转游戏

    翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...

  6. Stream系列(五)Min Max Average方法使用

    最小值,最大值,平均值 EmployeeTestCase.java package com.example.demo; import lombok.Data; import lombok.ToStri ...

  7. 洛谷P1426-小鱼会有危险吗

    原题链接: https://www.luogu.org/problem/P1426 题面简述: 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%98 ...

  8. Linux I/O复用 —— epoll 部分源码剖析

    epoll 相关的系统调用有以下三个,这里简述下当调用对应函数后,内核的具体实现 epoll_creat( ) 在内核注册文件系统 eventpollfs,挂载此文件系统 (linux一切皆文件,便于 ...

  9. Linux的curl和wget

    wget wget命令用来从指定的URL下载文件.wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕.如果是服 ...

  10. ctf中关于图片的隐写随笔(不全)

    ①JPG图片的结束符,十六进制常为FFD9 ②binwalk的原理是:检查常见的文件头信息,如果不符合,一定有隐藏信息.③JPG是有损压缩,PNG是无损压缩,BMP是不压缩. 隐写的基本原理:图片查看 ...