1 測試基礎(chǔ)知識(shí)儲(chǔ)備
按照項(xiàng)目開發(fā)階段來分:單元測試撵术、集成測試恩够、系統(tǒng)測試卒落、驗(yàn)收測試
按照測試執(zhí)行的類型劃分:功能測試、自動(dòng)化測試蜂桶、性能測試
按照測試技術(shù)的不同來分:黑盒測試儡毕、白盒測試、灰盒測試
測試人員需要具備一定程度的計(jì)算機(jī)技術(shù)儲(chǔ)備扑媚,只累積測試經(jīng)驗(yàn)遠(yuǎn)遠(yuǎn)不夠腰湾,要不斷的學(xué)習(xí)其他領(lǐng)域的知識(shí),大致包括以下:js/css前端技術(shù)钦购、網(wǎng)絡(luò)架構(gòu)、網(wǎng)絡(luò)協(xié)議褂萧、DNS解析押桃、負(fù)載均衡策略、Linux系統(tǒng)基本操作导犹、數(shù)據(jù)庫知識(shí)等唱凯。
2 Python測試基礎(chǔ)
變量賦值:Python在給變量賦值時(shí),不需要類型聲明谎痢,而且變量可以存儲(chǔ)任何值磕昼。每個(gè)變量在使用之前都必須賦值,變量賦值以后該變量才會(huì)被創(chuàng)建节猿。每個(gè)變量在內(nèi)存中創(chuàng)建票从,都包括變量的標(biāo)識(shí)、名稱和數(shù)據(jù)這些信息滨嘱。變量不僅可以賦值給各種類型峰鄙,還可以隨意改變類型。
全局變量的引用:全局變量的調(diào)用需要通過global+變量的方式引用太雨。
算數(shù)運(yùn)算:出現(xiàn)復(fù)雜的運(yùn)算時(shí)遵循兩個(gè)原則吟榴,1)括號(hào)內(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í)候从祝,才會(huì)計(jì)算y的值襟己;對于邏輯或,只有當(dāng)x為false的時(shí)候牍陌,才會(huì)計(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)建就不能被修改,即元組為只讀榨咐。元組的讀取按照編號(hào)排序介却,每一個(gè)元素會(huì)有一個(gè)編號(hào),不僅可以正序讀取块茁,還可以倒序讀取齿坷,兩者的區(qū)別在于正序從0開始依次往后加桂肌,而倒序從-1依次往前減。要讀取元組的多個(gè)元素時(shí)永淌,采用“元組[m:n]”的方式崎场,m和n就是索引的序號(hào),代表讀取元素從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。
字典的增加和修改:通過給某個(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[鍵])实撒。
字典之間的合并:使用字典的update方法知态,dict1.update(dict2)。與列表合并的區(qū)別在于原在,列表可以合并重復(fù)的數(shù)據(jù)并且不會(huì)被替代,而字典中如果有重復(fù)的鍵村怪,會(huì)被新的鍵的對應(yīng)的值所替代。
函數(shù):函數(shù)就是一段代碼的集合审残,并且可以重復(fù)被調(diào)用搅轿,也就是處理事務(wù)的方法既穆。python中內(nèi)置了很多函數(shù)幻工,可以直接調(diào)用囊颅。自定義函數(shù)的語法如下迁酸,def 函數(shù)名(): ...? ? 函數(shù)名可以由數(shù)字、字母或者下劃線組合而成掸读,但不能以數(shù)字開頭儿惫,冒號(hào)以下的代碼是函數(shù)的主體,換行的縮進(jìn)表示代碼屬于該函數(shù)铛铁。
函數(shù)的參數(shù):自定義函數(shù)的時(shí)候可以加上參數(shù)饵逐,參數(shù)放在括號(hào)之中倍权,參數(shù)可以是一個(gè)或者是多個(gè)当船。給形參賦值的實(shí)例代碼說明:1)調(diào)用add()函數(shù)生年,由于創(chuàng)建參數(shù)時(shí)已經(jīng)賦予了默認(rèn)值抱婉,所以可以不用再填入實(shí)際參數(shù),會(huì)以默認(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)值是不會(huì)變的破讨,調(diào)用時(shí)改變的值只對調(diào)用時(shí)生效添忘,不會(huì)影響函數(shù)本身的默認(rèn)值斧吐。
函數(shù)的返回值:Python區(qū)別于其他語言的地方在于不會(huì)報(bào)錯(cuò),當(dāng)沒有返回值時(shí)會(huì)返回一個(gè)none蝶糯。若需要保存某個(gè)變量的值昼捍,需要在函數(shù)中加return+返回值妒茬。有多個(gè)返回值時(shí)乍钻,多個(gè)返回值之間用逗號(hào)隔開,數(shù)據(jù)以元組的形式返回累舷,同樣可以將返回值按照順序賦值給多個(gè)變量笋粟。
函數(shù)的嵌套:在某個(gè)函數(shù)的代碼中調(diào)用其他函數(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)換成字符串郊艘。
字符串的合并:字符串的合并只需要通過“+”連接即完成了合并,Python會(huì)根據(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ù)就是分隔符璃搜,并且分隔符會(huì)被去掉这吻,語法格式如下橘原,split(字符/字符串,分割次數(shù))芋酌。分割次數(shù)可以省略脐帝,默認(rèn)情況下會(huì)根據(jù)字符串出現(xiàn)的次數(shù)進(jìn)行分割。split()分割實(shí)例中疚顷,字符串以逗號(hào)為界限分割字符腿堤,由于逗號(hào)出現(xiàn)了3次,沒有指定分隔符酗洒,所以默認(rèn)將數(shù)據(jù)分割成了4段寝蹈。語句3打印分割后的數(shù)據(jù)類型箫老,語句4打印分割后列表的第三個(gè)字符串。此外牲蜀,split()函數(shù)可以多次使用涣达。
字符串的替換:使用字符串自帶的replace()函數(shù),語法格式如下鸦概,replace(原字符串,替換的字符串咨察,替換次數(shù))摄狱,替換的次數(shù)默認(rèn)是全部,如果指定替換次數(shù)就按照順序替換刊愚,達(dá)到替換次數(shù)之后就不再進(jìn)行替換了。注意箕憾,replace()函數(shù)只替換副本牡借,不會(huì)改變原來的值,如果需要的話需要將替換后的副本重新賦值給新的變量袭异。
3 接口測試基礎(chǔ)
一 、網(wǎng)絡(luò)傳輸知識(shí)
協(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è)的抓包工具獲取晌缘;2)從本地文件中獲刃顷;3)通過前端技術(shù)獲取蜀踏。
cookie的生命周期:cookie的生命周期是可以設(shè)置的斑响,在創(chuàng)建測試場景時(shí)可以根據(jù)需求進(jìn)行相應(yīng)的設(shè)置。cookie的生存周期是整個(gè)會(huì)話期間:瀏覽器會(huì)將cookie保存在內(nèi)存中,瀏覽器關(guān)閉時(shí)就會(huì)自動(dòng)清除這個(gè)cookie倒淫。cookie的生存周期是長期有效:cookie保存在客戶端的硬盤中兴枯,瀏覽器關(guān)閉的話該coolie也不會(huì)被清除沦补,下次打開瀏覽器訪問對應(yīng)網(wǎng)站時(shí),這個(gè)cookie就會(huì)自動(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é)議的一種解決方案黍檩〉潋颍客戶端訪問服務(wù)器的時(shí)候定枷,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上,這就是session徙菠。客戶端再次訪問時(shí)雕沿,只需要從該session中查找該用戶的狀態(tài)即可朱浴。
session的傳輸媒介:
1)通過cookie傳輸,session的信息是保存在服務(wù)器端的。測試人員只需要運(yùn)用抓包工具從cookie中獲取session ID的值用于模擬用戶的請求。雖然session保存在服務(wù)器上集绰,對客戶端是透明的蔼啦,但他的正常運(yùn)行仍然需要客戶端瀏覽器的支持鸵赫,這是因?yàn)閟ession需要使用cookie作為識(shí)別標(biāo)志。因此斧蜕,服務(wù)器向客戶端瀏覽器發(fā)送一個(gè)名為JSESSIONID的cookie,它的值為該session的ID,測試人員獲取JSESSIONID的值即可。session的有效期與會(huì)話有關(guān)啤贩,存儲(chǔ)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ù)器會(huì)一直保留肩钠,程序一般都是在用戶做log off的時(shí)候發(fā)出指令去刪除session泣港。關(guān)閉瀏覽器不會(huì)導(dǎo)致session被刪除,會(huì)迫使服務(wù)器為session設(shè)置一個(gè)失效時(shí)間价匠,當(dāng)距離客戶端上一次使用session的時(shí)間超過這個(gè)失效時(shí)間時(shí)当纱,服務(wù)器就可以認(rèn)為客戶端已經(jīng)停止了活動(dòng),才會(huì)把session刪除踩窖,以節(jié)省存儲(chǔ)空間坡氯。
cookie與session的區(qū)別:
1)存儲(chǔ)位置不同,通常情況下cookie的數(shù)據(jù)存放在客戶端瀏覽器上毙石,而session的數(shù)據(jù)存放在服務(wù)器上廉沮。
2)存儲(chǔ)容量不同,通常情況下單個(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)存儲(chǔ)略微復(fù)雜的信息豫尽;session中能夠存儲(chǔ)任何類型的數(shù)據(jù)篙梢,包括且不限于string、interger美旧、list渤滞、map等。
4)隱私策略的不同榴嗅,cookie對于客戶端是可見的妄呕,別有用心的人可以分析存放在本地的cookie并進(jìn)行cookie欺騙,所以cookie是不安全的嗽测;session存儲(chǔ)在服務(wù)器上绪励,對客戶端是透明的,不存在敏感信息泄露的風(fēng)險(xiǎn)。
5)有效期上的不同疏魏,開發(fā)者可以通過設(shè)置cookie的屬性停做,達(dá)到使cookie長期有效的效果;由于session依賴于名為JSESSIONID的cookie蠢护,而cookie JSESSIONID的過期時(shí)間默認(rèn)為-1雅宾,只需關(guān)閉窗口該session就會(huì)失效,所以session不能達(dá)到長期有效的效果葵硕。就算不依賴于cookie眉抬,運(yùn)用URL地址重寫也不能完成,假設(shè)設(shè)置的session的超時(shí)時(shí)間過長懈凹,服務(wù)器累積的session就會(huì)越多蜀变,越容易導(dǎo)致session溢出。
6)服務(wù)器壓力的不同介评,session是保存在服務(wù)器端的库北,每個(gè)用戶都會(huì)產(chǎn)生一個(gè)session。假如并發(fā)訪問的用戶很多们陆,則會(huì)產(chǎn)生很多的session寒瓦,耗費(fèi)大量的內(nèi)存;cookie保存在客戶端坪仇,不占用服務(wù)器資源杂腰,對于并發(fā)用戶多的網(wǎng)站,cookie是很好的選擇椅文。
7)瀏覽器支持的不同喂很,1、假如客戶端瀏覽器不支持cookie:cookie是需要客戶端瀏覽器的支持的皆刺,假如客戶端禁用了cookie少辣,或者不支持cookie,則回話跟蹤會(huì)失敗羡蛾。關(guān)于WAP上的應(yīng)用漓帅,常規(guī)的cookie就派不上用場了;運(yùn)用session需要使用URL地址重寫的方式痴怨,一切用到session程序的URL都要進(jìn)行URL地址重寫煎殷,否則session回話跟蹤還會(huì)失效。關(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∏洌跨域名cookie如今被普遍用在網(wǎng)絡(luò)中涂乌,例如Google、baidu英岭、sina等湾盒;session則不會(huì)支持跨域名訪問,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存儲(chǔ)空間的方式碴倾。token的傳遞通常放在cookie中逗噩,如果客戶端不支持cookie掉丽,token也可以放置在請求頭中。和cookie一樣异雁,為了數(shù)據(jù)安全性token中不應(yīng)該放密碼等敏感信息捶障。可以土狗抓包工具獲取token值纲刀。token通常被用于一種輕巧的規(guī)范下项炼,這種規(guī)范叫做JSON Web Token(JWT)。
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所面向的用戶;
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ò)層全陨、傳輸層、會(huì)話層衷掷、表示層辱姨、應(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)模型些楣。如下圖所示:
客戶端脂凶,客戶端的主要職能:1、向服務(wù)器發(fā)送請求愁茁;2蚕钦、接收服務(wù)器返回的報(bào)文并解釋成友善的信息供我們閱讀《旌埽客戶端大概有以下幾類:瀏覽器嘶居、應(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ù)器會(huì)從網(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會(huì)根據(jù)數(shù)據(jù)生成一系列的HTML頁面或者圖片信息,此步驟將訪問這些存儲(chǔ)在服務(wù)器上的物理文件瀑志。
6涩搓、構(gòu)建響應(yīng),web服務(wù)器在識(shí)別資源之后劈猪,構(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ù)器會(huì)在日志文件中添加一條請求記錄掖蛤。
報(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í)某一處資源的地址。假設(shè)請求發(fā)送地址為:www.eaxmple.com/index.html臣樱。瀏覽器會(huì)將地址解析為靶擦,Host: www.example.com? ,? Name: Uri? Value: index.html? ,其中的URI是HTTP中的統(tǒng)一資源標(biāo)識(shí)符(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)文格式如下:
請求報(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請求可能會(huì)導(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)如下所示:
響應(yīng)報(bào)文的headers屬性:
1)cache頭域摘符,cache-control用來設(shè)置緩存的屬性;date生成消息的具體時(shí)間和日期;expires瀏覽器會(huì)在指定過期時(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ù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼的信息頭(server header)用于響應(yīng)客戶端的請求换途。response消息中的第一行叫做狀態(tài)行懊渡,由HTTP協(xié)議版本號(hào)、狀態(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)客戶端解析證書配阵,客戶端首選會(huì)驗(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)容淮椰。
很多情況下五慈,測試人員過多的依賴于工具去完成測試工作。工具雖然能夠簡化我們的工作主穗,但是卻不利于測試人員的成長泻拦。測試人員應(yīng)該擺脫對工具的依賴,從原理上去理解技術(shù)的本質(zhì)忽媒,才能真正的懂得測試聪轿,提升自己的測試能力。