軟件測試必備的Python基礎(chǔ)和網(wǎng)絡(luò)接口基礎(chǔ)

1 測試基礎(chǔ)知識儲備

按照項(xiàng)目開發(fā)階段來分:單元測試、集成測試、系統(tǒng)測試、驗(yàn)收測試

按照測試執(zhí)行的類型劃分:功能測試、自動(dòng)化測試、性能測試

按照測試技術(shù)的不同來分:黑盒測試、白盒測試、灰盒測試

測試人員需要具備一定程度的計(jì)算機(jī)技術(shù)儲備,只累積測試經(jīng)驗(yàn)遠(yuǎn)遠(yuǎn)不夠,要不斷的學(xué)習(xí)其他領(lǐng)域的知識,大致包括以下:js/css前端技術(shù)、網(wǎng)絡(luò)架構(gòu)、網(wǎng)絡(luò)協(xié)議、DNS解析、負(fù)載均衡策略、Linux系統(tǒng)基本操作、數(shù)據(jù)庫知識等。

2 Python測試基礎(chǔ)

變量賦值:Python在給變量賦值時(shí),不需要類型聲明,而且變量可以存儲任何值。每個(gè)變量在使用之前都必須賦值,變量賦值以后該變量才會被創(chuàng)建。每個(gè)變量在內(nèi)存中創(chuàng)建,都包括變量的標(biāo)識、名稱和數(shù)據(jù)這些信息。變量不僅可以賦值給各種類型,還可以隨意改變類型。

全局變量的引用:全局變量的調(diào)用需要通過global+變量的方式引用。

算數(shù)運(yùn)算:出現(xiàn)復(fù)雜的運(yùn)算時(shí)遵循兩個(gè)原則,1)括號內(nèi)的運(yùn)算優(yōu)先運(yùn)算;2)先乘除后加減,從左往右依次運(yùn)算。

關(guān)系運(yùn)算:大于>、大于等于>=、小于<、小于等于<=、等于==、不等于!=;關(guān)系運(yùn)算符的優(yōu)先級低于算數(shù)運(yùn)算。

邏輯運(yùn)算:邏輯與x and y,邏輯或x or y,邏輯非x not;在理解這3種邏輯運(yùn)算之前先要明白true和false的判斷,值不為0或者不為空,程序均判斷為true。對于邏輯與,只有當(dāng)x為true的時(shí)候,才會計(jì)算y的值;對于邏輯或,只有當(dāng)x為false的時(shí)候,才會計(jì)算y的值;對于邏輯非,當(dāng)x為true的時(shí)候返回false,反之返回true。邏輯運(yùn)算的優(yōu)先級低于關(guān)系運(yùn)算。

數(shù)據(jù)結(jié)構(gòu):python內(nèi)置了幾種數(shù)據(jù)結(jié)構(gòu)、元組、列表、字典。

元組:元組可以由不同的元素組成,每個(gè)元素可以是不同的數(shù)據(jù)類型,字符串、數(shù)組或者元組,創(chuàng)建元組的語法格式如下,變量名=(元素1,元素2,...),初始化示例,a=(1,2,“d”,(1,“d”)),元組一旦被創(chuàng)建就不能被修改,即元組為只讀。元組的讀取按照編號排序,每一個(gè)元素會有一個(gè)編號,不僅可以正序讀取,還可以倒序讀取,兩者的區(qū)別在于正序從0開始依次往后加,而倒序從-1依次往前減。要讀取元組的多個(gè)元素時(shí),采用“元組[m:n]”的方式,m和n就是索引的序號,代表讀取元素從m到n的元素,但不包括n這個(gè)元素本身。元組的索引如下所示:


元組的索引

列表:列表和元素類似,都是一組元素的集合,區(qū)別在于列表可以增刪改。創(chuàng)建列表的語法格式,變量名=[元素1,元素2,...]。列表的相關(guān)語法,1)list.append(元素)調(diào)用列表的添加方法加入元素,并將元素添加到列表最后;2)list.insert(索引位置,元素)調(diào)用列表的插入方法加入元素到指定的位置,之后的元素索引位置依次向后順移;3)list.remove(元素)調(diào)用列表的移除方法刪除元素,之后的元素索引位置依次向前順移;4) list[n]=元素(新)讀取列表中的某一個(gè)元素并重新賦值便完成了修改,索引位置不變,只是元素被替代了。

列表之間的合并:1)list1.extend(list2)調(diào)用列表1的擴(kuò)展方法加入列表2,并將列表2的元素放到列表1元素的后面;2)list1=list1+list2直接通過列表相加的方法并重新賦值到列表1之中。

字典:字典由一系列“鍵-值”成對組成,每一組可以理解為元組和列表的一個(gè)元素,并通過{}包含起來,創(chuàng)建字典語法格式如下,dictionary={鍵1:值1,鍵2:值2,...},字典的讀取也是通過索引,不過字典的索引不是通過數(shù)字而是通過鍵作為索引的,所以字典沒有位置先后的概念。如下的實(shí)例代碼中運(yùn)行的結(jié)果為:1? ok。

字典實(shí)例

字典的增加和修改:通過給某個(gè)鍵進(jìn)行對應(yīng)的賦值,當(dāng)鍵對應(yīng)的值存在時(shí)將原來的值替換為新的值,當(dāng)鍵不存在時(shí)創(chuàng)建一個(gè)新的“鍵-值”,dictionary[鍵]=值。

字典的刪除:直接用內(nèi)置del()函數(shù),刪除字典中的鍵就等于刪除了對應(yīng)的值,Del(dictionary[鍵])。

字典的增改刪實(shí)例

字典之間的合并:使用字典的update方法,dict1.update(dict2)。與列表合并的區(qū)別在于,列表可以合并重復(fù)的數(shù)據(jù)并且不會被替代,而字典中如果有重復(fù)的鍵,會被新的鍵的對應(yīng)的值所替代。

函數(shù):函數(shù)就是一段代碼的集合,并且可以重復(fù)被調(diào)用,也就是處理事務(wù)的方法。python中內(nèi)置了很多函數(shù),可以直接調(diào)用。自定義函數(shù)的語法如下,def 函數(shù)名(): ...? ? 函數(shù)名可以由數(shù)字、字母或者下劃線組合而成,但不能以數(shù)字開頭,冒號以下的代碼是函數(shù)的主體,換行的縮進(jìn)表示代碼屬于該函數(shù)。

函數(shù)的參數(shù):自定義函數(shù)的時(shí)候可以加上參數(shù),參數(shù)放在括號之中,參數(shù)可以是一個(gè)或者是多個(gè)。給形參賦值的實(shí)例代碼說明:1)調(diào)用add()函數(shù),由于創(chuàng)建參數(shù)時(shí)已經(jīng)賦予了默認(rèn)值,所以可以不用再填入實(shí)際參數(shù),會以默認(rèn)值作為實(shí)參運(yùn)行;2)調(diào)用執(zhí)行add(2,3)函數(shù),給形參分別賦值2和3,此時(shí)a和b的值將被改變;3)調(diào)用執(zhí)行add()函數(shù),雖然第5行調(diào)用時(shí)改變量a和b的值,但對于函數(shù)本身默認(rèn)值是不會變的,調(diào)用時(shí)改變的值只對調(diào)用時(shí)生效,不會影響函數(shù)本身的默認(rèn)值。

形式參數(shù)
在加形參時(shí)給形式參數(shù)賦值


函數(shù)的返回值:Python區(qū)別于其他語言的地方在于不會報(bào)錯(cuò),當(dāng)沒有返回值時(shí)會返回一個(gè)none。若需要保存某個(gè)變量的值,需要在函數(shù)中加return+返回值。有多個(gè)返回值時(shí),多個(gè)返回值之間用逗號隔開,數(shù)據(jù)以元組的形式返回,同樣可以將返回值按照順序賦值給多個(gè)變量。

返回單個(gè)值 return c
返回多個(gè)值 return a,b,c

函數(shù)的嵌套:在某個(gè)函數(shù)的代碼中調(diào)用其他函數(shù)即為函數(shù)的嵌套。

函數(shù)嵌套

字符串的轉(zhuǎn)換:Python內(nèi)置了str()函數(shù)可以將任何類型的數(shù)據(jù)轉(zhuǎn)換成字符串,語法格式如下,s=str(任意數(shù)據(jù)類型),將需要轉(zhuǎn)換類型的數(shù)據(jù)當(dāng)做str的參數(shù)放入執(zhí)行,運(yùn)行的結(jié)果就是轉(zhuǎn)換成的字符串。其他類型的數(shù)據(jù),包括元組、列表、字典等都可以通過str()轉(zhuǎn)換成字符串。

數(shù)據(jù)類型轉(zhuǎn)換

字符串的合并:字符串的合并只需要通過“+”連接即完成了合并,Python會根據(jù)“+”兩側(cè)的數(shù)據(jù)類型決定是連接操作還是運(yùn)算,但是不同類型的數(shù)據(jù)是無法進(jìn)行合并的。

字符串的截取:可以用索引的方式,可以用split()函數(shù),或者是使用正則表達(dá)式。1)字符串的索引和元組、列表、字典相似,不同之處在于字符串是給每一個(gè)字符一個(gè)位置,而不是以元素為單位的,但是這種方式效率不高;2)使用字符串自帶的split()函數(shù)將數(shù)據(jù)分割成段,并以元素的形式放入列表之中,然后通過索引截取相應(yīng)的字符串,split中的參數(shù)就是分隔符,并且分隔符會被去掉,語法格式如下,split(字符/字符串,分割次數(shù))。分割次數(shù)可以省略,默認(rèn)情況下會根據(jù)字符串出現(xiàn)的次數(shù)進(jìn)行分割。split()分割實(shí)例中,字符串以逗號為界限分割字符,由于逗號出現(xiàn)了3次,沒有指定分隔符,所以默認(rèn)將數(shù)據(jù)分割成了4段。語句3打印分割后的數(shù)據(jù)類型,語句4打印分割后列表的第三個(gè)字符串。此外,split()函數(shù)可以多次使用。

索引的方式截取
split()分割實(shí)例

字符串的替換:使用字符串自帶的replace()函數(shù),語法格式如下,replace(原字符串,替換的字符串,替換次數(shù)),替換的次數(shù)默認(rèn)是全部,如果指定替換次數(shù)就按照順序替換,達(dá)到替換次數(shù)之后就不再進(jìn)行替換了。注意,replace()函數(shù)只替換副本,不會改變原來的值,如果需要的話需要將替換后的副本重新賦值給新的變量。

將逗號替換成and
將逗號替換成and,只替換2次
將替換后的a的副本賦值給新的變量b

3 接口測試基礎(chǔ)

一 、網(wǎng)絡(luò)傳輸知識

協(xié)議:在接口測試中,從客戶端發(fā)送request至服務(wù)器反饋response,網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)就是接口測試中的主要部分,而數(shù)據(jù)傳輸?shù)谋举|(zhì)就是基于網(wǎng)絡(luò)傳輸協(xié)議。

緩存cache:瀏覽器緩存、代理緩存、網(wǎng)關(guān)緩存

cookie:cookie的內(nèi)容是保存的一小段文本信息,這些文本信息組成一份通行證。它是客戶端對于無狀態(tài)協(xié)議的一種解決方案。

獲取cookie的途徑:1)使用瀏覽器的開發(fā)者工具或者專業(yè)的抓包工具獲?。?)從本地文件中獲?。?)通過前端技術(shù)獲取。

常用瀏覽器cookie的存放地址

cookie的生命周期:cookie的生命周期是可以設(shè)置的,在創(chuàng)建測試場景時(shí)可以根據(jù)需求進(jìn)行相應(yīng)的設(shè)置。cookie的生存周期是整個(gè)會話期間:瀏覽器會將cookie保存在內(nèi)存中,瀏覽器關(guān)閉時(shí)就會自動(dòng)清除這個(gè)cookie。cookie的生存周期是長期有效:cookie保存在客戶端的硬盤中,瀏覽器關(guān)閉的話該coolie也不會被清除,下次打開瀏覽器訪問對應(yīng)網(wǎng)站時(shí),這個(gè)cookie就會自動(dòng)再次發(fā)送到對應(yīng)的服務(wù)器端。

cookie不可跨域名或者瀏覽器使用:一般cookie是不可以跨域名的,這是由cookie的隱私安全機(jī)制決定的。隱私安全機(jī)制能夠禁止網(wǎng)站非法獲取其他網(wǎng)站的cookie。

session:session是另外一種記錄用戶狀態(tài)的機(jī)制,不同的是cookie保存在客戶端瀏覽器中,而session保存在服務(wù)器上。session是服務(wù)器端對于無狀態(tài)協(xié)議的一種解決方案??蛻舳嗽L問服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上,這就是session??蛻舳嗽俅卧L問時(shí),只需要從該session中查找該用戶的狀態(tài)即可。

session的傳輸媒介

1)通過cookie傳輸,session的信息是保存在服務(wù)器端的。測試人員只需要運(yùn)用抓包工具從cookie中獲取session ID的值用于模擬用戶的請求。雖然session保存在服務(wù)器上,對客戶端是透明的,但他的正常運(yùn)行仍然需要客戶端瀏覽器的支持,這是因?yàn)閟ession需要使用cookie作為識別標(biāo)志。因此,服務(wù)器向客戶端瀏覽器發(fā)送一個(gè)名為JSESSIONID的cookie,它的值為該session的ID,測試人員獲取JSESSIONID的值即可。session的有效期與會話有關(guān),存儲JSESSIONID的cookie是服務(wù)器自動(dòng)生成的,它的maxAge屬性一般為-1,表示僅當(dāng)前瀏覽器內(nèi)有效。

2)URL地址重寫,URL地址重寫是對客戶端不支持cookie的解決方案。它的原理是將該用戶session的ID信息重寫到URL地址中,服務(wù)器能夠解析重寫后的URL地址,獲取session的ID。這樣即使客戶端不支持cookie,也可以使用session來記錄用戶狀態(tài)。

session的生命周期:對于session來說,除非程序通知服務(wù)器刪除一個(gè)session,否則服務(wù)器會一直保留,程序一般都是在用戶做log off的時(shí)候發(fā)出指令去刪除session。關(guān)閉瀏覽器不會導(dǎo)致session被刪除,會迫使服務(wù)器為session設(shè)置一個(gè)失效時(shí)間,當(dāng)距離客戶端上一次使用session的時(shí)間超過這個(gè)失效時(shí)間時(shí),服務(wù)器就可以認(rèn)為客戶端已經(jīng)停止了活動(dòng),才會把session刪除,以節(jié)省存儲空間。

cookie與session的區(qū)別

1)存儲位置不同,通常情況下cookie的數(shù)據(jù)存放在客戶端瀏覽器上,而session的數(shù)據(jù)存放在服務(wù)器上。

2)存儲容量不同,通常情況下單個(gè)cookie保存的數(shù)據(jù)<=4kb,一個(gè)站點(diǎn)最多保存20個(gè)cookie;對于session并沒有上限,不過出于服務(wù)器端的性能考慮,session內(nèi)不要放過多的東西,并且設(shè)置session刪除機(jī)制。

3)存取方式的不同,cookie中只能保管ASCII字符串,需要通過編碼的方式存取Unicode字符或者二進(jìn)制數(shù)據(jù),運(yùn)用cookie難以實(shí)現(xiàn)存儲略微復(fù)雜的信息;session中能夠存儲任何類型的數(shù)據(jù),包括且不限于string、interger、list、map等。

4)隱私策略的不同,cookie對于客戶端是可見的,別有用心的人可以分析存放在本地的cookie并進(jìn)行cookie欺騙,所以cookie是不安全的;session存儲在服務(wù)器上,對客戶端是透明的,不存在敏感信息泄露的風(fēng)險(xiǎn)。

5)有效期上的不同,開發(fā)者可以通過設(shè)置cookie的屬性,達(dá)到使cookie長期有效的效果;由于session依賴于名為JSESSIONID的cookie,而cookie JSESSIONID的過期時(shí)間默認(rèn)為-1,只需關(guān)閉窗口該session就會失效,所以session不能達(dá)到長期有效的效果。就算不依賴于cookie,運(yùn)用URL地址重寫也不能完成,假設(shè)設(shè)置的session的超時(shí)時(shí)間過長,服務(wù)器累積的session就會越多,越容易導(dǎo)致session溢出。

6)服務(wù)器壓力的不同,session是保存在服務(wù)器端的,每個(gè)用戶都會產(chǎn)生一個(gè)session。假如并發(fā)訪問的用戶很多,則會產(chǎn)生很多的session,耗費(fèi)大量的內(nèi)存;cookie保存在客戶端,不占用服務(wù)器資源,對于并發(fā)用戶多的網(wǎng)站,cookie是很好的選擇。

7)瀏覽器支持的不同,1、假如客戶端瀏覽器不支持cookie:cookie是需要客戶端瀏覽器的支持的,假如客戶端禁用了cookie,或者不支持cookie,則回話跟蹤會失敗。關(guān)于WAP上的應(yīng)用,常規(guī)的cookie就派不上用場了;運(yùn)用session需要使用URL地址重寫的方式,一切用到session程序的URL都要進(jìn)行URL地址重寫,否則session回話跟蹤還會失效。關(guān)于WAP應(yīng)用來說,session+URL地址重寫或許是它唯一的選擇。2、假如客戶端支持cookie:cookie既能夠設(shè)為本瀏覽器窗口及子窗口內(nèi)有效(把過期時(shí)間設(shè)為-1),也能夠設(shè)為一切窗口內(nèi)有效(把過期時(shí)間設(shè)為某個(gè)大于0的整數(shù));session只能在本窗口及子窗口內(nèi)有效,假如兩個(gè)瀏覽器窗口互不相干,它們將運(yùn)用兩個(gè)不同的session。

8)跨域支持上的不同,cookie支持跨域名訪問,例如將domain屬性設(shè)置為“.biaodianfu.com”,則以“.biaodianfu.com”為后綴的一切域名均能夠訪問該cookie??缬蛎鹀ookie如今被普遍用在網(wǎng)絡(luò)中,例如Google、baidu、sina等;session則不會支持跨域名訪問,session僅在自己所在的域名內(nèi)有效。

token:以時(shí)間換取空間的方式。

1)當(dāng)客戶端第一次請求時(shí),發(fā)送用戶信息至服務(wù)器。服務(wù)器對用戶信息使用hs256算法及秘鑰進(jìn)行簽名,再將這個(gè)簽名和數(shù)據(jù)一起作為token,返回給客戶端;

2)服務(wù)器端不保存token,客戶端保存token;

3)當(dāng)客戶再次發(fā)送請求時(shí),在請求信息中將token一起發(fā)給服務(wù)器;

4)服務(wù)器用同樣的hs256算法和同樣的秘鑰,對數(shù)據(jù)再計(jì)算一次簽名,和token中的簽名比較。如果相同,服務(wù)器就知道客戶端已經(jīng)登錄過了,并且可以直接提取到客戶端的user ID。如果不相同,數(shù)據(jù)部分肯定被人篡改過,服務(wù)器就返回客戶端,認(rèn)證不通過。

運(yùn)用token服務(wù)器就不需要保存session ID,只負(fù)責(zé)生成token,然后驗(yàn)證token。這就是服務(wù)器用CPU計(jì)算時(shí)間換取session存儲空間的方式。token的傳遞通常放在cookie中,如果客戶端不支持cookie,token也可以放置在請求頭中。和cookie一樣,為了數(shù)據(jù)安全性token中不應(yīng)該放密碼等敏感信息??梢酝凉纷グぞ攉@取token值。token通常被用于一種輕巧的規(guī)范下,這種規(guī)范叫做JSON Web Token(JWT)。

token的原理

JSON Web Token:JWT是一種開放標(biāo)準(zhǔn)(RFC 7519),定義了一種緊湊且安全的標(biāo)準(zhǔn),用于將各方之間的信息傳輸為JSON對象。該對象通過數(shù)字簽名進(jìn)行驗(yàn)證。使用HMAC算法或使用RSA的公鑰/私鑰對JWT進(jìn)行簽名,它是rest接口的一種安全策略。

JWT的組成:頭部、載荷、簽名。

1)頭部 (Header),頭部用于描述JWT最基本的信息,例如類型和簽名所用的算法等。它被表示成一個(gè)JSON對象,如下的示例,說明了這是一個(gè)JWT,使用的簽名算法是hs256算法,對他進(jìn)行base64編碼后形成的字符串就成了JWT的header。

{

"type::"JWT",

"alg":"hs256"

}

2)載荷(Payload),以下示例中的5個(gè)字段是由JWT的標(biāo)準(zhǔn)所定義的,將下面示例的JSON對象進(jìn)行base64編碼可以得到一串字符串,將這個(gè)字符型稱作為JWT的載荷。

iss:該JWT的簽發(fā)者;

iat(issued at):在什么時(shí)候簽發(fā)的;

exp(expires):什么時(shí)候過期,這里是一個(gè)Unix時(shí)間戳;

aud:接收該JWT的一方;

sub:該JWT所面向的用戶;

JWT的載荷

3)簽名(Signature),將上面的兩個(gè)編碼后的字符串用“.”連接在一起(頭部在一起),就形成了一串新的字符串。最后,將拼接完的字符串用hs256算法進(jìn)行加密。在加密的時(shí)候,需要提供一個(gè)秘鑰(secret)。通過秘鑰和加密算法加密后的部分就叫做簽名。

最后將這一部分簽名也拼接在被簽名的字符串的后面,就得到了完整的JWT。

二、HTTP協(xié)議

國際標(biāo)準(zhǔn)化組織(ISO)將計(jì)算機(jī)網(wǎng)絡(luò)T恤結(jié)構(gòu)的通信協(xié)議劃分為7層,自上而下依次為:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。每層的網(wǎng)絡(luò)協(xié)議如下:

1)物理層:以太網(wǎng)、調(diào)制解調(diào)器、電力線通信(PLC)、SONET/SDH、光導(dǎo)纖維、同軸電纜、雙絞線等。

2)數(shù)據(jù)鏈路層:Wi-Fi(IEEE 802.11)、WiMAX((IEEE 802.16)、ATM、令牌環(huán)、PPP、L2TP、PPTP等。

3)網(wǎng)絡(luò)層協(xié)議:IP(IPv4,IPv6)、ICMP、ICMPv6、IGMP、IS-IS、IPsec、ARP、RARP等。

4)傳輸層協(xié)議:TCP、UDP、TLS、DCCP、SATP、RSVP、OSPF等。

5)應(yīng)用層協(xié)議:NDS、FTP、Gopher、HTTP、IMAP4、POP3、SIP、SSH、TELNET、RPC、SDP、SOAP、GTP等。

HTTP協(xié)議介紹

1)HTTP是建立在TCP/IP協(xié)議之上的,面向應(yīng)用層的超文本傳輸協(xié)議。

2)HTTP由請求和響應(yīng)組成,完全符合標(biāo)準(zhǔn)的客戶端服務(wù)器的請求響應(yīng)模型。

3)HTTP協(xié)議很輕便簡單,并且請求與請求間沒有關(guān)聯(lián),是無狀態(tài)性的協(xié)議。

4)為了彌補(bǔ)這種無狀態(tài)性就需要使用HTTP協(xié)議的擴(kuò)展cookie等方式建立關(guān)聯(lián)。

HTTP協(xié)議的原理

HTTP協(xié)議工作于客戶端-服務(wù)端的架構(gòu)上,客戶端通過URL向服務(wù)端發(fā)送所有請求,服務(wù)器根據(jù)接收到的請求,向客戶端發(fā)送響應(yīng)信息。HTTP協(xié)議采用了請求/響應(yīng)模型。如下圖所示:

HTTP協(xié)議原理

客戶端,客戶端的主要職能:1、向服務(wù)器發(fā)送請求;2、接收服務(wù)器返回的報(bào)文并解釋成友善的信息供我們閱讀??蛻舳舜蟾庞幸韵聨最悾簽g覽器、應(yīng)用程序(桌面應(yīng)用和app應(yīng)用)等。

以Chrome瀏覽器為例,在地址欄輸入網(wǎng)址并回車,瀏覽器做的處理如下:

1)解析出協(xié)議(HTTP)、域名(www.qq.com)。

2)使用HTTP協(xié)議并創(chuàng)建請求報(bào)文向服務(wù)器發(fā)送請求。

3)接收到服務(wù)器返回的內(nèi)容并經(jīng)過渲染之后展示給客戶。

服務(wù)器,服務(wù)器的處理過程:

1、建立連接,如果客戶端已經(jīng)打開一條道服務(wù)器的持久連接,則可以直接使用,否則,客戶端需要在服務(wù)器打開一條新的連接。

2、接收請求報(bào)文,連接上有數(shù)據(jù)時(shí),Web服務(wù)器會從網(wǎng)絡(luò)連接中讀取數(shù)據(jù),并將請求報(bào)文中的數(shù)據(jù)解析出來。

3、接收后表示成相應(yīng)的形式。

4、處理請求,當(dāng)請求被接收和表示之后,服務(wù)器便可根據(jù)請求報(bào)文進(jìn)行處理。例如,post方法中提出報(bào)文主體的數(shù)據(jù)并插入到數(shù)據(jù)之中。

5、訪問資源,請求處理完成之后,比如web會根據(jù)數(shù)據(jù)生成一系列的HTML頁面或者圖片信息,此步驟將訪問這些存儲在服務(wù)器上的物理文件。

6、構(gòu)建響應(yīng),web服務(wù)器在識別資源之后,構(gòu)造響應(yīng)報(bào)文。響應(yīng)報(bào)文中包含狀態(tài)碼、響應(yīng)頭、主體等內(nèi)容。

7、發(fā)送響應(yīng),服務(wù)器將響應(yīng)的數(shù)據(jù)發(fā)送給客戶端機(jī)器。

8、記錄日志,請求結(jié)束,web服務(wù)器會在日志文件中添加一條請求記錄。

報(bào)文,客戶端與服務(wù)器端之間的信息傳遞使用的載體就叫做報(bào)文,報(bào)文分為請求和響應(yīng)兩部分。

1、客戶端向服務(wù)器發(fā)送一個(gè)請求報(bào)文,請求報(bào)文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。

2、服務(wù)器反饋給客戶端一個(gè)響應(yīng)報(bào)文,響應(yīng)報(bào)文包括協(xié)議的版本、成功或錯(cuò)誤的響應(yīng)碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。

Uniform Resource Locator(URL):是互聯(lián)網(wǎng)上用來標(biāo)識某一處資源的地址。假設(shè)請求發(fā)送地址為:www.eaxmple.com/index.html。瀏覽器會將地址解析為,Host: www.example.com? ,? Name: Uri? Value: index.html? ,其中的URI是HTTP中的統(tǒng)一資源標(biāo)識符(Uniform Resource Idetifiers),用來傳輸數(shù)據(jù)和建立連接。日常使用的URL是一種特殊類型的URI,包含了用于查找某個(gè)資源的足夠信息。

URL的主要作用

1)HTTP是URL的方案,方案告訴客戶端使用什么樣的協(xié)議去訪問服務(wù)器。

2)Host:www.eaxmple.com,指服務(wù)器的位置。

3)/index.html是資源路徑,說明了請求的是服務(wù)器上哪個(gè)特定的本地資源。

URL的組成

1)協(xié)議部分,

2)域名部分,

3)端口部分,

4)虛擬目錄部分,

5)文件名部分,

6)錨部分,

7)參數(shù)部分,

請求報(bào)文

報(bào)文格式:request報(bào)文分為3部分,請求行(request line),請求頭部(header),主體(body)。header和body之間有個(gè)空行。HTTP的請求報(bào)文格式如下:

HTTP請求報(bào)文格式

請求報(bào)文的headers屬性:?

1)cache頭域,cache-control用來指定response-request遵循的緩存機(jī)制;if-modified-since把瀏覽器端 韓村頁面的最后修改時(shí)間發(fā)送到服務(wù)器;if-none-match和etag一起工作;pragma防止頁面被緩存。

2)client頭域,accept瀏覽器端可以接收的媒體類型;user-agent告訴HTTP服務(wù)器客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本;accept-charset瀏覽器聲明自己接收的字符集。

3)cookie頭域,最重要的header,將cookie的值發(fā)送給HTTP服務(wù)器。

4)miscellaneous頭域,提供了request的上下文信息的服務(wù)器。

5)entity頭域,content-length發(fā)送 給HTTP服務(wù)器數(shù)據(jù)的長度;content-type表示具體請求中的媒體類型信息。

6)transport頭域,connection和host。

請求報(bào)文的方法

1)get方式:是以實(shí)體的方式得到請求URI所指定的資源信息,如果請求URI只是一個(gè)數(shù)據(jù)產(chǎn)生的過程,那么最終要在響應(yīng)實(shí)體中返回的是處理過程的結(jié)果所指向的資源,而不是處理過程的描述。

2)post方式:用來向目的服務(wù)器發(fā)出請求,要求它接收被附在請求后的實(shí)體,并把它當(dāng)作請求隊(duì)列中請求URI所指定資源的附加新子項(xiàng),所以post請求可能會導(dǎo)致新的資源的建立或已有資源的修改。

響應(yīng)報(bào)文

報(bào)文格式:分為三部分響應(yīng)狀態(tài)(response code)、響應(yīng)頭(response header)、響應(yīng)主體(response body),header和主體之間也有個(gè)空行。結(jié)構(gòu)如下所示:

HTTP響應(yīng)報(bào)文格式

響應(yīng)報(bào)文的headers屬性:

1)cache頭域,cache-control用來設(shè)置緩存的屬性;date生成消息的具體時(shí)間和日期;expires瀏覽器會在指定過期時(shí)間內(nèi)使用本地緩存;pragma防止頁面被緩存。

2)cookie/login頭域,P3P用于跨域設(shè)置cookie;set-cookie用于把cookie發(fā)送到客戶端瀏覽器。

3)entity頭域,etag和if-none-match配合使用;last-modified用于指示資源的最后修改日期和時(shí)間;content-typeweb服務(wù)器告訴瀏覽器自己響應(yīng)的對象的類型和字符集。。。

4)miscellaneous頭域,server指明HTTP服務(wù)器的軟件信息。。。

5)transport頭域,connection和host。

6)location頭域,用于重定向一個(gè)新的位置,包含新的URL地址。

響應(yīng)報(bào)文的狀態(tài)碼:當(dāng)客戶端發(fā)起一次HTTP請求后,服務(wù)器會返回一個(gè)包含HTTP狀態(tài)碼的信息頭(server header)用于響應(yīng)客戶端的請求。response消息中的第一行叫做狀態(tài)行,由HTTP協(xié)議版本號、狀態(tài)碼、狀態(tài)消息三部分組成。

三、HTTPS協(xié)議

HTTPS(hyper transfer protocol over secure socket layer),是以安全為目標(biāo)的HTTP通道。

傳輸原理

1)客戶端發(fā)起HTTPS請求,用戶在瀏覽器里輸入一個(gè)HTTPS網(wǎng)址鏈接到服務(wù)器端口。

2)服務(wù)器端初步響應(yīng),采用HTTPS協(xié)議的服務(wù)器必須有一套數(shù)字證書,這套證書就是一對公鑰和私鑰。將證書發(fā)回給客戶端,證書包含證書的頒發(fā)機(jī)構(gòu)、過期時(shí)間等。

3)客戶端解析證書,客戶端首選會驗(yàn)證證書是否有效,若出現(xiàn)異常則提示證書有問題,若沒有問題,客戶端就隨機(jī)生成一個(gè)值,然后用證書對該隨機(jī)值進(jìn)行加密。

4)客戶端發(fā)送加密信息客戶端發(fā)送的是用證書加密之后的公鑰。

5)服務(wù)器解密信息,服務(wù)器端用公鑰解密之后,得到了客戶端傳來的公鑰,然后把內(nèi)容通過該值進(jìn)行對稱加密。

6)服務(wù)器發(fā)送加密后的信息,服務(wù)器發(fā)送用公鑰進(jìn)行加密后的信息。

7)客戶端解密信息,客戶端用之前生成的私鑰解密服務(wù)器端傳過來的信息,客戶端就獲取了解密后的內(nèi)容。

HTTPS傳輸原理

很多情況下,測試人員過多的依賴于工具去完成測試工作。工具雖然能夠簡化我們的工作,但是卻不利于測試人員的成長。測試人員應(yīng)該擺脫對工具的依賴,從原理上去理解技術(shù)的本質(zhì),才能真正的懂得測試,提升自己的測試能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容