• 0
  • 0
分享
  • API自动化测试利器Postman——软件测试圈
  • 恬恬圈 2021-09-30 13:50:52 字数 4814 阅读 1262 收藏 0

自从开始做API开发之后,我就在寻找合适的API测试工具。一开始不是很想用Chrome扩展,用的WizTools的工具,后来试过一次Postman之后就停不下来了,还买了付费的Jetpacks。推出TeamSyncBeta之后我又把这个工具推广给团队,作为API文档使用。看到中文网络上关于这个工具的文章并不多,于是决定写一篇小文介绍一下。

一、基本功能

Postman的功能在文档中有介绍。不过文档略啰嗦,这里简单介绍一下主界面,入门功能就都提到了。

1.png

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

二、测试工具

测试工具主要包括三部分,在发起请求之前运行的Pre-request,在收到应答之后运行的Test,和一次运行所有请求的CollectionRunner

1.Pre-request

Pre-request的编写界面如下:

2.png

Pre-request和Test用的语言都是JavaScript,Postman在一个沙盒里执行代码,提供给用户的库和函数可以在这里查看。而常用的功能都可以通过右边的CodeSnippets实现,点击就可以插入到代码区域。

可以看到Pre-request里常用的功能就两种,设置环境变量和设置全局变量。这条请求的pre-request就是在注册之前生成一个字符串作为随机用户名。

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

其他用法还包括在发起请求之前获取当前的时间戳放在参数里:

postman.setEnvironmentVariable("unixtime_now",Math.round(newDate().getTime()/1000));

当然也可以用来生成校验串。总之,在发请求之前需要手动修改的东西,都可以考虑用脚本自动实现。

2.Test

Test的编写界面如下:

3.png

和Pre-request相比,Test的Snippets就丰富多了,例如检查状态码、检查响应串、验证JSON、检查header、限制应答时间。

如果需要将服务器响应的数据保存下来,用在后面的请求里,也需要在这一步做。

在图中的Test里,我首先检查了状态码为200,然后解析返回的JSON,把环境变量里的token设为JSON里的token。

3.CollectionRunner

当编写了很多测试之后,就可以使用CollectionRunner来自动运行整个Collection了,入口就在主界面最上面一行的Runner。选好Collection、Environment,如果有需要还可以载入JSON和CSV作为数据源。点击StartTestRun,就可以看到结果了。

4.png

这里可以看到一共发起了5次请求,每个请求各有一个Test,全部Pass。(虽然最后一个请求的返回是403,但是这个请求的期望返回值就是403,所以也是Pass的)

三、示例

最后完整的看一下我用的例程。这个例子是一个非常简单的小系统,用户可以注册并登录,然后在系统里新建充值卡,并给这张卡充值。整个流程如下:

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.bayes.cafe
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.bayes.cafe
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.bayes.cafe
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.bayes.cafe
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.bayes.cafe
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;

P.S.postmanexample.bayes.cafe这个网站是真实存在的,可以Import我上传的Collection(https://www.getpostman.com/collections/96b64a7c604072e1e4ee)到你自己的Postman中,并设置环境变量url为http://postmanexample.bayes.cafe,就能运行这个Collection看效果了。


作者:贝叶书

原文链接:https://www.bayescafe.com/tools/use-postman-to-test-api-automatically.html

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   京东物流今日发文称,将陆续投放循环包装 150 万个循环快递包装,推广循环包装的共享回收模式,至 2024 年底,仅这一举措将减少纸箱、泡沫箱、塑料袋等一次性包装超 1 亿个。  京东物流方面称,将重点投放循环保温周转箱和青流箱(堆叠结构中空板箱),并探索循环快递包装袋在特定场景中应用。  循环包装将采用标准化尺寸,取消品牌元素印刷,有助于行业内实现资源共享、模式共用。京东物流将在全国超 30 个城市规模化投放循环包装,在京东快递站点的个人寄递和商家揽收中使用循环包装进行打包,并优先用于同城寄递业务。同时,京东物流还将联合多家品牌商,在工厂生产、加工环节使用循环箱进行包装,力求将商品包装与...
            0 0 934
            分享
          •   随着中国防疫措施优化调整,越来越多的跨国公司高管正计划前往中国拜访客户、参加活动。  2月13日,澎湃新闻记者从梅赛德斯-奔驰方面了解到,梅赛德斯-奔驰集团股份公司董事会主席康林松(Ola K?llenius)计划将访华。2022年,奔驰在全球范围内交付204.39万辆乘用车。其中,中国市场全年累计交付75.17万辆,同比下滑0.9%,新能源车型则同比增长143%。  此前据《华尔街日报》12日报道,跨国公司高管正在重返中国寻求商机。大众汽车公司的高管在1月底2月初访问了中国,梅赛德斯-奔驰公司的管理层人员也在近日有访问中国的计划,苹果公司CEO蒂姆·库克(Tim Cook)、辉瑞CEO艾...
            0 0 887
            分享
          • IT之家 9 月 13 日消息,苹果今日发布了 iOS 16 正式版更新,具体版本号为 (20A362),这是专为 iPhone 设计的最新操作系统。与 Apple 的所有软件更新一样,iOS 16 可以免费下载。 iOS 16 可在 iPhone 8 及更高版本上使用,苹果今年不再支持 iPhone 6s、iPhone 7 / Plus 和初代 iPhone SE。iOS 16 通常伴随着 iPadOS 16,但苹果今年仍在开发 iPadOS 16 功能,例如台前调度,因此 iPadOS 16 已被推迟,预计 iPadOS 16.1 更新将在 10 月份与 iOS 16.1 一起发布。苹果 ...
            0 0 1274
            分享
          •   业内对软件故障频发问题进行大量研究表明:主要原因是在软件开发过程中质量保证不佳。执行严格的质量保障测试主要目的是防范发布质量差的产品,因为漏掉的小缺陷可能会导致公司经济上巨额的财务损失。一个很好的例子是Flud,它是iPad,iPhone,Android和Windows Phone的社交新闻阅读器应用程序,被称为“第一个真正的社交新闻阅读器”。但是由于软件质量不佳,频频出现启动失败问题。Flud团队的重视开发忽略测试,当产品最终发布时,它不可避免会出现缺陷。即使一切都已解决,但不良的声誉和糟糕的用户体验仍然阻碍了它的成功。因此,Flud公司倒闭了。  保障高质量软件的方法是实施有效的QA管...
            0 0 1112
            分享
          • 一、为什么要制定流程?先谈谈为什么要制定流程及流程对于工作拿到好结果的重要性。首先问大家五个问题:流程是什么?因人、团队、业务类型、迭代速度、资源紧张程度而异。我觉得流程是保障团队目标达成的最佳实践。为什么要有流程?没有流程会导致团队中个体各自为战,目标不统一,进度不协调,资源配给失衡而导致交付质量下降。流程能解决什么问题?保证团队大方向一致,尽可能降低由于人员能力、认知水平、资源不足、意外情况导致的项目延期或质量下降。流程能带来什么保障?保障团队中大部分人的利益不受影响和保障工作中遇到沟通或争执时可以据理力争;保障工作过程中的最佳实践可以最大程度保留并执行。如何高大上的理解流程?风险可识别+...
            0 0 2009
            分享
      • 51testing软件测试圈微信