首页 小编推荐 正文

【API检测】应用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|首页

一般,在开发运用程序时,前端和后端开发人员在完结途径上选用两条不同的途径。前端开发人员更多地是规划驱动的,而后端开发人员则更重视数据。这一般会导致潜在的整合距离,其间一个团队在供给的数据,呼应的结构等方面具有某些期望,而另一个团队完结彻底不同的东西。

介绍

在本文中,咱们将展现一个技能仓库,旨在弥合前端和后端开发人员之间的距离,使咱们可以记载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 --version

API 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。 假如装备正确,Dr韩加富edd将运用您导游游供给的指令发动后端服务器进程并开端测验。

在这两种情况下,输出都与此相似:

> dredd前列腺按摩
info: Configuration './dredd.yml' found, ignoring other arg【API检测】运用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|主页 uments.
warn:
Apiary API Key or API Project Subdomain were not p囿rov雷蛇官网ided.
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-tests
info: Starting backend server process with command: npm run start
info: Waiting 3 seconds for backend server process to start
> dredd-example@0.0.1 start /Users/code/dredd-example
> node server/app.js
Express server listening on 9000, in development mode
info: Begin巴比龙ning Dredd testing...
pass: POST (200) /api/users duration: 55ms
complete: 1 passing, 0 failing, 0 errors, 0 skipped, 1 total
complete: Tests took 901ms
POST /api/users 200 4.167 ms - 151
complete: See results in Apiary at: https://app.apiary.io/public/tests/run/f1642892-a4eb-4970-8423-5db5c986a509斑马斑马
info: Backend server process exited

由摩恩电气于咱们没有指定任何API密钥,Dredd正告咱们测验运转不会保存到咱们的Apiary帐户。 在这种情况下,它们被保存为公共运转并保存24小时,这关于本文来说现已足够了。 让咱们【API检测】运用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|主页 运用输出廉江气候中的URL翻开咱们的测验运转(留意 - 您的URL战役模仿器会有所不同):https://app.apiary.io/public/tests/run/f1642892-a4eb-4970-8423-5db5c98紫苏的成效与效果6a50马小乐9

在T柳家est Run Viewer【API检测】运用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|主页 中,咱们可以查看测验运转中的每个恳求,回来的呼应,差异和成果。

运用挂钩进行设置和拆开

与许多其他测验结构相同,Dredd还支撑增加挂钩以运转设置和拆开代码,编写自界说期望,处理授权以及在测验之间同享数据。 钩子可以用许多支撑的言语编写,在本文中,咱们将看到如安在本机支撑的Node.js中增加钩子。

咱们首要在项目中增加一个钩子文件(在咱们的比如中,咱们可以将它增加到项目根目录并命名为dredd-hooks.js)。

有两种办法可以让Dredd运用钩子文件。 一种是手动增加指令参数和咱们的钩子文件的途径:

> dredd --hookfiles=dredd-hooks.js

另一种办法是修改咱们的dredd.yml文件并经过设置hookfiles特点来更新装备。

dry-run: null
hookfiles: dredd-hooks.js
language: nodejs
sandbox: false
server: npm run start
server-wait: 3
init: false
custom: {}
names: false
only: 担担面[]
reporter: apiary
output: []
header: []
sorted: false
user: null
inline-errors: false
details: false
method: []
color: true
level: info
timestamp: false
silent: false
path: []
hooks-worker-timeout: 5000
hooks-worker-connect-timeout: 【API检测】运用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|主页 1500
hooks-worker-connect-retry: 500
hooks-worker-after-connect-wait: 100
hooks-worker-term-timeout: 5000
hooks-worker-term-retry: 500
hooks-w【API检测】运用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|主页 orker-handler-host: 127.0.0.1
hooks-worker-handler-port: 61321
config: ./dredd.yml
b【API检测】运用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|主页 lueprint: api-description.apib
endpoint: 'http://localhost:9000'

现在咱们有了文件,咱们可以开端环绕每个业务编写代码。 Dredd在API蓝图描绘文件(.apib)中按称号标识业务。 要在测验运转期间列出业务称号,可以增加--names指令参数:> dredd --names。

在咱们的示例中,咱们有一个名为Users> Create User的业务,咱们将在代码中引用它。

当咱们的API中有许多端点时,挂钩特别重要,咱们不期望依赖于它们履行的任何特定次序。 例如,假如咱们有一个删去用户的端点,为了独自测验它(不依赖于首要运转的Create User端点),咱们必须在履行测验之前创立一个测验用户。 这是钩子文件的姿态:

var hooks = require('hooks');
var User = require('../dredd-example/server/api/user/user.service');
var testStash = {
newUserId: null
};
hooks.before('Users > Delete User', function(transaction) {
horedheadoks.log('Executing hook "before" transaction "Users > Delete User"');
User.save({
email: 'user@test.com',
password: '12345'
}, function(err, newUser) {
if (!err) {
hooks.log('New user created');
testStash.newUserId = newUser.id;
} else {
transaction.fail = 'Unable to create new user';
}
})
});
hooks.after('Users > Delete User', function(transaction) {
hooks.log('Executing hook "after" transaction "Users > Delete User"');
// In case the actual test failed, we want to clean up the data
if (testStash.newUserId != null) {
User.delete(testStash.newUserId);
}
});

上面【API检测】运用Dredd检测您的API-manbetx万博_万博manbetx官网电脑|主页 的代码中有几点需求考虑:

咱们声明晰一个名为testStash的新变量,咱们用它来保存跨多个测验钩子的新创立用户的ID。

在before hook中,假如咱们无法创立用户,咱们可以经过运用失利音讯设置fail特点来手动测验失利。

在挂钩后,咱们从存储中获取用户的ID,并在测验后经过删去用户来整理它。

设置模仿服务器

运用API​​ Blueprint格局记载的API时,另一个很帅的功用是咱们也可以运用相同的文件来发动模仿服务器来保管咱们的端点。这对前端开发人员特别有用,由于他们不用等候API完结和布置。猫女相反,他们可以运用.apib文件来发动模仿服务器,将客户端运用程序与它集成,并保证真实的API也契合相同的标准。

该作业的东西称为Drakov,它也可以经过运转以下指令装置为npm包:

> npm install -g drakov

装置完结后,咱们只需键入以下内容即可将Drakov指向咱们的API Blueprint文件:

> drakov -f api-description.apib

此指令将运用默许参数运转Drakov并显现以下输出:

> drakov -f api-descrip骚男tion.apib
[INFO] No configuration files found
[INFO] Loading configuration from CLI
DRAKOV STARTED
[LOG] Setup Route: GET / Get Message
[LOG] Setup Route: POST /api/users Create User
[LOG] Setup Route: GET /api/users/:id Get User Info
[LOG] Setup Route: DELETE /api/users/:id Delete User
Drako失禁文v 1.0.4 Listening on port 3000

现在,咱们可以对模仿的API战锤全面战役履行任何HTTP操作,并开端获取文档中界说的HTTP呼应。

最终的话

今日供给的东西既简略又直接,但也十分强壮。 它们涵盖了许多使命,包含记载API,测验完结以及运转模仿服务器以方便运用。

Dredd有许多选项,可以装备各种类型的恳求。 它还可以与一切首要的CI东西集成,以便重复测验,为开发人员供给了一个很好的安全网。

API Blueprint是一种十分赋有表现力的降价格局,可用于描绘恳求和呼应的简直一切细节。

Drakov十分简略,可以经过运转一个简略的指令来开箱即用。

一切这些只需求几个小时来预备和装备,之后您将可以离别未记载的API。