新用戶注冊
新用戶注冊的接口是POST /register username/password/password_confirmation
該接口需要提供3個參數,分別是
- username 用戶名
- password 密碼
- password_confirmation 重復一遍密碼
我們現在的任務就是使用jmeter來測試新用戶注冊這個接口,如果該接口返回了新注冊用戶的信息,那么我們可以認為注冊是成功了的,否則會出現各種報錯。
步驟
- 在express_api_demo路徑下使用
npm start
啟動smile api的后台服務 -
在測試計划下新建一HTTP請求默認值
- 服務器名或IP:localhost
- 端口號: port
- 服務器名或IP:localhost
-
新建線程組(ctrl+0)
-
在線程組下新建Random Variable配置元件
- 名稱:
username
- Variable Name:
username
- Output Format:
user_000
- Minimum Value: 1
- Maximum Value: 999
- 名稱:
-
新建HTTP請求取樣器
- 名稱: 注冊
- 路徑:
/register
- 請求參數:
- username:
${username}
- password:
${username}
- password_confirmation:
${username}
- username:
- 在線程組下添加1個查看結果樹(ctrl+9)
- 在線程組下添加1個Debug Sample(ctrl+8)
- 保存並運行,結果如下圖所示
斷言
我們現在已經調通了接口,下面就可以給接口做斷言了。
該接口的輸入是
- username
- password
- password_confirmation
輸出是
- id: 數據庫中的id
- username
- password: 密文的
- updatedAt: 修改時間
- createdAt: 創建時間
{ "id":7, "username":"user_527", "password":"$2a$10$VynjsNb8BwvTsKBRJ68/MObtKYLhtK7TrKxjfWrtufoOOO/yS5qZu", "updatedAt":"2016-09-09T09:29:36.000Z", "createdAt":"2016-09-09T09:29:36.000Z" }
很容易想到,我們的斷言可以判斷下面幾件事情
- 創建成功后返回的json字符串里應該包含username這個key
- 創建成功后返回的json字符串里username這個key的值應該跟我們隨機生成的用戶名是一致的
下面我們就開始添加這些斷言
在"注冊"這個HTTP請求下新建JSON PATH PostProcessor
- 名稱: 獲取注冊成功后返回的用戶名
- Variable names:
returned_username
- JSON Path expressions:
$.username
- Match Numbers: 1
- Default Value:
NOT FOUND
新建JSR223 Assertion
- 名稱: 用戶名不能為空
- Language: javascript
- Script:
var returned_username = vars.get('returned_username'); if(returned_username == 'NOT FOUND'){ AssertionResult.setFailure(true); AssertionResult.setFailureMessage('沒有返回用戶名'); }
新建JSR223 Assertion
- 名稱: 用戶名應該是正確的
- Language: javascript
- Script:
var returned_username = vars.get('returned_username'); var expected_username = vars.get('username'); if(returned_username != expected_username){ AssertionResult.setFailure(true); AssertionResult.setFailureMessage('返回的用戶名不正確'); }
因為斷言通過的時候我們是沒有辦法在查看結果樹里看到斷言的信息的,所以我們需要故意讓斷言不通過來測試斷言的准確性。
將"注冊"HTTP請求中的password參數改為secret
保存並運行,結果如下圖所示:
這就證明在注冊失敗的時候,斷言也相應失敗了,斷言的行為是准確的。