2

我使用 Frisby 框架编写 API 测试用例。当我将 url 和凭据放入邮递员或 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(); 
4

1 回答 1

0

请求400以 HTTP 的形式返回Bad Request

首先,我会吐出 API 发回给您的响应消息正文,以查看错误的任何详细信息。错误的请求响应往往会告诉您请求有什么问题。

after()由于 frisby 是异步的,因此您可以通过使用(在您折腾之前)确保执行顺序。

.post("https://blah.blah.blah.com", "some json...", "some more json...")
.expectStatus(200)
.after(function(err, res, body){ console.log(body); })
.toss(); 

现在,frisby'spost()有 3 个参数:

  • url:网址
  • data:您的帖子请求的正文
  • params:frisby post 函数 post 的参数,比如告诉它提交 json。

所以看起来你正在发布(可能是创建)一个用户名/密码对象。

我假设字符串"url"确实是一些有效的 url,所以我们可以跳过这个明显的问题。

在没有看到任何错误消息的情况下进行狂野拍摄,我猜您的问题是您没有向 API 提供身份验证凭据。我不知道有多少 API 完全开放。通常,您期望基本身份验证凭据之类的东西,如果您不提供它们,您通常会得到:

  • 400 bad request如果他们对“无凭据”的消息感到满意
  • 404 not found如果他们在装腼腆并且不想让未经授权的人知道那里有有效的资源
  • 甚至可能是403 Forbidden

如果它确实是凭据,则在创建和调用 post 之后添加它们,但在toss(). 如果你把它放在它之前post()它会失败。此外,这是 API 用户名和密码,而不是您尝试在系统中创建的任何用户。有时它们在 API 的 a client_idandclient_secretAPI_KEYand中被引用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()

另外,我喜欢在 .json 文件中使用addHeader(header, content)过度删除一大块令人讨厌的 json 来显式添加标头post(),但这只是我的偏好。

祝你好运!

于 2016-11-25T20:15:29.593 回答