作为邮递员的工程师,我和许多使用邮递员测试他们的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文档的描述字段可以重新调整为测试描述。这是记录测试的好方法,所以开发人员和测试人员知道正在测试的内容,预期的输出结果等等。
Postman+Newman执行自动化测试
提示#3:将测试组织到文件夹中
随着您的API复杂性的增长,组织您的测试将变得很有意义,并且可以很容易地找到它。我建议您使用文件夹按资源,测试套件和工作流分组请求
资源
为每个API的资源(用户,订单,产品等)创建一个顶级文件夹。
测试套房
第二级文件夹将是每种资源的测试套件,例如“ 开始新订单 ”,“ 编辑现有订单 ”,“ 取消订单 ”等。
对于仅需要单个API调用的简单测试,就不需要第三级文件夹。您可以直接在测试套件文件夹下创建请求。一定要给你的请求有意义的名字来区分它们,并描述他们正在测试什么。例如,“ 编辑现有订单 ”测试套件文件夹可能包含“ 添加产品 ”,“ 删除产品 ”,“ 更改送货地址 ”等请求。
工作流程
第三级文件夹用于跨越多个API调用的更复杂的测试。例如,您的API可能有一个结帐流程,涉及单独的呼叫,以从购物车创建订单,输入送货地址,选择出货方式并提交付款信息。在这种情况下,您将创建一个名为“ Checkout ” 的“工作流”文件夹,其中包含三个请求。
Postman+Newman执行自动化测试
提示#4:JSON模式验证
许多现代API使用某种形式的JSON模式来定义其请求和响应的结构。邮递员包括tv4库,可以轻松编写测试来验证您的API响应是否符合您的JSON模式定义。
当然,您可能不想在测试脚本中对JSON Schema进行硬编码,特别是因为您可能需要为集合中的许多请求使用相同的模式。因此,您可以将模式作为JSON字符串存储在Postman环境变量中。那么你可以简单地在测试脚本中使用变量,如下所示:
提示#5:重用代码
在之前的提示中,我向您展示了如何通过将其存储在环境变量中来容易地将多个请求的JSON模式重用于您的集合中。您还可以通过利用该eval()功能以相同的方式重用JavaScript代码。
大多数API具有适用于大多数(或全部)端点的一些常见规则。应始终设置某些HTTP标头,或响应主体应始终为特定格式,或者响应时间必须始终在可接受的限度内。而不是为每个请求重写这些测试,您可以在收集的第一个请求中写入一次,然后在每个请求之后重新使用它们。
集合中的首要要求:
集合中的其他要求:
可以存储在变量中并以这种方式重用的代码量没有限制。实际上,您可以使用这个技巧重用整个JavaScript库,包括来自NPMBowerGitHub的许多第三方库。
提示6:邮递员BDD
Postman的默认测试语法非常简单易学,但很多人喜欢流行的JavaScript测试库(如摩卡柴)的语法。我恰巧是那些人之一,这就是为什么我创建了邮递员BDD。Postman BDD允许您使用摩卡的BDD语法编写Postman测试。它利用上一个提示的“可重用代码”技巧来加载ChaiChai-HTTP,这意味着您可以这样编写测试:
除了流畅的语法,Postman BDD还有其他一些功能和优点,使Postman测试更加轻松,更强大。按照安装说明进行操作或查看样品集合以开始使用。
提示#7:使用邮递员收集赛跑者自动进行测试
到目前为止,我们专注于运行一个请求并测试响应。在编写测试时,这种方法非常有效,但一旦编写完毕,您将需要一种简单的方法来快速运行所有请求,并在单个视图中查看结果。那就是邮递员的收藏运动员
Postman+Newman执行自动化测试
提示#8:用Newman自动进行测试
邮递员收集跑步者是运行所有测试并查看结果的好方法,但仍需要您手动启动运行。如果您希望将Postman测试作为Continuous Integration或Continuous Delivery管道的一部分运行,则需要使用Newman CLI
Newman可以很容易地集成到JenkinsAppVeyorBambooCodeShipTravis CICircle CI或任何其他代码部署管道工具中。它支持各种输出格式,包括人性化的控制台输出,以及输出到JSON或HTML文件。
Postman+Newman执行自动化测试
提示#9:使用Postman监视器自动执行测试
您可以使用Postman监视器定期自动运行Postman测试,例如每天晚上或每5分钟一次。如果您的任何测试的任何故障系统会自动将收到通知,你甚至可以集成与各种第三方服务,如PagerDuty松弛Datadog,和更多
邮递员监视器以与邮递员收集运动员相同的熟悉布局显示您的测试结果,因此可以轻松地将结果与Postman应用进行比较。
Postman+Newman执行自动化测试
提示#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的首席幸福官

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


Postman+Newman执行自动化测试工作流程:
Postman+Newman执行自动化测试

首先使API调用从数据库中获取Cooper批准的食品列表。
然后它每天创建一个入口,每天7次,每周7天
一天中的所有3餐必须是独一无二的。
如果API调用失败,那么糟糕的库珀就会饿了 

您可以在这里查看收集的文件,并使用以下按钮下载收藏集
Postman+Newman执行自动化测试
如果你好奇,我跑了这个集合,这是Cooper本周吃的东西!
Postman+Newman执行自动化测试
我希望你觉得这很有用。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的工作cheeriojQuery。总之,如果你知道你在jQuery的方式,你也知道啦啦啦!

newman-cheerio
Postman+Newman执行自动化测试
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
  });
Postman+Newman执行自动化测试
EventEmitter
Postman+Newman执行自动化测试
_eventsObject {console: EE, done: EE}
Postman+Newman执行自动化测试
EventEmitter Prototype
"Heading H1: Herman Melville - Moby-Dick"
"run complete without errors"

相关文章:

  • 2018-04-02
  • 2021-12-05
  • 2021-05-16
  • 2021-06-29
  • 2021-06-29
  • 2020-03-23
  • 2021-07-30
  • 2021-10-17
猜你喜欢
  • 2021-06-26
  • 2020-06-02
  • 2021-11-01
  • 2021-10-05
  • 2021-09-11
  • 2021-06-14
  • 2018-12-26
  • 2021-08-03
相关资源
相似解决方案