2016-11-14 100 views
1

我已經使用Frisby框架編寫API測試用例。當我把網址和憑證到郵遞員或DHC,響應來了正常,但在弗里斯比測試用例我收到錯誤: -我收到錯誤「預計400到200」

的代碼如下: -

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

任何建議請 –

+0

HTTP 400是'不好的請求',所以請求標題可能有問題。 「接受編碼」:'編碼:gzip,deflate'看起來很奇怪;如果我是你,我會刪除第二個'Encoding:'。 –

回答

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:您的POST請求的身體
  • params:參數爲弗里斯比後功能後就像告訴它提交json。

因此,看起來你正在發佈(可能是創建)用戶名/密碼對象。

我假設字符串"url"確實是一些有效的url,所以我們可以跳過這個明顯的問題。

在沒有看到任何錯誤消息的情況下進行一次狂野拍攝,我將猜測您的問題是您沒有向API提供身份驗證憑據。我不知道很多API完全打開。通常情況下,你希望像基本身份驗證憑據,如果你不爲他們提供,你通常會得到一個:

  • 400 bad request如果他們有一個消息說「沒有憑據」
  • 404 not found如果不錯他們正在玩忸怩作態,不希望非授權人知道有一個有效的資源有
  • 或者甚至一個403 Forbidden

如果它變成是憑證,您在創建後添加他們通話,但在你之前toss()。如果你把它放在post()之前,它會失敗。此外,這是API用戶名&密碼,而不是您嘗試在系統中創建的任何用戶。有時它們在API的client_idclient_secretAPI_KEYAPI_SECRET中被引用,但它只是一個標識符和一個共享密鑰。

所以最後事情會像

.post("https://blah.blah.blah.com", "some json...", "some more json...") 

.auth("api_username", "api_password") 

.expectStatus(200) 

.toss(); 

弗里斯比將明文的用戶名/密碼轉換爲一個有效的基本64編碼字符串,並在Authorization:頭堅持下去(也許就是爲什麼它需要做的調用post()後)

另外,我喜歡使用addHeader(header, content)明確添加標頭,而不是在post()中丟棄一個令人討厭的json blob,但這只是我的偏好。

祝你好運!

相關問題