『壹』 軟體測試之介面測試核心-URL&HTTP協議詳解重磅來襲,轉發收藏
URL:統一資源定位符。
URI:統一資源標識符。
URL可以看作是URI的具體實現。雀轎頌
·protocol
·domain
·port
·path
·url parameters
示例:
https://ke.qq.com/course/317690?tuin=15945f87
協議,一般是指://之前的部分,表明通信雙方所採用的通信協議。
協議:是指通信雙方對於通信的數據所採用的數據格式、規程、含義等所作的約定。
對於協議,建議大家了解兩個模型:OSI模型和TCP/IP模型。
從介面測試的角度來說,在不同的通信層可以通過不同的協議來實現介面的測試。
一般來說,應用層的協議是最接近用戶,最容易實現的。
常見的應用層協議有:
http
https http+ssl
ftp
ssh
smtp
pop3
mysql
oracle
MS SQL
是指://之後的伺服器地址。域名可以是真實的伺服器機器的機器名、IP地址、虛擬的域名。
示例頃鄭:
www..com
ke.qq.com
192.168.1.100
是指通過冒號連接在域名之後的數字。
埠:0--65535
埠是由伺服器自身來進行設定的,是伺服器用來發布服務,監聽客戶端的請求的。
如果伺服器所設置的監聽埠是所提供服務的通信協議的默認通信埠,則用戶在訪問伺服器時,可以省略埠。
常見的協議及其默認的通信埠:
http 80
https 443
ftp 21
ssh 22
smtp 25
pop3 110
mysql 3306
oracle 1521
MS SQL 1433
是指在埠之後的所有內容。
一般來說path是指我們要訪問的資源or服務在伺服器的容器下的路徑。
通常path就會和介面的功能直接掛鉤。
URL地址參數也是屬於PATH的一部分。
url地址參數是指通過問號的方式連接在path之後的部分。
url地址參數採用的是鍵值對的方式傳遞參數值,多個鍵值對之間使用&作為連接符。
http協議:HypeText Transfer Protocol,超文本傳輸協議。
目前來說,http協議是絕大多數服務首選的通信協議。
http協議是一種基於request(請求)和response(響應)的協議。
這就意味著http協議是分為兩個部分:
·http request:http請求,是用來定義請求的發送者應該如何去組織數據。
·http response:http響應,是用來定義請求的處理者應該如何去組織返回的數據。
http請求是由三個部分構成:
請求行是指請求數據包中的第一行內容。
示例:GET /phpwind/ HTTP/1.1
一般來說,請求行中包含以下信息:
所有的http請求都必須有請求方法,如果沒有指定,則默認為get方法。
常見的請求方法有:get、post、put、patch、delete、options、trace、header等。
介面使用何種請求方法,和測試沒有關系,只和設計、開發有關系。
get和post的區別:
請求路徑就是指URL中的路徑部分,包含url地址參數。
請求頭是指請求數據包中從第二行開始到第一個空行截止的所有內容。
請求頭是客戶端用來和伺服器進行交互信息、控制信息的交互的,通常和業務本身是沒有關系。
請求頭帆知是鍵值對應的。
標準的請求頭都是有其特殊的含義和作用的。
比較常用的請求頭:
· User-Agent :簡稱UA,客戶端用來告知伺服器,客戶端的環境信息。
PS:伺服器通常會根據該信息頭來判斷客戶請求的來源。
session和cookie的維持和該請求頭有關(一致性)。
· Content-Type :如果請求body中有數據,則該信息一定要添加。
PS:
·該信息頭是用來告知伺服器,請求主體中的數據的數據組織格式。
常見的組織格式有:
鍵值對格式:
示例: aaa=1&bbb=2
混合表單格式,多用於文件上傳類型的介面。boundary表示分隔符,實際的請求主體中的分隔符比請求頭中的分隔符要多"--"。
表示發送的是json格式的數據。
示例:{"aaa":1,"bbb":2}
·請求中具體使用何種格式的數據組織格式,由介面本身決定。
·要避免在全局請求頭中使用Content-Type。
·c ookie、token :狀態相關的信息頭。一般來說cookie不用額外處理。
token這樣的信息頭基本上都需要做關聯處理。
是指請求數據包中從第一個空行開始到最後的所有內容。
·請求主體一般都是和業務相關的,是客戶端發送給伺服器的業務數據。
·請求主體中的數據是有特定組織格式(Content-Type),由開發決定,和測試無關。
·查看請求數據,建議通過raw格式。。尤其是進行調試的時候。
一般來說http響應也是分為三個部分。
·response line:響應行
·response headers:響應頭
·response body:響應主體
響應行是指響應數據包中的第一行內容。
通常來說包含下列信息。
示例:
HTTP/1.1 200 OK
響應代碼,又叫status、status code,狀態、狀態碼。
響應代碼是伺服器用來告知客戶端,伺服器對於請求的通信邏輯層面的處理結果。
響應代碼是三位長度的數字,根據首位數字的不同,可以分為5類。
1xx:表示連接建立過程中的交互、控制信息。
2xx:表示伺服器處理成功,典型就是200.
3xx:表示重定向。
PS:1xx、2xx、3xx都表示請求成功,即伺服器正常工作。
4xx:表示客戶端錯誤。
如:400、401、403、404、405
5xx:表示伺服器錯誤。
如:500、502、501
PS:在介面測試時,不論出現4xx、5xx都表示腳本出錯了。
腳本出錯有兩種情況:
·協議層面:http請求的格式組裝問題。
·業務層面:業務相關的數據不合法導致。
PS:一旦出錯,我們需要做的就是去對比成功的請求數據包(包含頭和body)和失敗的請求數據包。
響應頭是指響應數據包中從第二行開始到第一個空行截止的部分。
響應頭是伺服器用來告知客戶端,伺服器的一些交互、控制信息。
比較常見的:
set-cookie:是伺服器用來返回cookie給客戶端。
響應主體,是指響應數據包中從第一個空行開始到最後的所有內容。
·響應主體有可能是壓縮、編碼的,有些測試工具會自動處理,有些需要編程處理。
·響應主體一般都是伺服器對於介面的處理結果,和業務相關。
這就意味著我們要判斷一個介面的功能是否正確,或者要提取伺服器返回的數據,通常都要對響應主體進行操作。
『貳』 URL&HTTP協議詳解
整理了網課的PPT和老師的知識要點筆記:
URL :統一資源定位符,一般來說,一個URL由5個部分構成:
protocol,domain,port,path,URL parameters。
protocaol :協議,協議是指通信雙方對於通信所採用的數據的組織格式,規程,含義等所做的一個約定。協議是分層的(參考OSI,TCP/IP),通常來說,介面測試中使用到的協議是位於應用層的協議。常見的協議有:http(HypeText Transfer Protocal)https(http+ssl),ftp,ssh,smtp,pop3,mysql,oracle等。
Domain :域名,是我們要訪問的伺服器的機器名,域名,ip地址等。有一些介面文檔中沒有給出域名,要根據測試環境的伺服器來決定這個參數。
Port :埠號,在域名之後domain:port。埠號是由伺服器(軟體)來設置指定的,伺服器就會去時刻不停地監聽用戶發送到指定埠的請求。如果伺服器設定的埠和其所用的通信協議是默認的對應關系,則用戶在使用url訪問服務時,埠可以省略。埠好的范圍為0-65535,一般自定義埠號使用10000以後的比較安全,不會和一些默認協議埠沖突。常見的協議以及對應的默認通信埠為:
http:80 https:443/8443 ssh:22
ftp:21 smtp:25 pop3:110
mysql:3306 oracle:1521
path:是指埠之後的所有內容,path通常是指我們要訪問的資源or服務在伺服器的容器路徑下的絕對地址。
url parameters:url地址參數,是以問好?作為鏈接符,拼接在path之後的,url地址參數採用鍵值對的方式,多個鍵值對之間使用&作為鏈接符。
注意:從協議的角度,url是沒有長度限制,但是很多瀏覽器對url的長度作出了限制,所以不能把所有參數都放在url中,可以放在請求體中。
http協議:超文本傳輸協議,是BS應用中普遍使用的一種協議。目前來說,該協議因其本身的快速,靈活的特性,已經在很多領域得到廣泛的應用。
特點:
1. http協議是一種基於request和response的協議
2. http協議是一種簡單,靈活的協議,只需要指定方法,url即可實現訪問。
3. http協議是一種無鏈接,快速的協議。
http的無鏈接是指短鏈接(信息頭中的標識connection:close)從http1.1版本開始,默認已經變更為長鏈接(信息頭中的標識connection:keep-alive)
短鏈接:一個tcp鏈接之上只能建立一個http鏈接,http鏈接關閉,則對應的tcp鏈接也會關閉。
長鏈接:一個tcp鏈接之上可以建立多個http鏈接,heep鏈接關閉,tcp鏈接不會關閉,直到收到關閉信號位置。
http2.0實現了多路復用,但還是基於tcp協議的。
http3.0計劃將棄用tcp協議,使用udp協議。
4. http協議是一種無狀態的協議,後引入了session和cookie機制來維持狀態。
http request:http請求,通常包含三個部分:request line,request headers,request body。
request line :請求行,是指請求數據包中的第一行內容:
eg:GET /phpwind/ HTTP/1.1
request method請求方法+request path請求路徑+ protocol協議/version協議版本
request method請求方法:如果沒有指定,將使用默認的方法get
get和post:都是請求方法,都可以向伺服器傳遞數據,區別在於,如果使用get方法發送數據,數據將組織在url地址參數中,使用post方法發送數據,數據將位於請求主體中。
post方法比get方法要安全,並不是因為參數的組織形式,而是因為post方法請求在客戶端是不會緩存的,而get方法請求在客戶端是會有緩存的。
request headers: 請求頭,是指從第二行開始到第一個空行截止的部分。請求頭是客戶端用於和伺服器進行信息交互,控制的一個部分,通常來說和業務無關,請求頭中的參數是鍵值對形式的,每對參數都是有特殊作用的。常見的請求頭參數:
User-agent:是用來告知伺服器,客戶端的一些節本信息,伺服器是通過該信息來識別客戶端。通常來說session是和該信息頭有關,建議全局統一。
content-type:如果請求主體有內容,則該信息頭必須加上,是用於指定請求主體中參數的形式的。
cookie,auth,token:是和鑒權相關的信息。postman會自動管理和保存請求的cookie,而Jemeter需要添加自己添加cookie管理器來保存請求cookie。
在介面測試抓包時,還要關注accept-encoding參數,如果是gzip,表示介面回傳的數據是壓縮過的。介面測試的時候需要指定這個參數,不然發起的介面測試的壓力和實際使用介面時會差別很大。
帶上accept-encoding:gzip,deflate時,返回的數據大小是13277bytes
disable HTTP信息頭管理器之後,返回數據的大小變成了54191byte:
如果是多語言的介面,還需要關注頭文件中的Accept-Language。
request body:請求主體,是指從第一個空行之後的所有內容。通常來說請求主體就是我們的客戶端所封裝的數據。客戶端封裝數據的格式是由客戶端(產品,介面)來決定的,我們只能遵循,不能自定義。
掌握http請求的構成和要點之後,就能夠幫助我們去完成基本的介面腳本的封裝。
http response:http響應,通常來說,http響應也是由三部分構成:response line,response header,response body。
response line:響應行,是指響應數據包的第一行。
eg:HTTP/1.1 200 OK
protocol/version +response code + response message
response code:響應狀態碼,是伺服器用來告知客戶端,伺服器對請求的處理狀態,這里的處理狀態僅僅是從通信邏輯上的處理狀態,而不是業務邏輯的處理狀態。
響應狀態碼通常是由3位長度的數字構成,根據首位數字的不同,可以分為5類:
1**:表示鏈接建立過程中的通信,交互信息。
2**:表示伺服器處理成功,典型的是200。
3**:表示重定向。
1**,2**,3**都表示客戶端和伺服器通信是成功的,但是最終業務是否正確,還是要根據對響應主體的檢測才可以判斷。
4**:表示客戶端錯誤。404
5**:表示伺服器錯誤。
websocket:簡稱ws協議,本質上是雙方先使用http協議建立鏈接,然後再升級申請專屬的tcp鏈接。
老師使用的抓包工具HttpWatch: