1. 程式人生 > 實用技巧 >介面測試基礎知識

介面測試基礎知識

1.介面的概念

介面的分類:廣泛的分為內部的和外部的。

外部介面:例如公司的專案涉及到支付這塊,微信支付,支付寶支付,銀聯支付,不會是自己公司開發的介面,因為使用者的資料在阿里雲和騰訊那邊,想動支付寶或者是微信中使用者錢包裡面的錢,必須要通過他們,所以直接呼叫他們的介面。這個就是外部介面。

內部介面:公司自己研發的,自己可以呼叫的,不需要通過第三方。

介面分為不同的型別:

Http,Webservice,Sockect,Dubbo。

之所以分為不同型別的介面,是因為它們實現的協議不一樣。

如果我採用的是TCP,它就必須採用TCP,不然語言不通。

介面包括:有個地址,知道它是什麼協議,傳送什麼引數。

介面之間沒有不同,只是協議不同而已。

Web介面一般是Http協議。

Webservice協議也是一種Http協議,不過它進行了一種封裝,只能傳送Post型別的Http請求。

介面的本質:介面和介面不同就是它們的通訊協議不同。

測試介面的本質就是測試類裡面的函式。

Http協議中最常見的介面:Get,Post,Delete,Put,Head,Option。

用法都一樣:選擇方式,然後傳參。

如果工作中遇到問題,可以問開發到底採用的是哪種請求方式。

抓包也可以看到是哪種請求方式。

抓包工具有Charles,Fiddler,F12

2.介面測試工具

兩種方式講解,F12是最簡單的那一種。

Fiddler工作原理:

Fiddler相當於一箇中轉站。我發起請求給Fiddler,Fiddler發給伺服器,拿到響應結果後,伺服器直接發給Fiddler,Fiddler再發給瀏覽器。這樣的一個過程。

通過瀏覽器發起一個請求,在計算機裡面我們肉眼可見的就是一個個的資料包。我們傳送和接收的資料全部都可以抓到。但是不是資料包的形式顯示,會分不同的部分,網路中不可見的地方如網路層或者網路經過光纖去傳的時候,是種010101這樣的位元流,根據這種010101去傳資料,除非學過《機電原理》,不然看不懂。

我們只需要知道抓到包之後,到了我們手裡面是什麼樣的。

3.Http請求

1.一個Http請求分為兩部分:Http Request 和Http Response

從客戶端(Fiddler)發給伺服器的叫做Http Request

服務端返給客戶端(Fiddler)的叫做Http Response

2.Http Request裡面兩個重要的東西:

請求地址: 如果Fiddler想要發訊息給伺服器,肯定得先知道地址。

請求方法: 想進去這個地址的門,必須得知道是發的Get請求、Post請求還是Delete請求。(例如小明去小紅家做客,想進入,必須知道暗號)

3.Http協議/版本:按F12可以自己檢視。例如,版本:HTTP/2.0 (例如小明去小紅家做客,想進入,必須知道暗號,還得告訴我是哪個班級得,不然不接待)

4.請求頭:在傳送得時候,在這個請求裡面附帶得一些資訊。叫Request Headers

Headers這種型別的名詞不可亂做變數。

5.請求正文:就是我們所說得引數。

6.向伺服器發請求,如果有引數,那麼就一定要帶引數,如果沒有引數,就不用帶引數。

7.有點很重要: 後期在傳送請求得時候,它說必須從瀏覽器發起請求,不能從Jemeter,不能從Python裡面發起請求。必須只能從正經的谷歌,火狐發起請求,它才接受。那麼就需要偽裝下,假裝自己是個瀏覽器,加下User-Agent。

User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

Mozilla/5.0 是這個瀏覽器的核心。

Firefox/67.0是瀏覽器版本。

User-Agent也就是個代理,意思是這個請求來自於哪個客戶端。

如果是在做Python的時候,它會顯示Http Request或者是Python Request,它不會顯示瀏覽器。假裝我是個瀏覽器就在頭部裡面加個User-Agent這樣的東西。

8.請求頭資訊是有用的(效能測試,編碼解碼用的到),可以瞭解下。

為你詳細解讀HTTP請求頭的具體含意:

連結:https://jingyan.baidu.com/article/375c8e19770f0e25f2a22900.html

8.使用Fiddler做抓包分析:

Fiddler抓包分析連結:https://www.cnblogs.com/coky/p/6704277.html

9.開啟Fiddler設定過濾地址:

Host 域名

URL 就是除了域名和埠以外的,剩下那部分。

Statistics 統計您的請求時間,比如說什麼時候發起請求,什麼時候完成請求,響應的時間需要多久,發了多少個數據包。如果不是做網路測試的,這個可以不用關注。

Inspectors:分為上下兩部分。第一部分是Request Headers,第二部分是Response Body

Raw 原始傳送的一些資訊。

按F12看到的響應頭:

看響應資訊,點選第二部分的TextView。看到幾種不同格式的響應資訊:

4.Get請求:

Get請求會把請求引數和地址拼接在一塊。但是也可以用其它方式寫,不在URL裡面傳的。

WebForms可以看到Get請求的引數。

例如:http://xxx.xx.xx.xx:8080/login?username=qinghan&pwd=123456

請求地址 問號之後是請求引數。

一般情況下是通過問號把地址和請求引數拼接起來,不同引數間用&符號拼接起來。

有些Get請求是沒有引數的,根據具體需求來。

username=qinghan可以理解為一個鍵值對,前面是Key,後面是Value。

Key=Value,Key=Value,不同的值之間用&符號拼接。

Get請求:https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False

5.Post請求

Post請求,資料和請求地址是分開的。也就是說看不到它的引數。在WebForms可以看到。

請求裡面記住這幾點:地址,請求方式,協議版本,請求引數,請求頭。

1.請求頭裡的引數是每次請求必帶的嗎?

看介面文件裡有沒有寫這些必須放在請求頭裡面的,如果有,那就必須放在請求頭裡面。介面文件裡的。

Header就是要放在請求頭裡的東西。Body就是你要傳送的請求引數。

2.Response裡面有2個重要的東西:

1.狀態碼:標記我這個請求傳送到伺服器是成功了還是失敗了。是被允許了還是被拒絕了。

200 請求成功。表示請求有傳送到伺服器,伺服器有接收到我的請求,但是如果我傳送了一個登入請求,它返回了一個200,請問這個登入成功了沒有?

並不代表登入成功了,只能說明伺服器有響應。(輸入正確的使用者名稱和錯誤的密碼,伺服器也返回200。意思是你的請求我接收到了,但是不好意思的你的密碼錯誤,雖然你的請求我接收到了,但是你還是登入失敗了)。200只是一個狀態碼,表示你的請求是否有到達伺服器。伺服器接收到你的請求之後,對你的請求做的一個標記。

200 只是伺服器給的一個響應,具體的響應內容要看響應正文,正文裡面是OK,就是OK。正文裡面是失敗,就是失敗。

響應頭和請求頭是對應的。點選Hearders看下(頁面效能,頁面測試需要看),主要包含這個頁面的節碼是什麼,這個頁面是什麼格式的,這個頁面什麼時候過期,這個頁面有沒有什麼頁面是來自快取的。這個頁面的超時時間是來自什麼時候,是私有的還是非私有的,都會在這裡面體現。

3.一個http請求資訊或者回應資訊由哪些組成?

請求:請求頭+一個報文

響應:響應頭+一個報文

這是http訊息實體的一個封裝。

比較重要:在Request裡知道一個User進的是什麼,請求引數是什麼,Get,Post是什麼,協議是什麼。

4.響應裡面重要的是狀態碼。

302 這個地址本來指向A頁面,但是頁面暫時沒有,所以做了個臨時重定向。萬一有人訪問了這個A頁面,A頁面不在了,就給找到B頁面去。

304 未修改。

CDN是個伺服器。一種內容,靜態檔案的處理機制,CDN就是內容分發網路。一般它會做靜態的伺服器,存靜態的資源,存Js、css jpj等這種資源,一般來說很少會改動。不會存到資料庫裡面去,會存在資料夾裡面,一般放在靜態資源裡面。例如淘寶,京東那麼多圖片存在CDN(靜態伺服器)上,內容分發網路上面。一般訪問這些資源,它會下載到瀏覽器,然後快取,快取後有一個過期時間,比如這個快取在本地可以存一週。當我一旦訪問了CND裡的這些靜態資源之後,它會返回304。304的意思是你訪問的這些靜態資源沒有被修改,所以不需要再到伺服器裡面去下載,你用快取的就行了。

一般來說放在靜態資源裡,如果要改的話,不需要去改程式碼,把靜態資源裡面換一下,保證名字一樣就可以了。

簡單來說,一個瀏覽器裡面有圖片這些東西,一般來說304也是HTTP常見的狀態碼,只有在這裡出現。例如登入按鈕,圖片是不經常變的。我把這些圖片下載到瀏覽器裡面,每次我去請求的時候,都會去伺服器把這些請求拉下來。只要靜態伺服器中的內容不變,那我就每次用我快取裡的這些圖片就可以了,不需要再到伺服器裡面再拉資源。

401 沒有授權。和403是一樣的。

403 你沒有許可權訪問這個路徑。

404 資源找不到。地址錯了或頁面不存在了。

500 內部伺服器錯誤。

504 超時。

502 網端錯誤。

以5開頭的錯誤,可以去找開發,一般是內部程式碼出了問題。肯定不是客戶端,也不是網路出了問題。是內部伺服器上的問題。

面試記住常用的幾個狀態碼。

響應正文一般來說有這幾種常見的格式:Html,Xml,Json等,比較常見的有Html和Json

Json就是Python裡面的字典,格式一樣的。

Html就是標籤開頭的。

5.Cookie:

Cookie是Cookie,快取是快取,快取包含Cookie。Cookie是快取的一個子集。

超市的會員卡相當於Cookie,幾月幾號消費了什麼,花了多少錢,喜歡哪個牌子的牛奶都清清楚楚。

我們的操作習慣或者行為都在這個會員卡里。伺服器通過Cookie知道你是誰。Http請求是無狀態的,無任何狀態。

標記。如果發一個Http請求,又發一個Http請求,伺服器並不認識上一個請求和這個請求都是同一個人發的。

要想讓伺服器識別這兩個請求是同一個伺服器發過去的,Http請求就得帶上它的會員卡cookie。

快取裡面除了Cookie,還有圖片,Css,Js等這些。

清空了快取不代表清空了Cookie,清空了Cookie不代表清空了快取。

6.Session:

伺服器有超時機制。在網頁或者介面,它會有這個超時的時間,Session叫做會話時間。

有時操作網頁,過會不操作了,提示請重新登入。這個是由Session來控制的。

它會有個時間戳,還有個Session id來控制。

看具體網站的設定,有的Session裡面是不超時的,有的是30分鐘超時。每個公司定的規矩是不一樣,預設是30分鐘,在做測試的時候也得去測下這個時間戳。也就是測試這個網頁什麼時候過期。在這一段時間內,你跟伺服器可以發起任何請求,不需要重新登入,但是超過30分鐘,在30分鐘內未進行任何操作,30分鐘後想重新操作,那麼就得重新登入。提示已超時請重新登入。這個就叫做會話。

客戶端就是我的瀏覽器,伺服器就是發起請求的伺服器(專案,軟體,應用)。伺服器說了算比較合適,伺服器說了算,可以永遠都不過期,別人的應用別人做主。Cookie是在客戶端,Session是在伺服器端。每次請求得時候,伺服器會給你發給Session id,那麼你每次請求得時候都需要把Session id帶過去,告訴伺服器,這是我的Session id,我還在會話期內,並沒有超時。

前提是公司得專案有做這個超時判斷。

Session id每次都是變化得,它是個變化得值,而且是由伺服器提供得。所以每次都得拿過來再傳給伺服器,這個是我剛剛得Session id。它每次請求都會重新發一個。

7.鑑權:

token一般來說都有個這樣得token關鍵字,比如某某token。

它不一定叫token名字,但是它都會帶一個token,這是個令牌。代表你有這個許可權訪問這個解面並不是非法訪問。

因為這個token也是伺服器發的。

例如不在網頁點選登入進入,直接進入登入後得介面。這就是繞過前端得非法操作。不需要通過前端,拿到介面直接進行操作。

防止非法操作,就需要token。每個頁面都有個這樣得token,把頁面得token拿到,下一個請求它就會校驗,有沒有token,是來自哪個頁面,會不會是繞過前端來的。如果沒有token,或者token不對,就會拒絕你的請求。

token是由伺服器提供得,每次都會變化。所以,想繞過前端去做這個事情就不行,它會要這個token。如果你知道token在哪,可以用小技巧把token獲取到,這也可以的。防止你跳過頁面,直接訪問它的介面,它需要你帶一個來自該頁面的,或者來自前一個頁面的token,才能證明是正常的。

8.授權:

在訪問第三方介面的時候,會有一個Key。

如果需要呼叫第三方介面或者是自己的內部介面,也會做這樣的一個限制,想訪問,就需要密碼。

看你有沒有許可權訪問,我有沒有授權訪問。如果是第三方介面,它有的時候是,你必須要帶這個金鑰過去,不帶就請求不了。

6.最簡單的授權:

如果遇到那種簽名的,要通過程式碼簽名,要把程式碼拿到手,瞭解它的簽名規則是什麼,拿到簽名再往後面做。非常複雜。原理都是一樣,只是實現的過程會複雜一些。

JMeter輸入IP,路徑,有埠號就放埠號,沒有埠號就不用放。

輸入介面文件提供的引數。選擇察看結果樹,點選Run,檢視響應資料,提示沒有Key,沒有授權。

把Key的值填進去,選擇察看結果樹,點選Run,檢視響應資料,就有結果出來了。


歡迎掃碼關注!