使用Dredd测试您的API


使用Dredd测试您的API

文章插图
【使用Dredd测试您的API】 
通常 , 在开发应用程序时 , 前端和后端开发人员在实现路径上采用两条不同的路径 。前端开发人员更多地是设计驱动的 , 而后端开发人员则更注重数据 。这通常会导致潜在的整合差距 , 其中一个团队在提供的数据 , 响应的结构等方面具有某些期望 , 而另一个团队实现完全不同的东西 。
介绍在本文中 , 我们将展示一个技术堆栈 , 旨在弥合前端和后端开发人员之间的差距 , 使我们能够记录API并在实现后不断测试它 。
本文中介绍的堆栈包含以下内容:
  • Dredd - 使用API?? Blueprint和Swagger API描述格式的API测试工具
  • API Blueprint - 规范语言 , 允许我们以类似Markdown的语法记录我们的API
  • Drakov - 可以使用我们API的API蓝图描述并设置模拟服务器来托管端点的工具
本文中的示例将使用简单的Node.js API和Express中间件显示 。
安装和设置Dredd基于Node.js , 因此在安装之前 , 请确保在您的计算机上安装了Node.js和npm 。它可以使用以下命令安装为npm包:
> npm install -g dredd安装完成后 , 您可以通过运行来检查它是否正确安装:
> dredd --versionAPI Blueprint描述文件的简单示例
假设我们有一个带端点的API来创建新用户:
POST /api/users它接受包含电子邮件和密码值的JSON请求正文:
{ "email": "testing@email.com", "password": "pa55w0rd"}用于测试以下端点的API Blueprint规范如下所示:
FORMAT: 1A# Dredd example## Users [/api/users]### Create User [POST]+ Request (Application/json) { "email": "test@email.com", "password": "pa55w0rd" }+ Response 200 (application/json; charset=utf-8) + Headers jwt-token: (string, required) + Body { "id": 1, "email": "test@mail.com", "password": "pa55w0rd", "provider": "local", "role": "user" }我们可以通过两种方式根据Blueprint文件验证API实现 。
手动运行Dredd使我们能够通过指定API蓝图文件的名称和API的URL来运行临时测试:
> dredd api-description.apib http://localhost:9090上面的命令假设API Blueprint文件名为api-description.apib , 并且您的API在端口9090上的本地计算机上运行 。根据您的设置 , 值可能会有所不同 。
配置运行还有一种更简单的方法来设置Dredd , 即运行> dredd init命令 , 该命令运行配置向导以帮助您在项目根目录中创建dredd.yml文件 。从交互式向导回答几个问题后 , 只需输入以下命令即可运行测试:> dredd 。如果配置正确 , Dredd将使用您向向导提供的命令启动后端服务器进程并开始测试 。
在这两种情况下 , 输出都与此类似:
> dreddinfo: Configuration './dredd.yml' found, ignoring other arguments.warn:Apiary API Key or API Project Subdomain were not provided.Configure Dredd to be able to save test reports alongside your Apiary API project:https://dredd.readthedocs.io/en/latest/how-to-guides/#using-apiary-reporter-and-apiary-testsinfo: Starting backend server process with command: npm run startinfo: Waiting 3 seconds for backend server process to start> dredd-example@0.0.1 start /Users/code/dredd-example> node server/app.jsExpress server listening on 9000, in development modeinfo: Beginning Dredd testing...pass: POST (200) /api/users duration: 55mscomplete: 1 passing, 0 failing, 0 errors, 0 skipped, 1 totalcomplete: Tests took 901msPOST /api/users 200 4.167 ms - 151complete: See results in Apiary at: https://app.apiary.io/public/tests/run/f1642892-a4eb-4970-8423-5db5c986a509info: Backend server process exited由于我们没有指定任何API密钥 , Dredd警告我们测试运行不会保存到我们的Apiary帐户 。在这种情况下 , 它们被保存为公共运行并保存24小时 , 这对于本文来说已经足够了 。让我们使用输出中的URL打开我们的测试运行(注意 - 您的URL会有所不同):https://app.apiary.io/public/tests/run/f1642892-a4eb-4970-8423-5db5c986a509
在Test Run Viewer中 , 我们可以检查测试运行中的每个请求 , 返回的响应 , 差异和结果 。
使用挂钩进行设置和拆卸与许多其他测试框架一样 , Dredd还支持添加挂钩以运行设置和拆卸代码 , 编写自定义期望 , 处理授权以及在测试之间共享数据 。钩子可以用许多支持的语言编写 , 在本文中 , 我们将看到如何在本机支持的Node.js中添加钩子 。


推荐阅读