• 0
  • 0
分享
  • 使用postman玩转接口测试——软件测试圈
  • 饭团🍙 2021-08-16 11:25:18 字数 4813 阅读 1110 收藏 0

(一)前言:

之前搞自动化接口测试,由于接口的特性,要验证接口返回xml中的数据,所以没找到合适的轮子,就自己用requests造了个轮子,用着也还行,不过就是case管理有些麻烦,近几天又回头看了看postman也可以玩的很溜,所以和大伙分享下,但是postman也有自己的弱点,还是需要根据自己项目的特点来选择适合的工具。废话少说,开始...

(二)安装和介绍

1、首先安装chrome,然后在chrome的商店里搜postman,https://chrome.google.com/webstore/search/postman?t=http://webstore.google.com,然后有位同学对整个界面做了介绍,转一下:http://bayescafe.com/tools/use-postman-to-test-api-automatically.html

  1. Collections:在Postman中,Collection类似文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里面也可以再建文件夹。如果做API文档的话,可以每个API对应一条请求,如果要把各种输入都测到的话,就需要每条测试一条请求了。这里我新建了一个example用于介绍整个流程,五个API对应五条请求。这个Collection可以通过https://www.getpostman.com/collections/96b64a7c604072e1e4ee导入你自己的Postman中。

  2. 上面的黑字注册是请求的名字,如果有Requestdescription的话会显示在这下面。下面的蓝字是保存起来的请求结果,点击可以载入某次请求的参数和返回值。我会用这个功能给做客户端的同事展示不同情况下的各种返回值。保存请求的按钮在15.

  3. 选择HTTPMethod的地方,各种常见的不常见的非常全。

  4. 请求URL,两层大括号表示这是一个环境变量,可以在16的位置选择当前的environment,环境变量就会被替换成该environment里variable的值。

  5. 点击可以设置URL参数的key和value

  6. 点击发送请求

  7. 点击保存请求到Collection,如果要另存为的话,可以点击右边的下箭头

  8. 设置鉴权参数,可以用OAuth之类的

  9. 自定义HTTPHeader,有些因为Chrome原因不能自定义的需要另外装一个插件Interceptor,在16上面一行的卫星那里

  10. 设置Requestbody,13那里显示的就是body的内容

  11. 在发起请求之前执行的脚本,例如requestbody里的那两个random变量,就是每次请求之前临时生成的。

  12. 在收到response之后执行的测试,测试的结果会显示在17的位置

  13. 有四种形式可以选择,form-data主要用于上传文件。x-www-form-urlencoded是表单常用的格式。raw可以用来上传JSON数据

  14. 返回数据的格式,Pretty可以看到格式化后的JSON,Raw就是未经处理的数据,Preview可以预览HTML页面

  15. 点击这里把请求保存到2的位置

  16. 设置environmentvariables和globalvariables,点击右边的x可以快速查看当前的变量。

  17. 测试执行的结果,一共几个测试,通过几个。

这个界面就是免费版的主要内容,和其他API测试工具相比,已经足够好用。如果要使用自动化测试,需要购买9.99美金的Jetpacks,暂时不想购买的话可以试一下Team版Postman。现在是可以免费试用的,不但拥有Jetpacks的功能,还能与其他账户同步Collection。

(三)实例

这里就以我的一个模块的返回验证来做例子了,两个模块间是http请求,返回的是xml数据,要验证,返回数据的个数,传递的参数

1.png

再看验证点Tests:这里的几种snippets很好用,而且这里使用的是js,所以会点js就可以自己写逻辑啦

2.png

点击send之后,可以看到返回的数据

3.png

tests的结果:

4.png

我要验证的是headinfo里的status=0和returnNum>0,下面是test的结果,说明测试通过,这时再回头看Tests中的内容就会发现,tests['status']=s.$.status==='0'中tests['status']被赋成s.$.status==='0',若s.$.status==='0'为true,则case通过,否则fail,就是这么简单,其实主要的关键就是要找到你的验证点,如果只验证返回code,直接用右侧的snipplets中的就可以,tests["Statuscodeis200"]=responseCode.code===200;snipplets就自己用蹩脚的英语理解下吧,responsebody包含字符串、xml转json、responsebody是一个字符串、json变量校验、responseheader校验、返回时间、statuscode、还有tinyvalidator,其实在Tests里是支持js的,所以想怎么写就怎么写,前提是得会点js。

在使用js的时候,需要调试变量,或者说怎么知道我要验证的变量取值是什么呢?想到了windows.alert(),可是什么也没出,然后就是console.log(),发现没有地方能出console,然后google了下,发现chrome是支持的,就是使googledeveloptools支持postman:

http://blog.getpostman.com/2014/01/27/enabling-chrome-developer-tools-inside-postman/

(1)chrome://flags/,启用下面这个

5.png

(2)然后重启chrome和postman,F12打开chromedeveloptools,再点send,就可以log出我们要的东西了

6.png

有了上面这些方法,再复杂的接口测试我们都能搞定,然后就是把设计好的case都放在一个collection中,就是类似于testsuite,然后点击左上角的Runner来执行collection

7.png

附录:这位同学的例子很好的展示了通过设置环境变量来处理这类请求有先后关系的case,很好的例子,转过来啦

http://bayescafe.com/tools/use-postman-to-test-api-automatically.html

1.注册

生成一个随机字符串作为用户名和昵称

postman.setEnvironmentVariable("random_username",("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4));

发起请求

POST/index.php/usersHTTP/1.1
Host:postmanexample.sinaapp.com
Cache-Control:no-cache
Postman-Token:76791813-aac2-71fb-cad4-3e737f37c4d0
Content-Type:application/x-www-form-urlencoded
username=2mjk&password=123456&nickname=2mjk

运行测试、检查结果

tests["Statuscodeis201"]=responseCode.code===201;

2.登录

直接用刚才生成的环境变量发起请求

POST/index.php/authenticationHTTP/1.1
Host:postmanexample.sinaapp.com
Cache-Control:no-cache
Postman-Token:aac7d0ac-e0e3-ecf2-39da-b8dca672e3d7
Content-Type:application/x-www-form-urlencoded
username=2mjk&password=123456

运行测试、检查结果,并将返回的token记录下来

tests["Statuscodeis200"]=responseCode.code===200;
vardata=JSON.parse(responseBody);
postman.setEnvironmentVariable("token",data.token);

3.添加一张卡

先生成一个卡号和卡名

postman.setEnvironmentVariable("random_cardno",Math.round(Math.random()*9999999));
postman.setEnvironmentVariable("random_cardname",("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4));

然后发起请求,这里调用了刚才获取到的Token,放在header的自定义字段里作为鉴权(SAE不能用Authorization这个字段,不清楚原因)

POST/index.php/cardsHTTP/1.1
Host:postmanexample.sinaapp.com
X-Authorization:d4c4a0b7b36c73e7a13b7e24a596093b
Cache-Control:no-cache
Postman-Token:d44d573f-f17a-366c-2cd7-1d5b8b709233
Content-Type:application/x-www-form-urlencoded
cardno=1385526&desc=2mo8

运行测试

tests["Statuscodeis200"]=responseCode.code===200;

4.查询刚才生成的卡

发起请求,调用了刚才生成的卡号

GET/index.php/cards/1385526HTTP/1.1
Host:postmanexample.sinaapp.com
Cache-Control:no-cache
Postman-Token:1e5aca57-c3bb-7404-2791-c639cd60b5c8

运行验证,和刚才生成的卡名对比,并记录新卡的ID

vardata=JSON.parse(responseBody);
tests["checkcardname"]=data.desc===environment.random_cardname;
postman.setEnvironmentVariable("new_card_id",data.id);

5.充值

发起请求,使用了刚才获得的新卡ID
POST/index.php/depositHTTP/1.1
Host:postmanexample.sinaapp.com
X-Authorization:d4c4a0b7b36c73e7a13b7e24a596093b
Cache-Control:no-cache
Postman-Token:388c95e0-b5ce-9bbf-5816-084db7523384
Content-Type:application/x-www-form-urlencoded
cardid=1&amount=10

运行验证(由于是新建的用户,没有余额,无法给卡片充值,故返回403Forbidden)

tests["Statuscodeis403"]=responseCode.code===403;


作者:晶莹的营

原文链接:https://www.cnblogs.com/sparkling-ly/p/5807238.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   摘要:作者在新项目中搭建了python+requests+unittest+HTMLTestRunner接口自动化测试框架,通过修改配置文件实现环境隔离,一份脚本即可在不同的环境执行接口测试用例。  但是没有实现任何形式的消息通知,也没有集成到jenkins,原因很简单,因为还没做到很大,而且用户活跃不够,问题也相对较少,只在上线前后执行一次uat和prod环境。  那这几天想完善一下消息通知功能,让它具备发送消息及报告的功能。  流程  代码  流程及代码功能已在注释中说明。  '''   Created on 2021年5月12日   @au...
            0 0 1337
            分享
          •   据 Eurasia Daily 报道,当地时间周二,德国下萨克森州、萨克森州、黑森州和柏林四个联邦州明确反对在其辖区内关闭大众汽车工厂和裁员。各州经济部长联合签署的文件称:“所有工厂都应当完全保留。”  此外,这些州也反对各汽车制造商之间的竞争以及以牺牲员工利益为代价的地方节约措施。他们提议应签署保障就业和收入的合同。  上述各州在 10 月 10 日签署的一份文件中表示:“这意味着各个工厂之间不会相互竞争。”文件还显示:“德国联邦各州的经济部门将团结一致,密切配合。”这四个州还反对以牺牲员工利益为代价的大规模裁员,并表示续签的长期工作保障合同应确保岗位、保留专业技工。  大众汽车可能首次...
            0 0 274
            分享
          •   背景  对于很多中小型银行来说,数据中台是基于大数据平台基础支撑,支持规则模型计算,大批量计算查询分析,形成统一服务层,为各类数据服务应用赋能。  很多中小型现在面对数据应用的痛点在主要在于:  数据应用主要还是在 T 加1的服务为主,缺乏实时数据服务;  数据服务主要还是集中在报表需求,缺乏数据深入分析能力;  缺乏对历史查询和分析支持不足。  为了解决这些痛点,建设数据中台,增加统一数据实时服务(主要为计算和查询),提升大批量数据处理,数据建模深入分析,亿级数据关联计算时间秒级,增加非结构化数据查询存储能力。  典型应用需求场景  1、风控评级,比如个人对公账户评级,对可疑账户进行倒查...
            1 1 1273
            分享
          • 第一章:什么是软件?计算机系统中与硬件相互依存的另一部分。软件包括程序、数据及其相关文档的完整集合。(1)能够完成预定功能呾性能的可执行指令(program)  (2)使得程序能够适当地操作信息的数据结构(data)  (3)描述程序的操作呾使用的文档(document)软件危机的定义?软件在开发和维护过程中遇到的一系列严重问题。软件危机包含两层含义:(1)如何开发软件 (2)如何维护数量不断膨胀的现有软件。软件危机的表现:(1)软件开发的迚度难以控制,经常出现经费超预算、完成期限拖延的现象。 (2)软件需求在开发初期不明确,导致矛盾在后期集中暴露,从而对整个开发 ...
            0 0 2239
            分享
          • 记得去年这个时候,组内浩浩荡荡地做制度更新,做质量提升,还要求每个组输出落地的措施,基本上是顶着市场的压力给出承诺,并且控制市场投诉的比率和数量肉眼可见的下降。虽然辛苦,但也值得。自研和外包测试有一个很大的区别,外包的工作只需要把事情按时做完就行,但是自研的工作会让你想方设法做提升,做优化,按照优化的成果做绩效评估。所以在不同环境就做好相应的处理吧。下面就简单举个例子:一、当前的问题(线上问题分析及以往版本复盘):版本转测的时候没有整体概念,经常是后端管后端的,前端管前端的转测邮件形同虚设,没有转测意见,也没有附上自测结果修改的问题很容易影响以往老功能:参考礼品卡bug频繁,没有进行深入分析,...
            3 3 6897
            分享
      • 51testing软件测试圈微信