介面測試專案例項網址:http://www.testingedu.com.cn:8081/inter/index.html
。
介面簡略說明:
- 鑑權介面:
http://www.testingedu.com.cn:8081/inter/HTTP/auth
該介面返回一個token值,之後的所有介面請求均需新增token頭域使用該token。 - 註冊介面:
http://www.testingedu.com.cn:8081/inter/HTTP/register
- 登入介面:
http://testingedu.com.cn:8081/inter/HTTP/login
該介面返回一個userid,在請求使用者資訊時使用,因此儲存為變數。 - 獲取使用者資訊介面:
http://testingedu.com.cn:8081/inter/HTTP/getUserInfo
該介面需要使用登入後所獲取的userid,因此使用之前儲存的userid變數值。 - 登出介面:
http://testingedu.com.cn:8081/inter/HTTP/logout
說明:
介面測試專案例項中,訪問註冊、登入、獲取使用者資訊、登出介面之前,均需要呼叫auth介面獲取token資料。
因此需要通過auth介面獲取的token資訊之後,存為變數供後續介面呼叫。
(一)專案介面文件
1、鑑權介面
鑑權介面路徑:/inter/HTTP/auth
。
-
功能說明
獲取介面授權資訊返,回授權後token。
本介面是訪問平臺所有介面之前必須要呼叫的授權介面,只有通過該介面初始化token之後,才能訪問平臺其他介面。
(auth介面就是獲取token介面,作用是鑑權。) -
介面格式
Json資料格式 -
HTTP請求方式
POST -
輸入引數說明
1)介面接收引數
無
2)頭部校驗引數引數名稱 是否必須 型別 描述 token N string 授權介面的token引數,如果已經存在有效token,則需要帶上,此時不重新分配token;如果沒有有效的token,或者不帶token,都會重新分配token。 -
請求示例
http://www.testingedu.com.cn:8081/inter/HTTP/auth
-
返回引數說明
引數名稱 型別 描述 status int 請求結果狀態碼:
200:success token不存在或失效,建立token並返回
201:success token未登入
202:success token已授權登入,返回token。msg string 請求結果提示資訊。與status對應。 token string 請求授權成功,返回token給客戶端。200和202狀態,會返回token。 -
正確返回示例
{ "status": 200, "msg": "success", "token": "109f1a34bdcf4785b6c70a9917d7a49d" }
-
錯誤返回示例
無
2、註冊介面
註冊介面路徑:/inter/HTTP/register
。
-
功能說明
註冊使用者。
通過介面,向伺服器提交引數,然後在平臺註冊自己的使用者賬號。 -
介面格式
json -
HTTP請求方式.
POST -
輸入引數說明
(1)介面接收引數如下:引數名稱 是否必須 型別 描述 username Y string 使用者名稱引數,範圍[3,16] pwd Y string 密碼引數,範圍[3,16] nickname Y string 暱稱引數,範圍[3,36] describe N string 個人描述引數,範圍[0,127] (2)頭部校驗引數
引數名稱 是否必須 型別 描述 token Y string 鑑定請求是否合法,使用者是否登入。 -
請求示例
http://www.testingedu.com.cn:8081/inter/HTTP/register
引數如下:
username
: Will
pwd
: will
nickname
: Will
describe
: Will -
返回引數說明
引數名稱 型別 描述 status int 請求結果狀態碼:
200:恭喜您,註冊成功
400:引數錯誤
401:使用者名稱已經註冊
402:引數錯誤.
405:非法請求
406:登入狀態,不能註冊msg string 請求結果提示資訊。與status對應。 -
正確返回示例
{ "status": 200, "msg": "恭喜您,註冊成功" }
-
錯誤的返回示例
{ "status": 405, "msg": "非法請求" }
3、登入介面
登入介面路徑:/inter/HTTP/login
。
-
功能說明
向伺服器傳送登入鑑權。
介面向伺服器傳送使用者名稱和密碼引數,通過登入介面,去登入平臺。登入成功後,當前使用的token會備註為已登入狀態。 -
介面格式
json -
HTTP請求方式.
POST -
輸入引數說明
(1)介面接收引數如下:引數名稱 是否必須 型別 描述 username Y string 使用者名稱引數,範圍[3,16] pwd Y string 密碼引數,範圍[3,16] (2)頭部校驗引數
引數名稱 是否必須 型別 描述 token Y string 登入介面的token引數,如果沒有該引數,不能請求登入介面。如果有該引數,登入成功後,該token會具備已登入的狀態。 -
請求示例
http://testingedu.com.cn:8081/inter/HTTP/login
引數如下:
username
: xiaoming
password
: 123456 -
返回引數說明
引數名稱 型別 描述 status int 請求結果狀態碼:
200:恭喜您,登入成功
401:使用者名稱密碼錯誤
402:引數錯誤
405:非法請求
406:使用者已經在別處登入msg string 請求結果提示資訊。與status對應。 id string 登入成功後,返回當前使用者的userid,其他情況不返回該欄位。 -
正確返回示例
{ "status": 200, "msg": "恭喜您,登陸成功", "userid": "1" }
-
錯誤的返回示例
{ "status": 406, "msg": "非法請求" }
4、使用者資訊介面
使用者資訊介面路徑:/inter/HTTP/getUserInfo
。
- 功能說明
向伺服器獲取指定id的使用者資訊。
該使用者的id必須與當前用token登入使用者一致,否則不能獲取。 - 介面格式
json - HTTP請求方式.
POST - 輸入引數說明
(1)介面接收引數如下:引數名稱 是否必須 型別 描述 username Y string 使用者id,範圍[1,10] 引數名稱 是否必須 型別 描述 token Y string 用來校驗查詢資訊的使用者是否是已經登入狀態。 - 請求示例
http://testingedu.com.cn:8081/inter/HTTP/getUserInfo
引數如下:
id
: 1 - 返回引數說明
引數名稱 型別 描述 status int 請求結果狀態碼:
200:查詢成功
401:您還未登入
402:引數錯誤
404:非法查詢
405:非法請求
406:token已失效msg string 請求結果提示資訊。與status對應。 id string 查詢成功,返回使用者id;失敗不返回。 nickname string 查詢成功,返回使用者暱稱資訊;失敗不返回。 describe string 查詢成功,返回使用者個人描述資訊;失敗不返回。 - 正確返回示例
{ "status": 200, "msg": "查詢成功", "userid": "1", "nickname": "xiaohuahua", "describe": "擅長Python、Java自動化開發" }
- 錯誤的返回示例
{ "status": 405, "msg": "非法請求" }
5、登出介面
登出介面路徑:/inter/HTTP/logout
。
- 功能說明
登出登入(退出)。
介面向伺服器登出當前token登入的使用者。 - 介面格式
json - HTTP請求方式.
POST - 輸入引數說明
(1)介面接收引數
無
(2)頭部校驗引數引數名稱 是否必須 型別 描述 token Y string 用來校驗使用者是否是已經登入狀態。 - 請求示例
http://testingedu.com.cn:8081/inter/HTTP/logout
- 返回引數說明
引數名稱 型別 描述 status int 請求結果狀態碼:
200:登出成功
406:token已失效msg string 請求結果提示資訊。與status對應。 - 正確返回示例
{ "status": 200, "msg": "使用者已退出登入" }
- 錯誤的返回示例
{ "status": 406, "msg": "token已失效" }
(二)網站上手動驗證
在實際的工作中,我們檢視完文件之後,需要到網站上進行手動操作,呼叫一下文件中的介面,還可以藉助抓包工具,來檢查一下文件中有沒有表述上的問題。(也就是最基本的流程判斷)
通過實際操作得知如下流程:
- 使用者註冊的前後會呼叫auth(鑑權)介面。
- 使用者登陸後會呼叫查詢使用者資訊介面,在呼叫查詢使用者資訊介面前也會呼叫auth(鑑權)介面。
也就是一個登陸操作,執行了登陸,鑑權,查詢三個介面。 - 登出使用者後會呼叫auth(鑑權)介面,使使用者鑑權失效。
(三)Postman測試實現
簡述整體思路:
- 我們需要建立5個請求,鑑權、註冊、登陸、查詢、登出。
- 建立一個Collection測試集管理以上請求。
- 建立一個環境變數,對該專案的公共變數進行管理。
- 先呼叫鑑權介面,把獲得的token儲存環境變數中,方便後續介面使用。
- 每個請求都需要編寫斷言。
1、準備工作
(1)建立一個Collection測試集
因為是新的專案,我們需要為該專案建立一個新的測試集,方便請求的管理。
例如:叫“綜合練習”。
(2)建立一個環境變數
建立一個環境變數,方便對該專案的公共變數進行管理。
一般與Collection測試集同名。
2、 建立請求
(1)建立auth鑑權請求
通過前面介面文件可以分析得出:
auth鑑權介面如果不傳遞token引數,就重新分配一個token並返回。
如果傳遞有效的token引數,此時不再重新分配token;
所以我們就建立一個不帶引數的auth鑑權請求即可。
(只填寫請求方式和請求引數即可)
如下圖:
然後我們編寫請求後置指令碼Tests
:
步驟1:編寫斷言
// 斷言鑑權操作成功
// 返回值中msg是否等於success
pm.test("鑑權介面請求成功", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.msg).to.eql("success");
});
步驟2:把返回值中的token資料儲存到環境變數中,提後後續介面使用。
// 把鑑權介面返回資料中的token資訊,儲存到環境變數中
pm.environment.set("authToken", pm.response.json().token);
編寫完成後,我們再Send
驗證一次:
可以看到Tests
中的指令碼是沒有問題,我們再來看看“綜合練習”環境變數中的內容。
如下圖:
看到以上資訊,說明auth鑑權請求實現完成。
(2)使用者註冊介面實現
先填寫請求方式和請求地址,並填寫請求資料,如下圖:
然後在請求頭中填寫token資訊。
最後在編寫後置指令碼Tests
斷言
// 斷言使用者註冊操作是否成功
pm.test("註冊操作成功", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.msg).to.include("註冊成功");
});
傳送請求並檢視結果,如下圖:
以上就完成了使用者註冊介面的實現。
(3)使用者登陸介面實現
先填寫請求方式和請求地址,並填寫請求資料,如下圖:
然後在請求頭中填寫token資訊。
最後在編寫後置指令碼Tests
斷言和資料處理
斷言:
// 斷言使用者登陸成功
pm.test("使用者登入成功", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.msg).to.include("登入成功");
});
資料處理:
// 把返回使用者的userid,新增到環境變數中。
// 方便後續的介面使用。
pm.environment.set("userid", pm.response.json().userid);
傳送請求並檢視結果,如下圖:
檢視環境變數userid已被新增。
以上就完成了使用者登入介面的實現。
(4)查詢使用者資訊介面實現
先填寫請求方式和請求地址,並填寫請求資料,如下圖:
然後在請求頭中填寫token資訊。
最後在編寫後置指令碼Tests
斷言
// 斷言查詢使用者資訊成功
pm.test("查詢使用者資訊成功", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.msg).to.include("查詢成功");
});
傳送請求並檢視結果,如下圖:
以上就完成了查詢使用者資訊介面的實現。
(5)使用者登出介面實現
先填寫請求方式和請求地址,而logout(登出)介面並不需要傳遞引數,只需要傳請求頭中有效的token。
編寫後置指令碼Tests
斷言
// 斷言使用者登出成功
pm.test("使用者退出登入成功", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.msg).to.include("退出登入");
});
傳送請求並檢視結果,如下圖:
這樣就完成了使用者登出介面的實現。
提示:如果再次呼叫登入介面進行使用者登入,就會出現登入失敗的現象。需要重新auth鑑權,再進行登入。
以上綜合專案中的介面我們都建立完成了。
(四)加入資料驅動
1、準備資料檔案
更具上面的5個介面,來編輯資料檔案,如下:
usernane | password | registerMsg | loginUser | loginPwd | loginMsg | userMsg |
---|---|---|---|---|---|---|
xiaoming3 | 123456 | 註冊成功 | xiaoming3 | 123456 | 登入成功 | 查詢成功 |
xiaoming3 | 123456 | 使用者已被註冊 | xiaoming3 | 12345666 | 使用者名稱密碼錯誤 | 您還未登陸 |
xiaoming3@ | 123456 | 引數錯誤 | xiaoming3@ | 123456 | 引數錯誤 | 您還未登陸 |
xiaoming3aaaaaaaaaaaaaa | 123456 | 引數錯誤 | xiaoming3aaaaaaaaaaaaaa | 123456 | 引數錯誤 | 您還未登陸 |
當我們用到資料驅動的時候,首先要想清楚,測試的輸入資料是哪些,還有預期的返回資訊是什麼。
提示:
- 要把Excel檔案另存為
.cvs
檔案。- 使用Notepad++開啟資料檔案,然後將資料檔案
轉為UTF-8編碼
。
2、修改請求中的引數
我們以註冊介面為例,其他介面同理。
修改請求引數如下:
修改請求後置指令碼Tests
,如下:
3、使用測試驅動方式執行測試集
點選測試集,然後進入Collection Runner
介面。
執行如下操作:
提示:每次上傳完資料檔案後,需要Preview一下,確保上傳的資料資訊的準確性。
如下圖:
最後點選Run綜合練習DDT
執行測試集。
4、分析測試結果
通過分析測試結果,可以判斷介面的是否正確,也可以對測試資料重新進行補充或者修改。
最後得出介面測試的結果。
以上就是在工作中我們使用Postman進行介面測試的基礎流程。