接口測試
(一)接口測試
(1)服務器端(server):在使用別人的服務器上,例如微信APP客戶端,服務端在騰訊的服務端上,微信上的賬號信息,聊天記錄均存儲在服務端上;用戶A發送1條信息到服務端上,服務端再把這條信息轉發到用戶B上。
服務器使用的語言分別為:Java、Python、PHP、Go、C、C++等等
(2)客戶端(client):手機上的APP,網站
客戶端使用的語言分別為:object-c(IOS)、Android、HTML、CSS、JS等等
(3)接口:通過客戶端與服務端進行交互的
(4)這么多種類的語言,造成無法識別,需要通用的數據類型進行解析:json{},沒有json之前用的XML格式
- XML:通用的數據類型
<title>接口測試</title>
<content>服務器與客戶端需要接口進行交互</content>
- JSON:通用的數據類型,以一種鍵值對來展示:
{
"title" : "接口測試",
"content" : "服務器與客戶端需要接口進行交互"
}
(二)如何測試接口
1、接口:是由客戶端和服務器來進行交互的,以及接口返回的數據一般都是json格式的數據類型。
2、接口測試基本步驟如下:
(1)在接口文檔中或者其它地方,拿到接口的URL地址
(2)查看接口是用什么方式發生請求(例如:get和post請求)
(3)添加請求頭,請求體
(4)發送查看返回結果,校驗返回結果是否正確
3、打開接口文檔(參考:doc.nnzhp.cn)
(1)URL
(2)請求方式
(3)請求參數
(4)get請求
- 在瀏覽器上,直接輸入接口文檔中的請求URL:http://api.nnzhp.cn/api/user/stu_info,頁面報錯提示“必填參數未填寫!請查看接口文檔!”(如圖所示)
- 基於上面中的url鏈接中不帶必填參數報錯,故需在URL中補上必填參數:http://api.nnzhp.cn/api/user/stu_info?stu_name=%E5%B0%8F%E6%98%8E
- 有多個必填參數時,需要在URL中添加其他必填參數用“&”拼接,例如:http://api.nnzhp.cn/api/user/stu_info?stu_name=%E5%B0%8F%E6%98%8E&age=25
(5)post請求
- 復制URL在瀏覽器打開,報錯“請求方式錯誤!請查看接口文檔”,例如如圖顯示
- 這時候需要借助postman接口工具進行測試,前提條件:需要本地安裝postman應用軟件(注意:如果是POST請求,選擇Params填寫參數,這時URL中會自動帶上該參數信息,這種請求方式應該是GET請求方式而不是POST請求,如圖:)
- POST請求,應該選擇Body選項,勾選“form-data”或者“x-www-form-urlencoded”填寫必填參數,如圖所示:
- POST請求,用戶注冊,如圖:
- POST請求,入參為json類型,如圖:
- 查詢是否存在該學生信息:
- POST請求,Body選擇form-data,Key由Text切換File格式,進行文件上傳,(注意:x-www-form-urlencoded沒有File格式,只有Text選項,不能上傳多媒體文件)如圖:
4、瀏覽器進行抓包
(1)瀏覽器打開檢查或者開發者工具,再或者檢查元素等控制台
(2)一般查看調用接口Network(網絡)下面的XHR調用了哪些接口
(3)請求url:https://qun.qq.com/cgi-bin/qunwelcome/myinfo?callback=?&bkn=682554596
(4)利用Postman接口工具進行調用接口:get_group_list
(5)接口search_group_members,多個參數進行接口測試:
(6)cookie和session
- cookie:在瀏覽器存放自己本地信息數據的一個鍵值對(key-value)的地方
- 保存時間:根據需要設定
- 保存位置:客戶端
- session:存放在服務端的一個鍵值對
- 保存時間:用戶活動時間+一段延遲時間(登錄時提示用戶保存時間7天時間)
- 保存位置:服務器端
5、GET請求方式和POST請求方式的區別:
(1)GET請求沒有請求體,只要請求頭和URL:host/api/xxx?name=xxx
(2)POST請求是有請求頭、請求體
(3)GET請求沒有POST請求安全
(4)GET請求有參數長度限制,POST沒有
(三)postman接口自動化
1、測試銀行項目、金融項目會遇到加密參數,需要:
(1)參數去掉加密
(2)提供一個工具,產生加密后的參數
(3)自己了解加密算法,然后自己加密
2、Postman中手動配置環境變量:
(1)在Postman中,有Environment和Environment,用於實現不同環境的管理,不同服務器環境分別為:
- Production 生產環境
- Development 開發環境
- Local 本地局域網環境
(2)環境快速查看,如圖1所示 :
圖1
(3)使用Environment實現多服務版本管理,點擊右上角的設置,點擊【Manage Environments】,和圖2所示:
圖2
(4)在彈窗【MANAGE ENVIRONMENTS】界面中,右下角點擊“Add”,如圖:
(5)在“Add Environment”中,填寫變量名和變量值 ,如圖:
(6)配置好變量名稱和變量值后,可以在請求URL中進行參數化:
(6)編寫腳本,腳本參數化,如同
(7)點擊runner,配置運行參數,如同:
(8)查看最后的運行結果,狀態碼為200 ok,表示運行成功,如圖:
圖中有個字段是:“This requests does not have any tests.”
需要檢查:
第一步:檢查是否變量名稱是否對應;
第二步:是否點擊了保存,再點擊Runner
第三步:是否添加了校驗
(9)添加校驗,設置檢查
(10) postman斷言:
(11) 點擊【Tests】按鈕,右邊欄有個snippets欄,里面是postman內置的測試腳本,輔助接口測試:
A:判斷狀態碼
Status code : Code is 200
對應的腳本:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
B:返回的response包含內容
Response body : Containing string
對應的腳本:
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
C:返回的json數據中的值
Response body : JSON value check
對應的腳本為:
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
D:響應的內容等於一個字符串
Response body : is equal to a string
對應的腳本:
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
E:檢查響應頭中是否有Content-Type字段
Response headers : Content-Type header check
對應的腳本:
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
F:判斷響應的時間少於200MS
Response time is less than 200ms
對應的腳本:
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
(12)新建集合便於將個別請求進行分組,如圖:
(四)HTTP
1、http和https的不同之處:
(1)安全性不同:
http:普通的http請求,,信息明文傳輸信息,不安全;
https:具有安全性的ssl加密傳輸協議,為瀏覽器和服務器之間的通信加密,確保數據傳輸的安全;
(2)連接方式不同:
http的連接很簡單,是無狀態的;
https是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議;
(3)端口不同:
http協議:使用的端口是80;
https協議:使用的端口是443;
(4)證書申請方式不同:
http協議:免費申請;
https協議:需要到ca申請證書,一般免費證書很少,需要交費。
2、一般完整的URL為:http://192.168.13.3:80 host/ip:port/api/user/add_stu uri
3、接口HTTP參數
- http請求方式:
- get --- 通過請求URL得到資源
- POST --- 用於添加新的內容
- PUT ---用於修改某個內容
- DELETE---刪除某個內容
- CONNECT---用於代理進行傳輸,如使用SSL
- OPTIONS---詢問可以執行哪些方法
- PATCH---部分文檔更改
- PROPFIND(WebDAV)---查看屬性
- PROPPATCH(WebDAV)---設置屬性
- MKCOL(WebDAV)---創建集合(文件夾)
- COPY(WebDAV)---拷貝
- MOVE(WebDAV)---移動
- LOCK(WebDAV)---加鎖
- UNLOCK(WebDAV)---解鎖
- TRACE ---用於遠程診斷服務器
- HEAD --- 類似於GET,但是不返回body信息,用於檢查對象是否存在,以及得到對象的元數據
- http請求頭(headers)
- 請求頭包含許多有關客戶端環境和請求正文的又用信息。如圖所示:例如語言種類和狀態碼
- http請求體(body):請求體即為請求等正文。
- json 格式
- xml 格式
- html 格式
- 二進制格式(多用於圖片)
- 字符串格式
4、用戶接口可以通過以下4種不同方式的請求來做不同的事情:
(1)獲取數據,用“GET”方式,成功了返回HTTP狀態碼:200
(2)創建數據,用“POST”方式,成功了返回HTTP狀態碼:201
(3)修改數據,用“PUT”方式,成功了返回HTTP狀態碼:203
(4)刪除數據,用“DELETE”方式,成功了返回HTTP狀態碼:204
5、HTTP狀態嗎:
(1)請求消息(1字頭)例如:100 Continue(請繼續)
(2)請求成功 (2字頭)例如:200 OK(請求已成功)
(3) 重定向 (3字頭)例如:300 Multiple Choice(多項選擇,會返回一個選項列表)
(4) 客戶端請求錯誤 (4字頭)例如:400 Bad Request (錯誤請求) 403 Forbidden(禁止) 404 Not Found(沒有找到)
(5)服務器錯誤(5、6字開頭)例如:500 Internal Server(內部錯誤) 502 Bad Gateway(代理或者網關下一鏈路收到未響應)
詳細查看HTTP狀態碼、HTTP Status Code、HTTP常見狀態碼查詢:https://tool.oschina.net/commons?type=5