Postman使用手册之实战

主要介绍使用postman进行web api接口主流程场景的回归测试及测试过程中数据构造;主要用到的是get/post请求;以及使用过程中常用的参数化,简单的tests检查点以及如何取登录后的cookies

一、环境准备

1)在chrome中安装插件postman interceptor,这个截图是我已经安装好的

2)安装postman app


二、使用postman拦截post/get请求

1)打开Request Capture开关,并添加filter过滤你希望拦截的请求


2)启动postman app

3)postman中的interceptor开关打开

4)在chrome浏览器操作,发现请求被拦截在postman的history下

5)在collection下新建一个collection

点击切换到history下,点击请求后面的+,直接把请求放到刚刚新建的collection中,方便后期调试


6)导出保存的请求文件

三、调试及参数化post/get请求

以上通过interceptor插件安装的postman app是插件版本的,没有控制台窗口,不方便调试,此时可以在postman官网重新下载个非插件版的app,直接启动这个app

1)导入之前保存的脚本

2)参数化可变的值,从environment文件读取变量

PS:postman读取环境变量常见的有4种,本篇介绍从environment文件中读取

点击manage environments->点击add

然后编辑刚新建的环境变量文件,输入需要引用的变量名和变量值,点击update

在请求中引用环境变量,默认方式{{变量名}}

3)在Pre-request Script 和Tests编写脚本

Pre-request Script 是在请求发送前执行,Tests主要用于添加校验点以及获取response body中值作为下个请求中的参数;

PS:postman常用的方法,可参看官方文档

https://www.getpostman.com/docs/v6/postman/scripts/test_examples

4)调试打印变量,使用cosole.log(需要打印的内容)

 首先在Tests中使用cosole.log()方法,比如

打开console

点击send发送请求,发现控制台会打印出值

四、runner 运行collection

点击runner-->选择需要执行的collection-->选择需要用到的环境变量文件-->设置运行参数


PS:常见4类变量作用域:

Global: 全局变量,postman中所有请求都可以访问或者修改;

Environment: 构造请求时可以选择使用某个Environment,这样就可以访问或者修改该Environment下的所有变量;

Local: 脚本中定义的变量,只对脚本的当前作用域有用;

Data: 只有在使用 Collection Runner 的时候,可以通过导入 Data Files 来构造当前测试集中用到的数据。

作用域:Global<Collection<environment<local

1)关于变量引用遇到的问题

如果environment设置的变量,collection运行结束后environment中值无法变更

参考:https://www.cnblogs.com/majunBK/articles/9447021.html

原因:runner运行设置前没有勾选keep variable value,如果不勾选keep variable value,则运行Collection Runner中修改的任何变量都不会影响Postman主应用中对应的环境变量值,在Collection Runner运行完成后恢复environment原始的值

如果运行时勾选keep variable value,则Collection Runner运行完成后Postman主应用中对应的环境变量值变更,主要使用场景:比如第一个collection执行结束后环境变量值需要变更作为第二个collection执行环境变量值的输入


2、遇到的问题

1)runner时报错Data unavailable(Only data about the top 10 historical runs is stored)

详细原因:https://www.jianshu.com/p/b6e934e4601e

可能解决的办法:

1)调整请求执行顺序

2)在容易出现这个错请求的上一个请求tests中加等待时间

setTimeout(()=>console.log('等待'), 3000);

3、常用的方法总结

参考文档https://www.getpostman.com/docs/v6/postman/scripts/test_examples

1)取cookies里面的token

  var token = postman.getResponseCookie("a9a68f4fefd3b693f10be4a89799dc48").value

  console.log('token123',token);

  pm.environment.set("token", token);

2)环境变量

//清楚上一次执行保存的值

pm.globals.unset(onlineTradeNo);

//将订单号传入环境变量

pm.globals.set("onlineTradeNo",onlineTradeNo.data[0].tid);

//获取环境变量

pm.globals.get("AdminIdOne");

3)返回状态校验200

//校验response返回200

tests["Status code is 200"] = responseCode.code === 200;

4)获取response里面的tid

//获取response的body中生成的订单号,如果不是数组的话可直接取

var onlineTradeNo = JSON.parse(responseBody);

console.log("onlineTradeNo",onlineTradeNo.data[0].tid);---数组写法

console.log("onlineTradeNo", onlineTradeNo.data.tid);---非数组

5)从环境变量获取数组中1个值

//取环境变量中待审核的订单状态

var array=pm.environment.get("data_entry");

var value=JSON.parse(array)[0];

// console.log("value is"+" "+value);

//校验状态是否是期望值是否=audit

pm.test("applyStatus is audit", function () {

    var jsonData = pm.response.json();

    // console.log(jsonData.data.applyStatus);

    pm.expect(jsonData.data.applyStatus).to.eql(value);

});

6)Tests中设置等待时间

setTimeout(()=>console.log('等待'), 3000);

setTimeout(function(){}, 3000)

7)在Tests中通过设置脚本控制API的执行顺序

参考文档:https://www.jianshu.com/p/a3b4794ab283

当前请求Tests中添加:postman.setNextRequest('下一个需要执行请求名称')

最后1个请求Tests中添加:postman.setNextRequest("null")

8)for循环的使用,比如根据一个出库单可以查询出2条库存流水,需要把库存流水值相加

//获取出库单(可能是多条)和出库数量(相加)

var DN=pm.environment.get("deliveryOrder");

var number=parseFloat(pm.environment.get("delivery_num"));

var newstocks=0;

for(var i in jsonData.data.data){

    if(jsonData.data.data[i].relatedNo == DN){

    newstocks += jsonData.data.data[i].newChangeStocks;

   }

}

  pm.expect(newstocks).to.eql(number)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 一、Postman的其他链接教程 http://www.jianshu.com/p/13c8017bb5c8 尤其...
    小小背影阅读 4,095评论 3 8
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,694评论 0 3
  • 【Tests】例子 在发送请求并从服务器收到响应后运行测试脚本。 让我们看一下Postman-Tests模块的一些...
    小娟_bb93阅读 755评论 0 0
  • 女生总是想用成熟的妆容来告诉别人自己长大了,而男生总是想通过更多的物质的东西来告诉别人自己成熟了。你觉得我说得对吗?
    太阳落山了你我在哪阅读 311评论 0 1