獲取所有任務
GET /api/tasks 接口獲取所有的任務,該接口需要鑒權。
注意,默認情況下鑒權是關閉的。請確保app.coffee中的app.use(express_jwt(secret: jwt_secret).unless(path: ['/register', '/login']))
的這條語句沒有被注釋,然后使用coffee -c app.coffee
重新編譯。
鑒權失敗
我們試着在沒有提供token的情況下訪問 GET /api/tasks接口。
新建http請求取樣器,路徑/api/tasks,直接運行,結果如下圖所示。
接口返回狀態碼401,這就證明了如果不登錄的話獲取所有任務的接口是無法直接訪問的。
鑒權並返回相應結果
jwt鑒權的默認套路是在http請求的header中增加 Authorization: Bearer token
字段。
- 在“用例:登陸成功”后新建HTTP信息頭管理器,新增
Authorization: Bearer ${login_token}
字段 - 新建簡單控制器,並將其名稱修改為"用例:獲取所有任務"
- 將http請求取樣器名稱修改為"獲取所有任務",拖拽至簡單控制器下,最終結果如下圖所示
運行后結果如下圖所示,可以看到返回的狀態碼現在是200而並非未授權狀態的401。另外該接口將數據庫中所有的tasks以json字符串的形式返回,在開始階段,你可以沒有新建任何一個任務,返回的結果可能是[]
。
第二步:添加http信息頭管理器
第三步:並且在信息頭中添加新增Authorization: Bearer ${login_token}
字段,如下圖所示:
我們看看這個獲取token變量名的由來,這個在上一篇我們已經給大家介紹過了。
第四步:添加一個簡單控制器,將獲取所有任務和HTTP信息頭管理器放到簡單控制器下面,保證整個過程的完整性。如圖所示:
第五步:運行獲取所有任務的API,注意我們需要把登陸API激活,不然不登陸是無法獲取所有任務的。
第六步:我們獲取所有任務以后需要斷言,這里我們使用的是響應斷言,先添加響應斷言方法,如圖所示:
第七步:先取實際結果進行比對。
第八步:進行獲取所有任務成功后的實際結果和預期結果斷言。
最后斷言成功,結果如圖所示:
使用正則表達式提取器來提取token
說明:
(1)引用名稱:下一個請求要引用的參數名稱,如填寫Atask,則可用${Atask}引用它。
(2)正則表達式:
():括起來的部分就是要提取的。
(3)模板:用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$$3$等等,表示解析到的第幾個值給title。如:$1$表示解析到的第1個值
(4)匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0
(5)缺省值:如果參數沒有取得到值,那默認給一個值讓它取,我填的not found。
運行結果如下:
執行順序
從上面的腳本結構圖我們可以看出,HTTP信息頭管理器位於登錄用例和獲取所有任務用例之間,這是因為我們必須通過登錄用例來獲取token,從而設置到HTTP信息頭管理器中。一旦設置好了HTTP header,那么其后所有的請求都會帶上Authorization: Bearer ${login_token}
信息,這也是獲得登錄態的奧秘所在。
因此我們可以看到,這些組件的執行順序是:登錄用例 -> 設置HTTP header -> 獲取所有任務,登錄成了獲取所有任務的依賴,一旦登錄失敗,后續所有的請求都會失敗,這其實是我們可以接受的結果。