1.接口測試概念及應用
? ? ? ? ? ? ? ? 什么是接口
?接口是前后端溝通的橋梁,是數據傳輸的通道,包括外部接口、內部接口,內部接口又包括:上層服務與下層服務接口,同級接口
????????????????外部接口:比如你要從 別的網站 或 服務器 上獲取 資源或信息 ,別人肯定不會把數據庫共享給你,他只能給你提供一個他們寫好的方法來獲取數據,你引用他提供的接口就能使用他寫好的方法,從而達到數據共享的目的。比如說:支付接口,沙箱,Mock.....
????????????????
? ? ? ? ? ? ? ? ?內部接口:方法與方法之間,模塊與模塊之間的交互,程序內部拋出的接口。比如:bbs系統,有登陸模塊,有發帖模塊等等,那你要發帖就必須先登陸,那么這兩個模塊就有交互,我們在測試的時候都用通過工具才能調試和測試
????????????????????????
? ? ? ? 如圖所示,我們提供了賬號密碼,通過http協議接口訪問服務器,服務器再通過接口訪問資料數據庫和代碼進行校驗 ,校驗的接口通過服務器返還給客戶端進行響應
? ? ? ? ?什么是接口測試:接口測試分為兩種手段:手工測試、自動化測試
? ? ? ? ? ? 接口測試是對系統或組件之間的接口進行測試,主要校驗數據的交換、傳遞和控制管理過程,以及相互邏輯依賴關系。而接口自動化測試是讓程序代替人為對接口項目進行自動化驗證測試的過程
? ? ? ? ? ? ? ? 手工測試:頁面--登錄功能時候--對登錄接口測試
? ? ? ? ? ? ? ? 自動化測試:自動、無人值守--知識點:CICD--持續集成
? ? ? ? ? ? ? ? 我們進行測試應該借助某些工具去完成:postman、jmeter 、代碼等
? ? ? ? ? ? ? ? 接口測試的意義? ? ? ? ? ? ? ??? ? ? ? ? ? ?
????????? ? ? ?1.項目成本、時間成本---更低
? ? ? ? ? ? ? ? 2.更早進入測試環節---效率
? ? ? ? ? ? ? ? 3.接口(不會頻繁變動)--- 節約成本
? ? ? ? ? ? ? ? 4.跳過前端的校驗(正則),直接訪問接口。(確定前端和后端同時做校驗)---安全著想
????????????????
2.HTTP請求的核心概念及原理
重點HTTP的請求頭、請求體、響應碼解析
? ? ? ? ? ?核心請求四要素:
? ? ? ? ? ? ? ? 1.接口URL:IP地址+端口+路徑
? ? ? ? ? ? ? ? ?2. 接口請求參數:用戶名 密碼
? ? ? ? ? ? ? ?3. 接口請求方法:get post delete put...
? ? ? ? ? ? ? ? ?4. 接口響應報文
? ? ? ? ? ? ? ? 縮略的詞:
????????????????????????URL: 統一資源(圖片、網頁、視頻...)定位符(地方)--- 地址 :www.baidu.com
????????????????????????HTML: 超文本標記語言,特點:成對出現:內容--- 前端常用
????????????????????????HTTP: 常用的協議 --- 超文本傳輸協議
????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? URL詳解:
????????????????????????協議:客戶端和服務器通訊的標準,http、https、ssh等
????????????????????????host: IP或域名,比如上面的localhost(127.0.0.1)- 本機
????????????????????????www.baidu.com (14.119.104.254) --- 背后都是對應的ip--相當于是對應的網絡的? ? ? ? ? ? ? ? ? ? ? ? ? 地址 ---某臺電腦程序:mysql :3306 、tomcat:8080、....(域名化方便記憶)
????????????????????????端口號:協議默認的端口號是可以省略的(http:默認端口80、 https:默認端口? ? ? ? ? ? ? ? ? ? ? ? ? ? 443、ssh:默認端口22)
????????????????????????資源路徑:資源存放的位置,資源可以是各種超文本信息,如音頻、視頻等,如? ? ? ? ? ? ? ? ? ? ? ? ? ? ?上:/index.php
?????????????????????????參數:如 ?m=Home&c=Goods&a=goodsInfo&id=46 ;格式:用?與URL的主體部? ? ? ? ? ? ? ? ? ? ? ? ? ?分分開,參數的格式 參數名=參數值 ,有多個參數時用&拼接即可
? ? ? ? ? ? ? ? ? HTTP詳解:
????????????????????????HTTP: 常用的協議 --- 超文本傳輸協議:請求--- 響應協議 ----
? ? ? ? ? ? ? ? ? ? ? ? 怎么通信的呢?TCP/IP協議
? ? ? ? ? ? ? ? ? ? ? ??HTTP包含哪些請求:請求行、請求頭、請求體????????? ? ? ? ??
? ? ? ? ? ? ? ? ? ? 請求行:請求方法、請求地址(URL)、協議版本
? ? ? ? ? ? ? ? ? ? 請求頭:很多字段、看不懂,系統固定的。告訴服務器我需要什么樣的資源、描述? ? ? ? ? ? ? ? ? ? ? ?對應的請求。
? ? ? ? ? ? ? ? ? 注意:cookie(鑒權)、content-Type(告訴我們傳輸數據的格式是什么,要和請求體? ? ? ? ? ? ? ? ? ? 當中的數據格式一一對應)
????????????????????????Content-Type取值與body傳值方式對應關系:
????????????????????????
? ? ? ? ? ? ? ? ? ? ?請求體:請求參數--- 后面再說--- 這個接口的對應的參數:get請求一般是在url當? ? ? ? ? ? ? ? ? ? ? ? ? ? 中;post一般在body當中
HTTP的請求方法
? ??
????????????????????????
? ? ?響應的詳解:?
?響應行、響應頭、響應正文 ---通過對應的請求得到對應的響應數據?
????????響應行: 協議版本、狀態碼、狀態信息? ? ?
????????常見的狀態碼有哪些?
????????1xx:指示信息--表示請求已接收,繼續處理
????????2xx:成功--表示請求已被成功接收、理解、接受
????????3xx:重定向--要完成請求必須進行更進一步的操作
????????4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
????????5xx:服務器端錯誤--服務器未能實現合法的請求
????????常見狀態碼:? ? ?
- 200 OK//客戶端請求成功
- 400 Bad Request//客戶端請求有語法錯誤,不能被服務器所理解
- 401 Unauthorized//請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
- 403 Forbidden//服務器收到請求,但是拒絕提供服務
- 404 Not Found//請求資源不存在,eg:輸入了錯誤的URL
- 500 Internal Server Error//服務器發生不可預期的錯誤
- 503 Server Unavailable//服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
????????響應頭
告訴客戶端我返回的一些數據的情況,比如大小、時間、返回數據格式...
? ? ? ? 響應正文
具體的響應數據得到以后,我們對應的前端會進行渲染,得到用戶能夠看明白的? ? ? ? ? ? ? ?數據格式及樣式等等。
5.接口測試
? ? ? ? ? ? ? ? 接口測試流程
????????????????
?
? ? ? ? 我們來看一個注冊接口的用例
? ? ? ? ? 我們先來看看文檔
????????
????????接口URL : 協議+域名+路徑 + 公共參數
http://shop-xo.hctestedu.com?s=api/user/reg&application=app&application_client_type=weixin
????????請求方法:POST
? ? ? ? ? 請求參數:需要和請求頭的content-type?一?一?對應
? ? ? ? ? ?正常情況:? ? ? ? ??
- 有些接口文檔會告訴你這個字段是什么請求類型---直接選擇即可
- 一般用form表單提交 (字段相對比較少),【默認】
- 提交的有對應的圖片:from-data
- 字段非常多,或者它的數據{XXXX:XXXX}:raw-json
? ? ? ? 響應數據:? ? ??? ? ??
? ? ? ? ? ? ?--- 期望結果:
? ? ? ? ? ?1. 輸入正確的數據:注冊成功
? ? ? ? ? ? ?2. 輸入已經存在的數據:賬號已存在
? ? ? ? ? .... --- 測試用例設計 (請求參數不同數據的組合)
? ? ? ??執行CASE---工具JMeter
????????????????
- 測試計劃:測試起點,所有組件的容器
- 線程組:代表一定數量的用戶
- 取樣器:向服務器發送請求的最小單元
- 邏輯控制器:結合取樣器實現一些復雜的邏輯
- 前置處理器:在請求之前的工作
- 后置處理器:在請求之后的工作
- 斷言:判斷請求是否成功
- 定時器:負責請求之間的延遲間隔。常用的有固定,高斯,隨機
- 配置元件:配置信息
- 監聽器:收集結果
我們填入對應的值
? ? ? ? 添加監聽器收集結果
????????
響應=== 實際結果 --- 進行獲取:msg字段 ---json提取器
測試用例===期望結果
我們可以通過添加斷言來判斷結果是否符合預期
????????
????????
????????????????????????
請求默認面板
????????
? ? ? ? 可以把不會經常修改的參數放入其中
????????
環境變量 --- 這種不會經常改動的東西---就得這么去做
設置變量 --- 用戶定義的變量 --- 引用變量:${變量名}
我們設置了環境變量之后我們http里的請求就如下所示
????????
數據驅動(DDT)--把接口數據提取出來? ? ?
- 數據準備階段
- 利用csv進行引用
? ? ? ? 我們再加入循環控制器?循環我們的用例數
? ? ? ? 再修改斷言
接口測試當中,怎么解決是誰的問題?--判別是誰就是有個通用的:token(軟件當中的身份證號)
????????
- 登錄 --- 登錄成功之后會在響應數據或者請求頭當中有:ebc3bf29094fde4a0752dcc586b03f1d
- 通過登錄用戶去加入購物車 :請求數據會需要加上:ebc3bf29094fde4a0752dcc586b03f1d (header)--- url
接口關聯
【接口關聯】:通過登錄用戶去加入購物車
- 登錄 --- 登錄成功之后會在響應數據或者請求頭當中有:ebc3bf29094fde4a0752dcc586b03f1d
- 通過登錄用戶去加入購物車 :請求數據會需要加上:ebc3bf29094fde4a0752dcc586b03f1d (header)--- url
- ...
- ...
Jmeter怎么連接數據庫
? ? ? ? 1.填寫如下數據,并且取一個名字
2. 填寫請求:需要引用上面的名字,正常寫對應的sql --- 會有多個數據:sqlname+ 下標
3. 在測試計劃當中必須引用對應的jar包
? ?