我使用Frisby框架编写API测试用例。当我将网址和凭证放入邮递员或DHC时,响应正确,但在frisby测试用例中我收到错误: -
代码如下: -
var frisby = require('frisby');
frisby.create('User Authentication')
//send the params to below url
.post("url",
{ username: "username",
password: "password"
},
{ json: true,
headers: {Accept:'application/json',
'Accept-Encoding':'Encoding:gzip, deflate',
'Accept-Language':'en-US,en;q=0.8',
Connection:'keep-alive',
'Content-Length':'107',
'Content-Type':'application/json',
Host:'url.com',
Origin:'http://url.com',
Referer:'http://url.com/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'X-Application-Key':'1234545',
'X-Requested-With':'XMLHttpRequest'
}
}
)
.expectStatus(200)
.toss();
答案 0 :(得分:0)
请求以400
的形式返回,这是一个HTTP Bad Request
。
我首先要呕吐API发回给你的响应消息正文,以查看错误的任何细节。错误的请求响应往往会告诉您该请求有什么问题。
由于frisby是异步的,因此您可以使用after()
(在投掷之前)确保执行顺序。
.post("https://blah.blah.blah.com", "some json...", "some more json...")
.expectStatus(200)
.after(function(err, res, body){ console.log(body); })
.toss();
现在,弗里斯比的post()
有3个参数:
url
:网址data
:您的帖子请求的正文params
:frisby post功能帖子的参数,比如告诉它提交json。 所以它看起来你正在发布(可能是创建)用户名/密码对象。
我假设字符串"url"
确实是一些有效的网址,因此我们可以跳过这个明显的问题。
在没有看到任何错误消息的情况下进行疯狂拍摄,我猜你的问题是你没有向API提供身份验证凭据。我不知道很多API完全开放。通常情况下,您希望使用Basic Auth凭证,如果您不提供这些凭据,您通常会获得:
400 bad request
如果他们对一条消息说"没有凭据" 404 not found
如果他们玩腼腆并且不希望非授权人员知道那里有有效的资源403 Forbidden
如果它确实是凭据,则在创建和发布帖子之后,但在toss()
之前添加它们。如果你把它放在post()
之前它会失败。此外,这是API用户名&密码,而不是您尝试在系统中创建的任何用户。有时他们会在API&{39} client_id
和client_secret
或API_KEY
和API_SECRET
中引用它们,但它只是一个标识符和共享秘密。
所以最后的事情看起来像是
.post("https://blah.blah.blah.com", "some json...", "some more json...")
.auth("api_username", "api_password")
.expectStatus(200)
.toss();
Frisby会将明文用户名/密码转换为有效的base 64编码字符串,并将其粘贴在Authorization:
标题中(可能是为什么在调用post()
之后需要发生这种情况)
另外,我喜欢使用addHeader(header, content)
显式添加标题,而不是在post()
中删除一个讨厌的json blob,但这只是我的偏好。
祝你好运!