我目前正在尝试使用apiary.io
描述现有API。系统通过登录请求实现身份验证,该请求返回包含会话ID的http-cookie。
据我所知,浏览器在发出另一个请求时会将之前从主机收到的所有http-cookies发送回给他。
看来,Dredd在运行我的蓝图文件生成的测试时并没有这样做。因此,任何需要用户登录的请求都无法正常进行测试。
是否有可能将请求标记为“在运行此请求之前需要”以强制Dredd管理这些http-cookies?
顺便说一句,REST服务是在Sails.js
中实现的,node.js
是一个mvc框架。
答案 0 :(得分:1)
这是旧的,但我刚遇到同样的问题,而且dredd文档已经过时了(不是那么讽刺吗?!),所以既然我想出来这可能对某人有帮助:))
您可以使用hooks读取和覆盖响应并请求正文和标题(这是我在该主题中找到的最新页面,但仍然存在问题和拼写错误)。需要注意的是,dredd似乎没有cookie的帮助器,所以你必须自己解析并构建cookie头。
在我的情况下,sessionId
返回json主体以及cookie:我解析了主体,因为这样更容易,但如果需要,你可以很好地从响应cookie中检索会话。这里大概是我写的使用auth工作的钩子:
hooks = require('hooks');
stash = {}
// hook to retrieve session on a login
hooks.after('Auth > /remoteauth/userpass > POST', function(transaction){
stash['token'] = JSON.parse(transaction.real.body)['sessionId'];
});
// hook to set the session cookie in all following requests
hooks.beforeEach(function(transaction){
if(stash['token'] != undefined){
transaction.request['headers']['Cookie'] = "id=" + stash['token']
};
});
The docs解释了如何设置钩子,虽然有一件事让我感到困惑的是dredd --names
命令在同一目录中有dredd.yml
文件时不起作用(看起来像文件的存在使dredd忽略所有命令行参数。)
答案 1 :(得分:0)
Dredd旨在运行并针对测试环境设置,例如在带有测试夹具的CI工具中。它不应该在生产环境中运行。
据说可能有时需要在测试端点时执行设置或拆卸操作。计划最终提供test scenarios。
如果您需要设置/拆卸功能,您可以使用Dredd"挂钩"正如所讨论的那样here。