作为邮递员的工程师,我和许多使用邮递员测试他们的API的人交谈。多年来,我收集了10个技巧和技巧,以简化和自动化API测试任务。
提示#1:写测试
API测试的第一步就是要做到这一点。没有好的测试,就不可能对您的API的行为,一致性或向后兼容性充满信心。随着您的代码库随着时间的推移而变化,测试将通过发现突破性更改来节省时间和沮丧。
在Postman中编写测试很容易,并使用JavaScript语法。测试简单的东西,如HTTP状态代码,响应时间和标题都可以在一行代码中完成,如下所示:
但是您也可以编写更高级的JavaScript逻辑来验证响应,检查自定义业务规则,将数据保存到变量中,甚至动态地控制Postman的工作流程。
提示#2:不要混合测试和文档
许多人使用Postman Collections来记录他们的API,作为可以在团队成员之间轻松共享的示例请求的集合,或作为客户的公共API文档。对于这两种用例,您的收藏包含每个API端点的详细说明,通用API工作流程的演练,身份验证要求,可能的错误响应列表等都是有意义的。
另一方面,您的API测试完全独立于目的。
首先,观众是不同的。而API文档是API的消费者,测试是针对API 的作者
其次,内容是不同的。一个坚实的测试套件将包括许多边缘案例,有意的错误输入(测试错误处理),并且可能会显示敏感信息,所有这些信息对您的API消费者来说都是无关紧要的或令人困惑的。
最后,作者可能会有所不同。文档(特别是公共文档)可能由您的营销团队或技术作者撰写,而测试则由构建API的开发人员或负责验证API的测试人员编写。
由于所有这些原因,我强烈建议您将API测试与您的API文档分开收集。是的,这意味着你必须管理两个不同的集合,但是根据我的经验,这些集合的内容最终会有很大的不同,它们之间几乎没有重叠或重复。而且,正如本文后面将会看到的那样,将测试分开在自己的集合中,开启了一些强大的自动化可能性。
>奖金提示:您通常用于您的API文档的描述字段可以重新调整为测试描述。这是记录测试的好方法,所以开发人员和测试人员知道正在测试的内容,预期的输出结果等等。
提示#3:将测试组织到文件夹中
随着您的API复杂性的增长,组织您的测试将变得很有意义,并且可以很容易地找到它。我建议您使用文件夹按资源,测试套件和工作流分组请求。
资源
为每个API的资源(用户,订单,产品等)创建一个顶级文件夹。
测试套房
第二级文件夹将是每种资源的测试套件,例如“ 开始新订单 ”,“ 编辑现有订单 ”,“ 取消订单 ”等。
对于仅需要单个API调用的简单测试,就不需要第三级文件夹。您可以直接在测试套件文件夹下创建请求。一定要给你的请求有意义的名字来区分它们,并描述他们正在测试什么。例如,“ 编辑现有订单 ”测试套件文件夹可能包含“ 添加产品 ”,“ 删除产品 ”,“ 更改送货地址 ”等请求。
工作流程
第三级文件夹用于跨越多个API调用的更复杂的测试。例如,您的API可能有一个结帐流程,涉及单独的呼叫,以从购物车创建订单,输入送货地址,选择出货方式并提交付款信息。在这种情况下,您将创建一个名为“ Checkout ” 的“工作流”文件夹,其中包含三个请求。
提示#4:JSON模式验证
许多现代API使用某种形式的JSON模式来定义其请求和响应的结构。邮递员包括tv4库,可以轻松编写测试来验证您的API响应是否符合您的JSON模式定义。
当然,您可能不想在测试脚本中对JSON Schema进行硬编码,特别是因为您可能需要为集合中的许多请求使用相同的模式。因此,您可以将模式作为JSON字符串存储在Postman环境变量中。那么你可以简单地在测试脚本中使用变量,如下所示:
提示#5:重用代码
在之前的提示中,我向您展示了如何通过将其存储在环境变量中来容易地将多个请求的JSON模式重用于您的集合中。您还可以通过利用该eval()功能以相同的方式重用JavaScript代码。
大多数API具有适用于大多数(或全部)端点的一些常见规则。应始终设置某些HTTP标头,或响应主体应始终为特定格式,或者响应时间必须始终在可接受的限度内。而不是为每个请求重写这些测试,您可以在收集的第一个请求中写入一次,然后在每个请求之后重新使用它们。
集合中的首要要求:
集合中的其他要求:
可以存储在变量中并以这种方式重用的代码量没有限制。实际上,您可以使用这个技巧重用整个JavaScript库,包括来自NPM,Bower和GitHub的许多第三方库。
提示6:邮递员BDD
Postman的默认测试语法非常简单易学,但很多人喜欢流行的JavaScript测试库(如摩卡和柴)的语法。我恰巧是那些人之一,这就是为什么我创建了邮递员BDD。Postman BDD允许您使用摩卡的BDD语法编写Postman测试。它利用上一个提示的“可重用代码”技巧来加载Chai和Chai-HTTP,这意味着您可以这样编写测试:
除了流畅的语法,Postman BDD还有其他一些功能和优点,使Postman测试更加轻松,更强大。按照安装说明进行操作或查看样品集合以开始使用。
提示#7:使用邮递员收集赛跑者自动进行测试
到目前为止,我们专注于运行一个请求并测试响应。在编写测试时,这种方法非常有效,但一旦编写完毕,您将需要一种简单的方法来快速运行所有请求,并在单个视图中查看结果。那就是邮递员的收藏运动员。
提示#8:用Newman自动进行测试
邮递员收集跑步者是运行所有测试并查看结果的好方法,但仍需要您手动启动运行。如果您希望将Postman测试作为Continuous Integration或Continuous Delivery管道的一部分运行,则需要使用Newman CLI。
Newman可以很容易地集成到Jenkins,AppVeyor,Bamboo,CodeShip,Travis CI,Circle CI或任何其他代码部署管道工具中。它支持各种输出格式,包括人性化的控制台输出,以及输出到JSON或HTML文件。
提示#9:使用Postman监视器自动执行测试
您可以使用Postman监视器定期自动运行Postman测试,例如每天晚上或每5分钟一次。如果您的任何测试的任何故障系统会自动将收到通知,你甚至可以集成与各种第三方服务,如PagerDuty,松弛,Datadog,和更多。
邮递员监视器以与邮递员收集运动员相同的熟悉布局显示您的测试结果,因此可以轻松地将结果与Postman应用进行比较。
提示#10:动态控制测试工作流程
默认情况下,邮递员收藏运动员,纽曼和邮递员监视器将按顺序在您的收藏中运行每个请求。但是您可以使用该postman.setNextRequest()功能来更改顺序。这允许您有条件地跳过某些请求,重复请求,提前终止收集等。
这个setNextRequest()功能很简单,但是它能够实现各种强大的用例,从生成Spotify播放列表,检查您的网站是否存在破碎的链接,甚至决定喂狗。
这是使用Postman的非线性工作流程的第3部分系列中的第一个。
市场上有一些产品可用于创建和执行API工作流程。然而,它们中的大多数都受到线性,非反应性执行的限制。我们知道我们可以创造更有效的东西,并决定为Postman添加工作流程支持。Postman 4.0与命令行伴侣Newman结合,现在足够强大,可以帮助您在收藏集中创建和执行非线性工作流!
这个最新版本建立在我们现有的Collection Runner上。它引入了一个名为postman.setNextRequest的新函数。从名称中可以看出,您只需要指定后续请求的名称,并且运行程序将负责其余的操作。它具有以下签名:
postman.setNextRequest(“Request Name”);
同时
postman.setNextRequest(null);
终止执行。
下面我们将介绍一个示例工作流程,以便您了解这个工作原理。
你可能早些时候遇到过Postman的首席幸福官。

这是库珀。他一岁,每天吃三餐。他只允许吃6个预先批准的食物。我们将它们存储在数据库中。库珀非常挑剔。你不能在同一天重复一个项目,除非你想冒发脾气。所以我想在本周初为他生成一个随机的膳食计划。

工作流程:

首先使API调用从数据库中获取Cooper批准的食品列表。
然后它每天创建一个入口,每天7次,每周7天
一天中的所有3餐必须是独一无二的。
如果API调用失败,那么糟糕的库珀就会饿了 
您可以在这里查看收集的文件,并使用以下按钮下载收藏集
如果你好奇,我跑了这个集合,这是Cooper本周吃的东西!

我希望你觉得这很有用。postman.setNextRequest只是一个开始,我们将推出更多的API,以便在Postman的未来几个季度轻松创建复杂的工作流程。敬请关注!通常,postman.setNextRequest参数与请求相关联,可以在预请求或测试脚本中设置。在多于一个作业的情况下,考虑最后一个设定值。如果postman.setNextRequest不存在,则运行程序默认为线性执行并移动到下一个请求。
更新:使用Postman的非线性工作流程的第2部分和第3部分
获取一个返回的HTML文件进行校验
我们包括一个名为CheerioJS的新图书馆。Cheerio模拟了jQuery的核心API和功能,而不需要浏览器或DOM。这种方法在Postman内部使用时看起来相当整洁。看看测试脚本中的以下代码示例:
1
2
3
4
5
6
7
8
9
10
var html,
titleText;
// load the response body as HTML using cheerio
// and using cheerio's jQuery like .find API, get the H1 tag
html = cheerio(responseBody);
titleText = html.find('h1').text();
// add a test that ensures that there is some H1 content
tests["page must have h1 heading"] = Boolean(titleText);
Newman内的类似代码的实时样本:https://tonicdev.com/shamasis/newman-cheerio
上述代码从HTML响应中提取标题,并测试它是否有一些文本。该代码将不得不通过简单地更换使用jQuery的工作cheerio有jQuery。总之,如果你知道你在jQuery的方式,你也知道啦啦啦!
newman-cheerio
endpointsharetweet
1
require('newman').run({
2
   // pass a collection that fetches HTML
3
   collection: {
4
       item: [{
5
           request: 'http://httpbin.org/html',
6
           event: [{
7
               listen: 'test',
8
               script: {
9
                   type: 'text/javascript',
10
                   // add a script that checks whether heading H1 is present in HTML
11
                   exec: [
12
                       'tests["response body received"] === !!responseBody;',
13
                       'var html = cheerio(responseBody);',
14
                       'console.log("Heading H1: " + html.find("h1").text());', // log it
15
                       'tests["html has h1 heading"] = !!html.find("h1").text();'
16
                  ]
17
              }
18
          }]
19
      }]
20
  },
21
   abortOnFailure: true // ensures run stops abruptly when any error occurs.
22
})
23
   // log all runtime console to real console
24
  .on('console', function (e, args) {
25
       console.log.apply(console, args.messages);
26
  })
27
   // on complete mark the same
28
  .once('done', function (e) {
29
       console.log('run complete ' + (e ? 'with' : 'without') + ' errors');
30
       e && console.log(e); // log error
31
  });
EventEmitter
_events: Object {console: EE, done: EE}
EventEmitter Prototype
"Heading H1: Herman Melville - Moby-Dick"
"run complete without errors"

Postman+Newman执行自动化测试相关推荐

  1. newman执行测试_Postman+Newman执行自动化测试

    Postman+Newman执行自动化测试 Postman+Newman执行自动化测试 作为邮递员的工程师,我和许多使用邮递员测试他们的API的人交谈.多年来,我收集了10个技巧和技巧,以简化和自动化 ...

  2. python做自动化控制postman_使用postman+newman+python做接口自动化测试

    postman是一款API调试工具,可用于测试接口,相类似的工具还有jmeter.soupUI.通过postman+newman+python可以批量运行调试接口,达到自动化测试的效果. 1.Post ...

  3. 用Postman+Newman+Jenkins,0成本实现接口自动化测试

    本文目录: 一.是什么Newman 二.如何安装 三.如何使用 1.运行本地文件 2.运行在线文件 3.以node.js库运行 4.导出报告 四.命令行测试真实接口 1.导出collection文件 ...

  4. newman执行测试_newman执行postman脚本

    postman是基于javascript语言编写的,而导出的json格式的postman脚本也无法直接在服务器运行,它需要在newman中执行(可以把newman看做postman脚本的运行环境) 所 ...

  5. newman执行测试_用Postman/Newman搞定API测试

    说到Postman相信大家都已经很熟悉了,我们平时用它可以做API测试,trouble shooting,辅助开发等,能够很方便的进行手工测试和调试. 今天我们来说postman除了这些功能之外的其他 ...

  6. 实现Postman+Newman+Git+Jenkins+钉钉/邮件提醒接口自动化测试持续集成

    接口测试脚本一般的执行流程 目录 接口测试脚本一般的执行流程 Windows系统Newman安装 Centos系统Newman安装 命令行执行Postman脚本生成测试报告 Postman脚本持续集成 ...

  7. newman执行Postman测试用例

    1.安装nodeJS环境:http://nodejs.cn/download/ 安装直接双击运行即可,安装完之后,检查一下node环境变量 打开cmd窗口,运行node -v 和npm -v 两个命令 ...

  8. 软件测试须知基于PostMan的接口自动化测试

    临近年底,公司任务也不是很多,趁这个机会老大让我研究了一下PostMan的脚本自动化测试.作为一个前端开发,说实话,对于PostMan的操作,仅仅限于新建请求->填写url地址和参数->s ...

  9. postman如何测试php接口_基于Postman的API自动化测试

    基于Postman的API自动化测试 1.安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2.发送请求 Postman最基础的功能就是发送http请求,支持G ...

最新文章

  1. NVIDIA Nsight Systems CUDA 跟踪
  2. finecms设置伪静态后分享到微信不能访问怎么处理
  3. 计算机网络应用基础 王建珍,计算机网络应用基础
  4. 计算机网络sdn,刘少伟:SDN重新定义网络
  5. 张恩民 php,php100视频教程第11讲(制作PHP+MYSQL留言板 上)中,张恩民老师提到的php100-11.txt文档...
  6. Zookeeper分布式一致性原理(十):Zookeeper在大型分布式系统的应用
  7. oracle 拆分逗号转行_一个列用逗号隔开,列转行,看看是否有更好的办法。
  8. python画图程序没有图_python画图 - v0
  9. 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用
  10. Java反射机制深入研究
  11. Linux内存管理 brk(),mmap()系统调用源码分析1:基础部分
  12. PMON和SMON的功能
  13. SAP License:SAP 现金流量表实现方法谈
  14. 思科模拟器 简单网络连接操作
  15. 滴滴配合警方调证不超 10 分钟;苹果否认恶意芯片报道;贝索斯建火箭中心 | 极客头条...
  16. uni-app在小程序开发者工具:TypeError: Cannot read property ‘forceUpdate‘ of undefined
  17. Code Review流程
  18. PHP语言之表单基础——educoder答案
  19. C语言指针理解(一)
  20. 【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦

热门文章

  1. Unity快速入门教程-详解预制体(Prefab)及其实例化Instantiate
  2. 打造迪士尼梦幻体验的神奇魔法
  3. matlab画弯曲圆柱体,matlab – 将平面弯曲成闭合的表面/圆柱体
  4. 基于asp.net116教师工资管理系统
  5. Book Reading
  6. 手机里舍不的删除的40条搞笑短信(转自Baidu贴吧)
  7. Codeforces 1207 C. Gas Pipelin(线性DP)
  8. pipeline入门(课程贴-未实践)
  9. 封神台靶场writeup
  10. 用RGBD投影激光雷达数据:depthimage_to_laserscan