軟件測試(第2版) 課件 第3、4章 白盒測試方法、接口測試_第1頁
軟件測試(第2版) 課件 第3、4章 白盒測試方法、接口測試_第2頁
軟件測試(第2版) 課件 第3、4章 白盒測試方法、接口測試_第3頁
軟件測試(第2版) 課件 第3、4章 白盒測試方法、接口測試_第4頁
軟件測試(第2版) 課件 第3、4章 白盒測試方法、接口測試_第5頁
已閱讀5頁,還剩219頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第3章白盒測試方法《軟件測試(第2版)》學(xué)習(xí)目標(biāo)/Target

掌握基本路徑法的使用,能夠應(yīng)用基本路徑法設(shè)計測試用例

掌握語句覆蓋法的使用,能夠應(yīng)用語句覆蓋法設(shè)計測試用例

掌握判定覆蓋法的使用,能夠應(yīng)用判定覆蓋法設(shè)計測試用例

掌握條件覆蓋法的使用,能夠應(yīng)用條件覆蓋法設(shè)計測試用例學(xué)習(xí)目標(biāo)/Target

掌握判定-條件覆蓋法的使用,能夠應(yīng)用判定-條件覆蓋法設(shè)計測試用例

掌握條件組合覆蓋法的使用,能夠應(yīng)用條件組合覆蓋法設(shè)計測試用例

了解目標(biāo)代碼插樁法的原理,能夠描述目標(biāo)代碼插樁法的3種執(zhí)行模式

掌握源代碼插樁法的使用,能夠應(yīng)用探針代碼測試程序章節(jié)概述/Summary白盒測試又稱為透明盒測試、結(jié)構(gòu)測試,它基于程序的內(nèi)部邏輯結(jié)構(gòu)進(jìn)行測試,而不是程序的功能(黑盒測試)。因此,進(jìn)行白盒測試時,測試人員需要了解程序的內(nèi)部邏輯結(jié)構(gòu),根據(jù)使用的編程語言設(shè)計測試用例。白盒測試可用于單元測試、集成測試和系統(tǒng)測試。白盒測試的方法包括基本路徑法、邏輯覆蓋法、程序插樁法,本章將對白盒測試的方法進(jìn)行詳細(xì)講解。目錄/Contents010203基本路徑法邏輯覆蓋法程序插樁法基本路徑法3.1

先定一個小目標(biāo)!掌握基本路徑法的概述,能夠使用基本路徑法設(shè)計測試用例3.1.1 基本路徑法概述基本路徑法是一種將程序的流程圖轉(zhuǎn)化為程序控制流圖,并在程序控制流圖的基礎(chǔ)上,分析被測程序控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計測試用例的方法。使用基本路徑法設(shè)計的測試用例需要確保被測程序中的每個可執(zhí)行語句至少被執(zhí)行一次。3.1.1 基本路徑法概述3.1.1 基本路徑法概述步驟1步驟2步驟3步驟4使用基本路徑法設(shè)計測試用例的4個步驟首先需要分析被測程序的源代碼,并畫出程序的流程圖。畫出流程圖3.1.1 基本路徑法概述步驟2步驟1步驟3步驟4控制流圖是描述程序控制流的一種圖示方法。控制流圖可以由程序流程圖轉(zhuǎn)化而來。如果測試的源程序代碼簡潔,也可以直接通過分析源程序代碼畫出控制流圖。在畫程序的控制流圖時,使用圓圈表示一條或多條無分支的語句;使用箭頭表示控制流方向。程序中常見的控制流圖如下圖所示。畫出控制流圖3.1.1 基本路徑法概述步驟3步驟1步驟2步驟4計算程序圈復(fù)雜度的方法有3種,具體如下。使用公式計算:V(G)=E-N+2,其中V(G)表示程序的圈復(fù)雜度,E表示控制流圖中邊的數(shù)量,N表示控制流圖中節(jié)點的數(shù)量。使用公式計算:V(G)=P+1,P表示控制流圖中判定節(jié)點的數(shù)量。程序的圈復(fù)雜度數(shù)量等于控制流圖中的區(qū)域數(shù)量。為了演示上述介紹的3種方法,假設(shè)某程序的控制流圖如右圖所示。計算程序的圈復(fù)雜度3.1.1 基本路徑法概述步驟4步驟1步驟2步驟3根據(jù)計算出的程序圈復(fù)雜度導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計測試用例的輸入數(shù)據(jù)和預(yù)期結(jié)果。以上一頁中某程序的控制流圖為例,由于圈復(fù)雜度為4,所以可以得到4條獨(dú)立的路徑,具體如下。路徑1:1→7。路徑2:1→2→3→7。路徑3:1→2→4→5→8→1→7。路徑4:1→2→4→6→8→1→7。根據(jù)以上4條獨(dú)立的路徑即可設(shè)計測試用例,從而確保每一條路徑都能被執(zhí)行。設(shè)計測試用例如何將程序流程圖轉(zhuǎn)化為控制流圖多學(xué)一招將程序流程圖轉(zhuǎn)化為控制流圖時,在順序結(jié)構(gòu)、if條件語句結(jié)構(gòu)、while循環(huán)語句結(jié)構(gòu)、until循環(huán)語句結(jié)構(gòu)和多分支結(jié)構(gòu)語句中,分支的匯聚處需要有一個匯聚節(jié)點。如果判斷條件表達(dá)式是由一個或多個邏輯運(yùn)算符(如or、and)連接的復(fù)合條件表達(dá)式,則需要修改為只有單個條件的嵌套判斷。假設(shè)有一個待測試的程序流程圖如右圖所示。3.1.1 基本路徑法概述上一頁中的待測試的程序流程圖中,序號0表示開始,在轉(zhuǎn)化為控制流圖時可以忽略。將待測試的程序流程圖轉(zhuǎn)化為控制流圖后,控制流圖如下圖所示。3.1.1 基本路徑法概述多學(xué)一招

先定一個小目標(biāo)!掌握基本路徑法的使用,能夠使用基本路徑法設(shè)計判斷年份是否為閏年的測試用例3.1.2 實例:判斷年份是否為閏年在白盒測試中,經(jīng)常使用基本路徑法測試程序的代碼。為了讓讀者更好地掌握基本路徑法的使用,下面以判斷閏年問題的C語言程序代碼為例,講解如何通過基本路徑法設(shè)計測試用例。3.1.2 實例:判斷年份是否為閏年當(dāng)年份能夠被4但不能被100整除時為閏年,或者年份能夠被400整除時為閏年,據(jù)此可以設(shè)計判斷輸入的年份是否為閏年的C語言程序代碼,具體代碼如下。通過分析上述代碼畫出程序的流程圖,如下圖所示。3.1.2 實例:判斷年份是否為閏年[單擊查看源碼]畫出程序的控制流圖,如右圖所示。右圖中,一共有10條邊,8個節(jié)點,4個區(qū)域,其中判定節(jié)點有3個,分別是1、3、4,程序的圈復(fù)雜度為4。根據(jù)圈復(fù)雜度可以得到4條獨(dú)立的路徑,具體如下。路徑1:1→2→8。路徑2:1→3→4→6→8。路徑3:1→3→4→7→8。路徑4:1→3→5→8。3.1.2 實例:判斷年份是否為閏年根據(jù)上一頁中的4條獨(dú)立路徑即可設(shè)計測試用例。判斷閏年問題的測試用例如下表所示。3.1.2 實例:判斷年份是否為閏年測試用例執(zhí)行路徑輸入數(shù)據(jù)預(yù)期結(jié)果test1路徑1year=1999leap=0test2路徑2year=2000leap=1test3路徑3year=1900leap=0test4路徑4year=2020leap=1當(dāng)預(yù)期結(jié)果leap=0時,表示平年;當(dāng)預(yù)期結(jié)果leap=1時,表示閏年。邏輯覆蓋法3.2

先定一個小目標(biāo)!掌握語句覆蓋法的使用,能夠應(yīng)用語句覆蓋法設(shè)計測試用例3.2.1 語句覆蓋語句覆蓋(StatementCoverage)又稱行覆蓋、段覆蓋、基本塊覆蓋,它是最常見的覆蓋方式之一。語句覆蓋的目的是測試程序中的代碼是否被執(zhí)行,它只測試代碼中的執(zhí)行語句,這里的執(zhí)行語句不包括頭文件、注釋、空行等。語句覆蓋在多分支的程序中只能覆蓋某一條路徑,使得該路徑中的每一個語句至少被執(zhí)行一次,不會考慮各種分支組合的情況。3.2.1 語句覆蓋下面結(jié)合一段小程序介紹語句覆蓋中方法的執(zhí)行,程序偽代碼如下。3.2.1 語句覆蓋ifx>0andy<0//條件1

z=z-(x-y)ifx>2orz>0//條件2

z=z+(x+y)上述代碼中,and表示邏輯運(yùn)算&&,or表示邏輯運(yùn)算||。第1~2行代碼表示如果x>0成立并且y<0成立,則執(zhí)行z=z-(x-y)語句;第3~4行代碼表示如果x>2成立或者z>0成立,則執(zhí)行z=z+(x+y)語句。根據(jù)程序偽代碼可以畫出流程圖,程序執(zhí)行的流程圖如右圖所示。根據(jù)程序執(zhí)行流程圖中標(biāo)示的語句執(zhí)行路徑設(shè)計測試用例,具體如下。3.2.1 語句覆蓋test1:x=3y=-1z=2執(zhí)行上述測試用例,程序的運(yùn)行路徑為a→c→e??梢钥闯龀绦蛑衋→c→e路徑上的每個語句都能被執(zhí)行,但是語句覆蓋無法全面反映多分支的邏輯,僅僅執(zhí)行一次不能進(jìn)行全面覆蓋。因此,語句覆蓋是弱覆蓋方法。

先定一個小目標(biāo)!掌握判定覆蓋法的使用,能夠應(yīng)用判定覆蓋法設(shè)計測試用例3.2.2 判定覆蓋判定覆蓋(DecisionCoverage)又稱為分支覆蓋,其原則是設(shè)計足夠多的測試用例,在測試過程中保證每個判定條件至少有一次為真值,有一次為假值。判定覆蓋的作用是使真假分支均被執(zhí)行,雖然判定覆蓋比語句覆蓋測試能力強(qiáng),但仍然具有和語句覆蓋一樣的單一性。3.2.2 判定覆蓋判定覆蓋測試用例如下表所示。3.2.2 判定覆蓋測試用例xyz執(zhí)行語句路徑test12-11a→c→dtest2-31-1a→b→dtest33-15a→c→etest4111a→b→e判定覆蓋語句一般是由多個邏輯條件組成的,如果僅僅判斷測試程序執(zhí)行的最終結(jié)果而忽略每個條件的取值,必然會遺漏部分測試路徑。因此,判定覆蓋也屬于弱覆蓋。

先定一個小目標(biāo)!掌握條件覆蓋法的使用,能夠應(yīng)用條件覆蓋法設(shè)計測試用例3.2.3 條件覆蓋條件覆蓋(ConditionCoverage)是指設(shè)計足夠多的測試用例,使判定語句中的每個邏輯條件取真值與取假值至少出現(xiàn)一次。例如,對于判定語句if(a>1orc<0)中存在a>1和c<0這2個邏輯條件,設(shè)計條件覆蓋測試用例時,要保證a>1、c<0的真值、假值至少出現(xiàn)一次。下面以程序執(zhí)行的流程圖及其程序為例,設(shè)計條件覆蓋測試用例,在該程序中,有2個判定語句,每個判定語句有2個邏輯條件,共有4個邏輯條件,使用標(biāo)識符標(biāo)記各個邏輯條件取真值與取假值的情況,條件覆蓋判定條件如下表所示。3.2.3 條件覆蓋條件1條件標(biāo)記條件2條件標(biāo)記x>0S1x>2S3x<=0-S1x<=2-S3y<0S2z>0S4y>=0-S2z<=0-S4以程序執(zhí)行的流程圖為例,使用條件覆蓋則可以設(shè)計3條測試用例,條件覆蓋測試用例如下表所示。3.2.3 條件覆蓋測試用例xyz執(zhí)行語句路徑test1315a→b→etest2-31-1a→b→dtest33-11a→c→e

先定一個小目標(biāo)!掌握判定-條件覆蓋法的使用,能夠應(yīng)用判定-條件覆蓋法設(shè)計測試用例3.2.4 判定-條件覆蓋判定-條件覆蓋(Condition/DecisionCoverage)要求設(shè)計較多的測試用例,使得判定語句中所有條件的可能取值至少出現(xiàn)一次,同時,所有判定語句的可能結(jié)果也至少出現(xiàn)一次。例如,對于判定語句if(a>1andc<1),該判定語句有a>1、c<1這2個條件,則在設(shè)計測試用例時,要保證a>1和c<1這2個條件取真值、假值至少一次,同時,判定語句if(a>1andc<1)取真值、假值也至少出現(xiàn)一次。判定-條件覆蓋彌補(bǔ)了判定覆蓋和條件覆蓋的不足之處。3.2.4 判定-條件覆蓋根據(jù)判定-條件覆蓋原則,以3.2.2小節(jié)中的程序執(zhí)行的流程圖對應(yīng)的程序為例設(shè)計判定-條件覆蓋測試用例。判定-條件覆蓋測試用例如下表所示。3.2.4 判定-條件覆蓋測試用例xyz條件標(biāo)記條件1條件2執(zhí)行路徑test1315S1、-S2、S3、S401a→b→etest2-31-1-S1、-S2、-S3、-S400a→b→dtest33-11S1、S2、S3、S411a→c→etest42-11S1、S2、-S3、-S410a→c→d

先定一個小目標(biāo)!掌握條件組合覆蓋法的使用,能夠應(yīng)用條件組合覆蓋法設(shè)計測試用例3.2.5 條件組合覆蓋條件組合覆蓋(MultipleConditionCoverage)是指設(shè)計足夠多的測試用例,使判定語句中每個條件的所有可能情況至少出現(xiàn)一次,并且每個判定語句本身的判定結(jié)果也至少出現(xiàn)一次。它與判定-條件覆蓋的區(qū)別是,它不是簡單地要求每個條件都出現(xiàn)真與假2種結(jié)果,而是要求讓這些結(jié)果的所有可能組合都至少出現(xiàn)一次。3.2.5 條件組合覆蓋以3.2.2小節(jié)中的程序執(zhí)行的流程圖及其程序為例,該程序中共有4個條件:x>0、y<0、x>2、z>0。下面繼續(xù)使用S1、S2、S3、S4標(biāo)記這4個條件成立,用-S1、-S2、-S3、-S4標(biāo)記這4個條件不成立。S1與S2屬于一個判定語句,兩兩組合有4種情況,如下所示。S1,S2S1,-S2-S1,S2-S1,-S2。同樣,S3與S4屬于一個判定語句,兩兩組合也有4種情況。2個判定語句的組合情況各有4種。在執(zhí)行程序時,只要能分別覆蓋2個判定語句的組合情況即可,因此,針對3.2.2小節(jié)中的程序執(zhí)行的流程圖的程序,條件組合覆蓋至少要設(shè)計4個測試用例。3.2.5 條件組合覆蓋條件組合覆蓋的4種情況如下表所示。3.2.5 條件組合覆蓋序號組合含義1S1、S2、S3、S4x>0成立,y<0成立,x>2成立,z>0成立2S1、-S2、S3、-S4x>0成立,y<0不成立,x>2成立,z>0不成立3-S1、S2、-S3、S4x>0不成立,y<0成立,x>2不成立,z>0成立4-S1、-S2、-S3、-S4x>0不成立,y<0不成立,x>2不成立,z>0不成立條件組合覆蓋測試用例3.2.5 條件組合覆蓋序號組合測試用例條件1條件2覆蓋路徑xyztest1S1、S2、S3、S43-1511a→c→etest2-S1、S2、-S3、S4-5-2101a→b→etest3S1、-S2、S3、-S461-201a→b→etest4-S1、-S2、-S3、-S4-31-100a→b→d

先定一個小目標(biāo)!掌握三角形的邏輯覆蓋,能夠設(shè)計三角形程序判定覆蓋測試用例3.2.6 實例:三角形的邏輯覆蓋在第2章的黑盒測試中使用了決策表法判斷三角形的類型,根據(jù)三角形三邊關(guān)系可知可能出現(xiàn)4種情況:不構(gòu)成三角形、一般三角形、等腰三角形、等邊三角形。據(jù)此實現(xiàn)一個判斷三角形的程序,偽代碼如下。3.2.6 實例:三角形的邏輯覆蓋intABC

//三角形的三個邊 if((A+B>C)&&(A+C>B)&&(B+C)>A) //是否滿足三角形構(gòu)成條件

if((A==B)&&(B==C)) //等邊三角形

等邊三角形

elseif((A==B)||(B==C)||(A==C)) //等腰三角形

等腰三角形

else

//一般三角形

一般三角形else

不是三角形end根據(jù)上述代碼可以畫出流程圖,三角形程序流程圖如下圖所示。3.2.6 實例:三角形的邏輯覆蓋繪制程序的控制流圖,如下圖表示。3.2.6 實例:三角形的邏輯覆蓋3.2.6 實例:三角形的邏輯覆蓋編號測試用例路徑預(yù)期結(jié)果ABCtest16661→2→3→4→11等邊三角形test26681→2→5→6→11等腰三角形test33451→2→7→8→11一般三角形test43361→9→10→11不構(gòu)成三角形三角形程序判定覆蓋測試用例程序插樁法3.3

先定一個小目標(biāo)!了解目標(biāo)代碼插樁法的原理,能夠描述目標(biāo)代碼插樁法的3種執(zhí)行模式3.3.1 目標(biāo)代碼插樁目標(biāo)代碼插樁是指向目標(biāo)代碼(即二進(jìn)制代碼)插入測試代碼,以獲取程序運(yùn)行信息的測試方法,也稱為動態(tài)程序分析方法。在進(jìn)行目標(biāo)代碼插樁之前,測試人員要對目標(biāo)代碼的邏輯結(jié)構(gòu)進(jìn)行分析,從而確認(rèn)需要插樁的位置。目標(biāo)代碼插樁對程序運(yùn)行時的內(nèi)存監(jiān)控、指令跟蹤、錯誤檢測等有著重要意義。相比于邏輯覆蓋法,目標(biāo)代碼插樁在測試過程中不需要重新編譯代碼或鏈接程序,并且目標(biāo)代碼的格式與具體的編程語言無關(guān),主要與操作系統(tǒng)相關(guān),因此目標(biāo)代碼插樁被廣泛使用。3.3.1 目標(biāo)代碼插樁下面對目標(biāo)代碼插樁的原理、方式、執(zhí)行模式和工具進(jìn)行介紹,具體內(nèi)容如下。3.3.1 目標(biāo)代碼插樁目標(biāo)代碼插樁的原理目標(biāo)代碼插樁法的原理是在程序運(yùn)行平臺和底層操作系統(tǒng)之間建立中間層,通過中間層檢查執(zhí)行程序、修改指令,開發(fā)人員、軟件分析工程師等對運(yùn)行的程序進(jìn)行觀察,判斷程序是否被惡意攻擊或者出現(xiàn)異常行為,從而提高程序的整體質(zhì)量。3.3.1 目標(biāo)代碼插樁2.

目標(biāo)代碼插樁的兩種方式由于目標(biāo)代碼是可執(zhí)行的二進(jìn)制代碼,所以目標(biāo)代碼的插樁可分為兩種方式。第1種方式對未運(yùn)行的目標(biāo)代碼插樁,首先從頭到尾插入測試代碼,然后執(zhí)行程序。這種方式適用于需要實現(xiàn)完整系統(tǒng)或仿真(模擬真實系統(tǒng))進(jìn)行的代碼覆蓋測試。向正在運(yùn)行的程序插入測試代碼,用來檢測程序在特定時間的運(yùn)行狀態(tài)信息。第2種方式3.3.1 目標(biāo)代碼插樁3.

目標(biāo)代碼插樁的執(zhí)行模式目標(biāo)代碼插樁具有以下3種執(zhí)行模式。即時模式將修改部分的二進(jìn)制代碼以副本的形式在新的內(nèi)存區(qū)域中,在測試時僅執(zhí)行修改部分的目標(biāo)代碼。解釋模式測試人員插入的測試代碼作為目標(biāo)代碼指令的解釋語言。每當(dāng)執(zhí)行一條目標(biāo)代碼指令時,程序就會在測試代碼中查找并執(zhí)行相應(yīng)的替代指令。探測模式探測模式使用新指令覆蓋舊指令進(jìn)行測試,這種模式在某些體系結(jié)構(gòu)(如x86體系結(jié)構(gòu))中比較適用。3種執(zhí)行模式Just-In-TimeModeInterpretationModeProbeMode3.3.1 目標(biāo)代碼插樁4.

目標(biāo)代碼插樁工具常見的目標(biāo)代碼插樁工具主要有以下2種。(1)Pin-ADynamicBinaryInstrumentationTool(Pin)Pin是由Intel公司開發(fā)的免費(fèi)框架,它可以用于二進(jìn)制代碼檢測與源代碼檢測。Pin支持IA-32、x86-64、MIC(ManyIntegratedCore,眾核架構(gòu))體系,可以運(yùn)行在Linux平臺、Windows平臺和Android平臺上。Pin具有基本塊分析器、緩存模擬器、指令跟蹤生成器等模塊,使用該工具可以創(chuàng)建程序分析工具、監(jiān)視程序運(yùn)行的狀態(tài)信息等。Pin非常穩(wěn)定可靠,常用于大型程序測試,(如Office辦公軟件、虛擬現(xiàn)實引擎等)測試。(2)DynamoRIODynamoRIO是一個受許可的動態(tài)二進(jìn)制代碼檢測框架,作為應(yīng)用程序和操作系統(tǒng)的中間平臺,它可以在程序執(zhí)行時實現(xiàn)程序任何部分的代碼轉(zhuǎn)換。DynamoRIO支持IA-32、x86-64、AArch64體系,可以運(yùn)行在Linux平臺、Windows平臺和Android平臺上。DynamoRIO包含內(nèi)存調(diào)試工具、內(nèi)存跟蹤工具、指令跟蹤工具等。

先定一個小目標(biāo)!掌握源代碼插樁法的使用,能夠應(yīng)用探針代碼測試程序3.3.2 源代碼插樁源代碼插樁是指對源文件進(jìn)行完整的詞法、語法分析后,確認(rèn)插樁的位置,植入探針代碼(測試代碼)。相比目標(biāo)代碼插樁,源代碼插樁具有針對性和更高的精確性,源代碼插樁模型如下圖所示。3.3.2 源代碼插樁下面通過一個小案例來講解源代碼插樁,該案例是一個除法運(yùn)算,具體代碼如下所示。程序運(yùn)行后,提示輸入被除數(shù)和除數(shù),在輸入除數(shù)后,程序宏函數(shù)ASSERT(y)判斷除數(shù)是否為0,若除數(shù)為0則輸出錯誤信息,程序運(yùn)行結(jié)束;若除數(shù)不為0,則進(jìn)行除法運(yùn)算并輸出計算結(jié)果。3.3.2 源代碼插樁[單擊查看源碼]根據(jù)除法運(yùn)算程序設(shè)計測試用例,除法運(yùn)算測試用例如下表所示。3.3.2 源代碼插樁測試用例測試數(shù)據(jù)預(yù)期結(jié)果test11,11test21,-1-1test3-1,-11test4-1,1-1test51,0錯誤test6-1,0錯誤test70,0錯誤test80,10test90,-10程序的目標(biāo)代碼插樁與源代碼插樁測試方法有效提高了代碼測試覆蓋率,但是使用插樁測試方法會出現(xiàn)代碼膨脹、執(zhí)行效率低下、HeisenBugs等問題。在一般情況下,插樁后的代碼膨脹率在20%~40%,甚至能達(dá)到100%,導(dǎo)致插樁測試失敗。3.3.2 源代碼插樁HeisenBugs即海森堡Bug,它是一種軟件缺陷,這種缺陷的重現(xiàn)率很低,當(dāng)開發(fā)人員試圖研究時,它會消失或改變。實際軟件測試中,這種缺陷也比較常見,例如,測試人員測試到一個缺陷并提交給開發(fā)人員后,開發(fā)人員按照測試人員提交的缺陷報告中的步驟執(zhí)行時,卻無法重現(xiàn)缺陷,其原因是缺陷已經(jīng)消失或者出現(xiàn)了其他缺陷。小提示:HeisenBugs黑盒測試和白盒測試異同多學(xué)一招3.3.2 源代碼插樁VS黑盒測試黑盒測試可以發(fā)現(xiàn)以下3種類型的缺陷。外部邏輯功能缺陷。兼容性錯誤。性能問題。白盒測試白盒測試常用于以下2種情況。源程序中含有多個分支,在設(shè)計測試用例時要盡可能覆蓋所有分支,提高測試覆蓋率。檢查內(nèi)存泄漏。1.

黑盒測試和白盒測試比較黑盒測試過程中不用考慮程序內(nèi)部的邏輯結(jié)構(gòu),僅僅需要驗證程序外部功能是否符合用戶實際需求。3.3.2 源代碼插樁2.

測試階段黑盒測試與白盒測試在不同的測試階段的使用情況也不同,兩者在不同階段的使用情況如下表所示。測試名稱測試對象測試方法單元測試模塊中的功能白盒測試集成測試模塊間的接口黑盒測試、白盒測試系統(tǒng)測試整個系統(tǒng)(軟件、硬件)黑盒測試驗收測試整個系統(tǒng)(軟件、硬件、用戶體驗)黑盒測試多學(xué)一招

先定一個小目標(biāo)!掌握求3個數(shù)的中間值的案例,能夠使用源代碼插樁求3個數(shù)的中間值3.3.3 實例:求3個數(shù)的中間值下面通過一個案例對源代碼插樁進(jìn)行講解,以加深讀者對源代碼插樁的理解。該案例要求用鍵盤輸入3個數(shù)并求中間值,源程序代碼如下。測試人員通過寫入的文件可以查看源程序執(zhí)行的過程,插樁后的代碼如下。3.3.3 實例:求3個數(shù)的中間值[單擊查看源碼][單擊查看源碼]源代碼插樁完成之后,根據(jù)3個數(shù)的不同組合方式設(shè)計測試用例,具體測試用例如下表所示。3.3.3 實例:求3個數(shù)的中間值測試用例測試數(shù)據(jù)預(yù)期結(jié)果test11,1,21test21,2,32test33,2,12test43,3,33test56,4,55test66,8,46test78,4,98程序運(yùn)行后得到的輸出結(jié)果與程序執(zhí)行路徑如下表所示。3.3.3 實例:求3個數(shù)的中間值測試用例輸出結(jié)果源程序執(zhí)行路徑test119→10→9→10→9→10→9→11→12→14→16→17→26→27test229→10→9→10→9→10→9→11→12→14→15→26→27test329→10→9→10→9→10→9→11→12→21→22→26→27test439→10→9→10→9→10→9→11→12→21→23→26→27test559→10→9→10→9→10→9→11→12→14→16→26→27test669→10→9→10→9→10→9→11→12→21→23→24→26→27test749→10→9→10→9→10→9→11→12→14→16→17→26→27分析輸出結(jié)果與程序執(zhí)行路徑表中測試用例輸出結(jié)果會發(fā)現(xiàn),輸出結(jié)果與測試用例表中的測試用例test7的期望結(jié)果不相符。對test7數(shù)據(jù)及執(zhí)行過程進(jìn)行分析,test7的數(shù)據(jù)為8、4、9,其執(zhí)行路徑為9→10→9→10→9→10→9→11→12→14→16→17→26→27。test7測試用例執(zhí)行路徑如下圖所示。3.3.3 實例:求3個數(shù)的中間值除了邏輯錯誤,源程序還會將程序執(zhí)行的路徑寫入test.txt文件中,此時會覆蓋test.txt文件中原有的數(shù)據(jù),這樣在查看test.txt文件時只能看到最近一次的執(zhí)行過程,這違背了測試可溯源的原則。在修改代碼邏輯錯誤時,同時修改test.txt的寫入方式為追加寫入,修改后的代碼如下。3.3.3 實例:求3個數(shù)的中間值[單擊查看源碼]本章小結(jié)本章講解了白盒測試方法中的基本路徑法、邏輯覆蓋法和程序插樁法。對于基本路徑法,需要掌握繪制控制流圖和計算圈復(fù)雜度的方法。邏輯覆蓋法包含語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋,讀者需要掌握這些方法以及它們之間的差別,在實際測試中選擇合適的方法進(jìn)行測試。程序插樁法包含目標(biāo)代碼插樁和源代碼插樁,使用源代碼插樁并設(shè)置合理的探針有助于在程序開發(fā)中查找邏輯錯誤。通過本章的學(xué)習(xí),讀者應(yīng)能夠掌握白盒測試的方法。本章小結(jié)第4章

接口測試《軟件測試(第2版)》學(xué)習(xí)目標(biāo)/Target

了解接口測試,能夠描述接口測試的原理與實現(xiàn)方式

熟悉HTTP,能夠歸納HTTP請求和響應(yīng)的組成部分

掌握Postman的安裝方式,能夠獨(dú)立安裝Postman工具

掌握使用Postman發(fā)送請求的方式,能夠使用Postman發(fā)送一個簡單的請求學(xué)習(xí)目標(biāo)/Target

掌握Postman的基本使用方法,能夠靈活運(yùn)用Postman的斷言、關(guān)聯(lián)和參數(shù)化完成有特定需求的接口測試

掌握接口測試報告的生成方式,能夠使用newman命令生成HTML格式的接

口測試報告

掌握iHRM人力資源管理系統(tǒng)中登錄模塊的接口測試用例設(shè)計與執(zhí)行方式,

能夠設(shè)計并執(zhí)行登錄模塊的接口測試用例

掌握iHRM人力資源管理系統(tǒng)中員工管理模塊的接口測試用例設(shè)計與執(zhí)行方

式,能夠設(shè)計并執(zhí)行員工管理模塊的接口測試用例章節(jié)概述/Summary如今,隨著軟件系統(tǒng)的復(fù)雜度不斷提升,對于任意一款軟件,如果測試人員能夠越早對軟件進(jìn)行測試,就能夠越早發(fā)現(xiàn)軟件中明顯的或隱藏的缺陷,同時也能夠降低缺陷的修復(fù)成本和缺陷產(chǎn)生的風(fēng)險。因此,在項目初期,前端和后端都完成接口開發(fā)后,就需要測試人員參與接口的測試,本章將詳細(xì)講解接口測試。目錄/Contents010203接口測試簡介HTTPPostman入門0405Postman的基本使用實例:iHRM人力資源管理系統(tǒng)接口測試接口測試簡介4.1

先定一個小目標(biāo)!了解接口測試的簡介,能夠描述接口測試的原理與實現(xiàn)方式4.1

接口測試簡介接口是指系統(tǒng)或組件之間進(jìn)行信息交互的通道。在軟件開發(fā)的過程中,隨著項目需求越來越多,軟件的功能會越來越復(fù)雜,接口也會不斷增多。為了確保軟件系統(tǒng)中的接口能夠正常進(jìn)行信息交互和傳輸數(shù)據(jù),就需要開展接口測試。接口測試是對系統(tǒng)組件間接口進(jìn)行的測試,其原理是模擬客戶端向服務(wù)器發(fā)送請求,服務(wù)器接收到請求后進(jìn)行相應(yīng)的業(yè)務(wù)處理,并向客戶端返回響應(yīng)數(shù)據(jù)。測試人員在進(jìn)行接口測試時,需要關(guān)注軟件系統(tǒng)中被測接口之間數(shù)據(jù)的傳遞、交換和控制管理過程,以及接口與接口之間是否存在邏輯依賴關(guān)系,并檢測服務(wù)器向客戶端返回的響應(yīng)數(shù)據(jù)是否符合預(yù)期結(jié)果。4.1

接口測試簡介實現(xiàn)接口測試的方式有兩種,分別是通過工具實現(xiàn)和通過代碼實現(xiàn),關(guān)于這兩種方式的介紹如下。4.1

接口測試簡介常用的接口測試工具有Postman、JMeter等。Postman是一款簡單易操作的接口測試工具,有很多強(qiáng)大的功能,例如支持批量運(yùn)行、保存歷史記錄。JMeter是Apache基于Java開發(fā)的一款免費(fèi)開源工具,它支持多個協(xié)議,具有豐富的第三方插件,不僅可以進(jìn)行性能測試,而且可以進(jìn)行接口測試。通常情況下會使用Postman工具來實現(xiàn)接口測試,使用該工具實現(xiàn)接口測試可以提高測試效率,并且對于編程能力弱的測試人員,Postman更容易學(xué)習(xí)、掌握。1.通過工具實現(xiàn)接口測試4.1

接口測試簡介測試人員使用Java、Python等語言編寫代碼也可以實現(xiàn)接口測試,在使用Java語言編寫接口測試的代碼時,通常需要結(jié)合HttpClient技術(shù);在使用Python語言編寫接口測試的代碼時,通常需要結(jié)合Request框架。雖然通過代碼實現(xiàn)接口測試的方式能夠讓測試人員與開發(fā)人員使用相同的技術(shù)棧,更好地對接測試流程,但是這種方式要求測試人員具備一定的編程能力,對于編程能力弱的測試人員而言難度較大。2.通過代碼實現(xiàn)接口測試在工作中,測試人員需要按照公司制定的流程開展接口測試。通常,接口測試的流程包括分析接口測試需求、解析與評審接口文檔、編寫接口測試計劃、設(shè)計與評審接口測試用例、搭建接口測試環(huán)境、編寫接口測試腳本、執(zhí)行接口測試用例、管理與跟蹤接口缺陷、整理測試報告。在時間充裕并且公司條件允許的情況下,有時還會進(jìn)行接口自動化持續(xù)集成測試。4.1

接口測試簡介需要特別說明的是,接口文檔也稱為API文檔,主要由開發(fā)人員編寫,用來描述接口信息。在沒有接口文檔的情況下,測試人員也可以通過抓包工具或者打開瀏覽器的開發(fā)者工具獲取接口的相關(guān)信息。測試人員需要根據(jù)接口文檔的描述設(shè)計接口測試用例。通常,接口測試用例包括用例ID、用例名稱、接口名稱、前置條件、請求地址(URL)、請求方法、請求頭、請求參數(shù)、預(yù)期結(jié)果和實際結(jié)果等。4.1

接口測試簡介HTTP4.2

先定一個小目標(biāo)!熟悉統(tǒng)一資源定位符,能夠描述什么是統(tǒng)一資源定位符4.2.1 統(tǒng)一資源定位符統(tǒng)一資源定位符(UniformResourceLocator,URL)也稱網(wǎng)頁地址,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)的資源地址,它的作用是讓客戶端查詢不同的信息資源時有統(tǒng)一訪問的方法。例如,用戶在使用瀏覽器訪問某個網(wǎng)站時,就需要輸入該網(wǎng)站的URL,當(dāng)服務(wù)器成功接收到瀏覽器發(fā)出的請求后,服務(wù)器返回的內(nèi)容會通過瀏覽器呈現(xiàn)。4.2.1 統(tǒng)一資源定位符URL的語法格式如下。4.2.1 統(tǒng)一資源定位符protocol://hostname:port/path?parameters?query&fragment關(guān)于URL的語法格式組成部分說明具體如下。protocol:表示因特網(wǎng)服務(wù)的數(shù)據(jù)傳輸協(xié)議,常見的協(xié)議有HTTP、HTTPS、FTP等。hostname:表示主機(jī)名,是存放資源的服務(wù)器主機(jī)名或IP地址,有時候在主機(jī)名前面也可以設(shè)置連接到服務(wù)器所需的用戶名和密碼,例如username:password@hostname。port:表示端口號,通??梢允÷裕恳环N傳輸協(xié)議都有默認(rèn)的端口號,例如,HTTP的默認(rèn)端口是80,HTTPS的默認(rèn)端口是443,F(xiàn)TP的默認(rèn)端口是21。path:表示資源路徑,使用“/”分隔。parameters:表示參數(shù),用于指定查詢參數(shù),使用“?”與資源路徑分隔,多個參數(shù)之間使用“&”分隔。query:表示查詢,用于給動態(tài)網(wǎng)頁傳遞參數(shù),參數(shù)名和參數(shù)值之間使用“=”分隔。fragment:表示信息片斷,用于指定資源中的片斷。為了讓讀者更加熟悉URL,下面通過一個例子說明URL的組成。例如,:80/index.html?id=001&page=1,該URL的協(xié)議為HTTP,主機(jī)名或IP地址為,端口號為80,資源路徑為/index.html,查詢參數(shù)id=001&page=1。4.2.1 統(tǒng)一資源定位符

先定一個小目標(biāo)!掌握HTTP請求的格式,能夠歸納HTTP請求的3個組成部分4.2.2 HTTP請求HTTP請求是指客戶端向服務(wù)器發(fā)送的請求消息。HTTP請求主要由請求行、請求頭和請求體組成,HTTP請求的格式如下圖所示。4.2.2 HTTP請求1.

請求行請求行用于指定客戶端向服務(wù)器發(fā)送的請求方法、請求地址(URL)和協(xié)議版本,位于HTTP請求中的第1行。在接口測試中,常用的請求方法和說明如下表所示。4.2.2 HTTP請求請求方法說明GET用于請求服務(wù)器獲取指定的資源POST用于請求服務(wù)器提交指定的資源PUT用于請求服務(wù)器更新指定的資源DELETE用于請求服務(wù)器刪除指定的資源2.

請求頭請求頭是客戶端向服務(wù)器發(fā)送的附加信息,用于通知服務(wù)器關(guān)于客戶端請求的信息。請求頭由鍵值對組成,即key:value,常見的請求頭字段和說明如下表所示。4.2.2 HTTP請求請求頭字段說明Host表示接受請求的服務(wù)器地址User-Agent表示產(chǎn)生請求的瀏覽器類型Accept表示客戶端可以識別的內(nèi)容類型列表Content-Type表示請求體數(shù)據(jù)的類型Accept-Encoding表示服務(wù)器可以發(fā)送的數(shù)據(jù)壓縮格式Accept-Language表示服務(wù)器可以發(fā)送的語言Connection指定與連接相關(guān)的屬性3.

請求體請求體是客戶端發(fā)送請求時攜帶的參數(shù),通常在POST或PUT請求方法中使用。請求體中的常見數(shù)據(jù)類型有text/html、text/plain、application/JSON、application/x-www-form-urlencoded、image/jpeg、multipart/form-data等。下面展示一段使用Fiddler工具抓取到的HTTP請求數(shù)據(jù),如下圖所示。4.2.2 HTTP請求

先定一個小目標(biāo)!掌握HTTP響應(yīng)的格式,能夠歸納HTTP響應(yīng)的3個組成部分4.2.3 HTTP響應(yīng)HTTP響應(yīng)是指服務(wù)器向客戶端發(fā)送的響應(yīng)消息。HTTP響應(yīng)主要由狀態(tài)行、響應(yīng)頭和響應(yīng)體組成,HTTP響應(yīng)的格式如下圖所示。4.2.3 HTTP響應(yīng)1.

狀態(tài)行狀態(tài)行用于展示HTTP響應(yīng)的協(xié)議版本、狀態(tài)碼和狀態(tài)碼描述,它位于HTTP響應(yīng)的第1行。其中,狀態(tài)碼用來標(biāo)識響應(yīng)的狀態(tài),它由3位數(shù)字組成,第1個數(shù)字定義了響應(yīng)的類型。狀態(tài)碼有5種響應(yīng)類型,具體介紹如下。1××:表示指示信息。2××:表示請求成功。3××:表示請求重定向。4××:表示客戶端錯誤。5××:表示服務(wù)器錯誤。4.2.3 HTTP響應(yīng)在接口測試中,常見的狀態(tài)碼和描述如下表所示。狀態(tài)碼狀態(tài)碼描述200OK,客戶端請求成功400BadRequest,客戶端請求有語法錯誤401Unauthorized,客戶端請求未經(jīng)授權(quán)403Forbidden,服務(wù)器收到請求,但是拒絕提供服務(wù)404NotFound,客戶端請求的資源不存在500InternalServerError,服務(wù)器發(fā)生錯誤503ServerUnavailable,服務(wù)器當(dāng)前不能處理客戶端的請求4.2.3 HTTP響應(yīng)2.

響應(yīng)頭響應(yīng)頭是指服務(wù)器對客戶端請求的應(yīng)答信息,它位于狀態(tài)行的下方,主要由鍵值對組成,與HTTP請求中的請求頭類似。常見的響應(yīng)頭字段和說明如下表所示。響應(yīng)頭字段狀態(tài)碼描述Server表示服務(wù)器用到的軟件信息Content-Type表示服務(wù)器實際返回給客戶端的內(nèi)容類型Connection表示服務(wù)器與客戶端的連接類型Content-Length表示服務(wù)器告知瀏覽器需要接收的數(shù)據(jù)長度Content-Language表示服務(wù)器可以識別的內(nèi)容語言列表Accept-Encoding表示服務(wù)器可以發(fā)送的數(shù)據(jù)壓縮格式4.2.3 HTTP響應(yīng)3.

響應(yīng)體響應(yīng)體是服務(wù)器發(fā)送到客戶端的實際內(nèi)容,它位于響應(yīng)頭的下方。響應(yīng)體的內(nèi)容類型由響應(yīng)頭中的Content-Type指定。下面展示一段使用Fiddler工具抓取到的HTTP響應(yīng)數(shù)據(jù),如下圖所示。4.2.3 HTTP響應(yīng)使用開發(fā)者工具進(jìn)行抓包多學(xué)一招抓包是指將網(wǎng)絡(luò)傳輸中發(fā)送或接收的數(shù)據(jù)包進(jìn)行截獲、重發(fā)、編輯、轉(zhuǎn)存等操作。通過對網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)進(jìn)行抓取,并對其進(jìn)行分析,能夠分析程序網(wǎng)絡(luò)接口、檢查網(wǎng)絡(luò)安全、分析網(wǎng)絡(luò)故障等。抓包工具是攔截并查看網(wǎng)絡(luò)數(shù)據(jù)包內(nèi)容的軟件,常用的抓包工具有Fiddler、Sniffer、IPTools等。這些抓包工具的功能各異,但是基本使用原理相同,除了可以使用抓包工具進(jìn)行抓包外,還可以使用瀏覽器自帶的開發(fā)者工具進(jìn)行抓包。4.2.3 HTTP響應(yīng)多學(xué)一招4.2.3 HTTP響應(yīng)下面以使用Chrome瀏覽器訪問TPshop開源商城首頁為例,演示如何通過開發(fā)者工具進(jìn)行抓包。首先在瀏覽器中訪問TPshop開源商城,按鍵盤上的“F12”鍵,打開開發(fā)者工具,單擊“Network”可以查看抓取的相關(guān)數(shù)據(jù)信息,如下圖所示。多學(xué)一招4.2.3 HTTP響應(yīng)單擊瀏覽器左上方的“

”刷新頁面,重新抓取請求資源信息,如下圖所示。多學(xué)一招4.2.3 HTTP響應(yīng)通常在接口測試中,需要重點關(guān)注document類型的請求資源信息,該類型的請求資源信息中包含詳細(xì)的接口請求地址、請求方法等。例如,單擊左下方名稱為“”的document類型的請求資源信息時,右下方會顯示具體的請求和響應(yīng)數(shù)據(jù),如下圖所示。Postman入門4.3

先定一個小目標(biāo)!掌握Postman的安裝方式,能夠獨(dú)立安裝Postman工具4.3.1 安裝Postman步驟1步驟2Postman的下載4.3.1 安裝Postman在瀏覽器中訪問Postman的官方網(wǎng)站,進(jìn)入Postman官方網(wǎng)站首頁,如下圖所示。步驟1步驟2Postman的下載4.3.1 安裝Postman單擊Postman官方網(wǎng)站首頁左下方的“

”圖標(biāo),進(jìn)入DownloadPostman頁面,如下圖所示。Postman安裝包單擊下載步驟2步驟1Postman的安裝4.3.1 安裝Postman雙擊Postman安裝包,進(jìn)入Createanaccountorsignin頁面,如下圖所示。步驟2步驟1Postman的安裝4.3.1 安裝Postman單擊“CreateFreeAccount”按鈕,進(jìn)入Postman-Signup頁面,如下圖所示。步驟2步驟1Postman的安裝4.3.1 安裝Postman當(dāng)注冊成功后,使用注冊的賬號登錄即可進(jìn)入Postman的主窗口,如下圖所示。Collections:表示集合,可以對項目模塊中的接口進(jìn)行分類和管理。APIs:表示應(yīng)用程序接口,用于定義集合和環(huán)境。Environments:表示環(huán)境,可以定義全局變量和環(huán)境變量。MockServers:表示模擬服務(wù)器。Monitors:表示監(jiān)聽器,能夠定期運(yùn)行集合中的請求。Flows:表示流程,能夠通過邏輯連接請求模擬實際項目中的流程。History:表示歷史記錄。4.3.1 安裝Postman下面介紹Postman主窗口左側(cè)的選項。

先定一個小目標(biāo)!掌握使用Postman發(fā)送請求的方式,能夠使用Postman發(fā)送一個簡單的請求4.3.2 發(fā)送第一個HTTP請求下面以百度網(wǎng)站為例,使用Postman發(fā)送第一個HTTP請求,具體步驟如下所示。4.3.2 發(fā)送第一個HTTP請求STEP01創(chuàng)建集合在Postman的主窗口中,首先單擊左側(cè)的Collections選項,然后單擊Collections選項右側(cè)的“”圖標(biāo)即可創(chuàng)建集合NewCollection,如下圖所示。4.3.2 發(fā)送第一個HTTP請求STEP02添加HTTP請求在NewCollection所在條目的任意地方右擊或者單擊右側(cè)的“

”圖標(biāo),會彈出一個下拉列表,如下圖所示。4.3.2 發(fā)送第一個HTTP請求單擊拉列表中的“Addrequest”選項即可添加一個HTTP請求,如下圖所示。4.3.2 發(fā)送第一個HTTP請求關(guān)于請求方法和請求地址下方的標(biāo)簽的具體介紹如下。Params:表示參數(shù),當(dāng)單擊該標(biāo)簽時,可以在下方設(shè)置請求地址參數(shù)。Authorization:表示授權(quán),當(dāng)單擊該標(biāo)簽時,可以了解授權(quán)信息,通常在發(fā)送請求時,在其下方會自動生成授權(quán)的請求頭。Headers:表示請求頭,當(dāng)單擊該標(biāo)簽時,可以在下方設(shè)置請求頭。Body:表示請求體,當(dāng)單擊該標(biāo)簽時,可以在下方設(shè)置請求體參數(shù)。Pre-requestScript:表示預(yù)請求腳本,當(dāng)單擊該標(biāo)簽時,可以在下方編寫預(yù)請求腳本代碼。Tests:表示測試,當(dāng)單擊該標(biāo)簽時,可以在下方編寫測試腳本代碼,例如斷言代碼、關(guān)聯(lián)代碼等。Settings:表示設(shè)置,當(dāng)單擊該標(biāo)簽時,可以在下方進(jìn)行相關(guān)的設(shè)置操作,例如啟用SSL證書驗證、自動跟隨重定向等。4.3.2 發(fā)送第一個HTTP請求STEP03填寫百度網(wǎng)站的請求信息并發(fā)送請求百度網(wǎng)站的請求信息與響應(yīng)結(jié)果如下圖所示。Postman的基本使用4.4

先定一個小目標(biāo)!掌握Postman的斷言,能夠運(yùn)用Postman斷言完成有特定需求的接口測試4.4.1 Postman斷言4.4.1 Postman斷言斷言是程序中的一種邏輯判斷式,目的是驗證軟件開發(fā)的預(yù)期結(jié)果與實際結(jié)果是否一致。例如,程序員在編寫代碼時,通常會做出一些假設(shè),斷言的目的就是在代碼中捕捉這些假設(shè)。當(dāng)程序執(zhí)行到斷言所在的位置時,對應(yīng)的斷言如果為真,則程序?qū)⒗^續(xù)往下執(zhí)行;如果斷言為假,則程序會終止執(zhí)行,并給出錯誤信息。在進(jìn)行接口測試時,Postman提供的斷言代碼能夠代替人工自動判斷HTTP響應(yīng)的實際結(jié)果與預(yù)期結(jié)果是否一致。4.4.1 Postman斷言Postman中的斷言代碼使用JavaScript語言編寫,常用的斷言有響應(yīng)狀態(tài)碼斷言、包含指定字符串?dāng)嘌?、JSON數(shù)據(jù)斷言等。下面分別對這3個常用的斷言進(jìn)行詳細(xì)介紹。1.

響應(yīng)狀態(tài)碼斷言響應(yīng)狀態(tài)碼斷言是對HTTP響應(yīng)的狀態(tài)碼進(jìn)行斷言。在Postman中,有2種方式實現(xiàn)響應(yīng)狀態(tài)碼斷言。第1種方式在HTTP請求中單擊“Tests”標(biāo)簽,在其下方空白區(qū)域手動編寫響應(yīng)狀態(tài)碼斷言的代碼。首先在HTTP請求中單擊“Tests”標(biāo)簽,然后單擊Postman主窗口右側(cè)的“Statuscode:Codeis200”,自動生成響應(yīng)狀態(tài)碼斷言的代碼模板。第2種方式4.4.1 Postman斷言由于第2種方式比較方便,一般會選擇使用第2種方式,使用第2種方式生成的響應(yīng)狀態(tài)碼斷言的代碼模板如下圖所示。4.4.1 Postman斷言2.

包含指定字符串?dāng)嘌园付ㄗ址當(dāng)嘌允侵笇TTP響應(yīng)中的某個字符串進(jìn)行斷言??梢允謩泳帉懓付ㄗ址?dāng)嘌缘拇a或自動生成包含指定字符串?dāng)嘌缘拇a模板,如下圖所示。4.4.1 Postman斷言3.

JSON數(shù)據(jù)斷言JSON數(shù)據(jù)斷言是對HTTP響應(yīng)中的JSON數(shù)據(jù)進(jìn)行斷言,可以手動編寫JSON數(shù)據(jù)斷言的代碼或自動生成JSON數(shù)據(jù)斷言的代碼模板,如下圖所示。下面通過一個案例演示斷言的使用,具體操作步驟如下。4.4.1 Postman斷言STEP01設(shè)置百度網(wǎng)址的請求信息在Postman中創(chuàng)建一個集合和請求,將請求方法設(shè)置為GET,請求地址設(shè)置為。百度網(wǎng)站的請求信息如下圖所示。4.4.1 Postman斷言STEP02修改斷言代碼生成包含指定字符串的斷言代碼模板,并將顯示斷言結(jié)果的提示文字修改為“百度頁面包含‘百度搜索’”,將斷言的字符串修改為“百度搜索”,如下圖所示。4.4.1 Postman斷言STEP03顯示百度網(wǎng)站的響應(yīng)結(jié)果在Postman主窗口下方顯示百度網(wǎng)站的響應(yīng)結(jié)果,如下圖所示。4.4.1 Postman斷言STEP03顯示百度網(wǎng)站的響應(yīng)結(jié)果查看百度網(wǎng)站的斷言結(jié)果,如下圖所示。斷言失敗界面如下圖所示。

先定一個小目標(biāo)!掌握Postman的關(guān)聯(lián),能夠運(yùn)用Postman關(guān)聯(lián)完成有特定需求的接口測試4.4.2 Postman關(guān)聯(lián)在接口測試中,關(guān)聯(lián)是指兩個或兩個以上的接口互相存在依賴關(guān)系。例如,某個接口請求地址中的參數(shù)是另一個接口的響應(yīng)結(jié)果中的數(shù)據(jù),則說明這兩個接口存在關(guān)聯(lián)關(guān)系。在使用Postman做接口測試時,實現(xiàn)接口關(guān)聯(lián)的方式是在Postman中設(shè)置環(huán)境變量或全局變量,具體實現(xiàn)步驟如下。(1)獲取第1個接口請求的響應(yīng)結(jié)果。(2)提取響應(yīng)結(jié)果中的某個字段,保存到Postman環(huán)境變量或全局變量中。(3)在第2個接口的請求地址中引用環(huán)境變量或全局變量,引用方式為{{環(huán)境變量或全局變量}}。4.4.2 Postman關(guān)聯(lián)當(dāng)在Postman中添加存在接口關(guān)聯(lián)的HTTP請求時,需要在該接口的HTTP請求的Tests下方編寫一段核心代碼,具體如下所示。4.4.2 Postman關(guān)聯(lián)//獲取返回數(shù)據(jù)值并轉(zhuǎn)為JSON格式保存到變量jsonData中varjsonData=pm.response.json()//使用全局變量做容器pm.globals.set("全局變量名",全局變量值)//使用環(huán)境變量做容器pm.environment.set("環(huán)境變量名",環(huán)境變量值)值得一提的是,在Postman中,可以設(shè)置多組環(huán)境變量,但是只能設(shè)置一組全局變量。二者的區(qū)別是,環(huán)境變量需要在特定的測試環(huán)境中才能引用其中的變量,全局變量作用于整個Postman,在Postman中的所有請求都可以直接引用全局變量中的變量,而不用指定測試環(huán)境。當(dāng)在Postman的環(huán)境變量和全局變量中設(shè)置了同一個變量時,環(huán)境變量的優(yōu)先級比全局變量的優(yōu)先級高。下面通過一個案例演示Postman接口關(guān)聯(lián)的實現(xiàn),具體操作步驟如下。4.4.2 Postman關(guān)聯(lián)STEP01添加查詢天氣接口查詢天氣接口的請求信息如下圖所示。4.4.2 Postman關(guān)聯(lián)STEP02編寫實現(xiàn)接口關(guān)聯(lián)的核心代碼顯示查詢天氣接口的響應(yīng)結(jié)果,如下圖所示。4.4.2 Postman關(guān)聯(lián)STEP02編寫實現(xiàn)接口關(guān)聯(lián)的核心代碼將準(zhǔn)備好的實現(xiàn)接口關(guān)聯(lián)的核心代碼添加到Tests下方,如下圖所示。4.4.2 Postman關(guān)聯(lián)STEP02編寫實現(xiàn)接口關(guān)聯(lián)的核心代碼待請求發(fā)送成功后,單擊Postman主窗口左側(cè)的Environments,再單擊Globals,會彈出Globals界面,如下圖所示。4.4.2 Postman關(guān)聯(lián)STEP03添加百度搜索接口百度搜索接口的請求信息如下圖所示。4.4.2 Postman關(guān)聯(lián)STEP03添加百度搜索接口百度搜索接口的響應(yīng)結(jié)果如下圖所示。

先定一個小目標(biāo)!掌握Postman的參數(shù)化,能夠運(yùn)用Postman參數(shù)化完成有特定需求的接口測試4.4.3 Postman參數(shù)化在接口測試中,參數(shù)化是將測試數(shù)據(jù)組織到數(shù)據(jù)文件中,通過測試人員對編寫的腳本不斷更新迭代,使用不同的測試數(shù)據(jù)對接口進(jìn)行測試,例如,在測試單個接口時,如果測試數(shù)據(jù)不相同,則可以使用參數(shù)化,提高腳本的復(fù)用率。使用Postman做接口測試時,實現(xiàn)參數(shù)化的關(guān)鍵步驟是將測試數(shù)據(jù)保存在數(shù)據(jù)文件中單獨(dú)維護(hù),然后引用數(shù)據(jù)文件實現(xiàn)腳本迭代調(diào)用。在Postman中常用的數(shù)據(jù)文件格式有CSV和JSON。4.4.3 Postman參數(shù)化在Postman中常用的數(shù)據(jù)文件格式有兩種,具體介紹如下。4.4.3 Postman參數(shù)化CSV是一種常用的文件格式,在CSV文件中主要以純文本形式存儲數(shù)據(jù),數(shù)據(jù)之間以逗號分隔,格式簡單,但是不能存儲元組、列表、字典和bool類型的數(shù)據(jù)。CSVJSONJSON也是一種常用的文件格式,該文件格式的數(shù)據(jù)由鍵值對組成,能夠存儲元組、列表、字典等類型的數(shù)據(jù)。為了讓讀者掌握參數(shù)化的應(yīng)用,下面通過一個案例演示Postman參數(shù)化的實現(xiàn),在本案例中,要求使用Postman發(fā)送一個請求,查詢手機(jī)號的運(yùn)營商,其中,測試的手機(jī)號需要保存在CSV格式的文件中。查詢手機(jī)號運(yùn)營商的接口信息如下。請求方法:GET。請求地址:/phonearea.php。請求體參數(shù):number,11位手機(jī)號,4.4.3 Postman參數(shù)化手機(jī)號運(yùn)營商接口的請求信息如下圖所示。4.4.3 Postman參數(shù)化手機(jī)號運(yùn)營商接口的響應(yīng)結(jié)果如下圖所示。4.4.3 Postman參數(shù)化JSON格式的響應(yīng)結(jié)果如下圖所示。4.4.3 Postman參數(shù)化如果需要測試多個手機(jī)號,按照上述接口測試的方法,則需要不斷修改請求地址中參數(shù)number的值發(fā)送請求。為了提高測試的效率,可以使用參數(shù)化的方式測試多個手機(jī)號的運(yùn)營商。首先新建一個文本文檔,并將其命名為mobile_test01,mobile_test01.txt文件中的內(nèi)容如右圖所示。將mobile_test01.txt文件的后綴名.txt修改為.csv。單擊上圖菜單欄中的“文件(F)”選項,會出現(xiàn)一個列表,單擊該列表中的“另存為”,會彈出一個另存為對話框,如右圖所示。4.4.3 Postman參數(shù)化當(dāng)準(zhǔn)備好測試數(shù)據(jù)后,下面需要在Postman中修改手機(jī)號運(yùn)營商接口的請求信息,首先修改請求地址中的參數(shù)值為{{mobile}},該參數(shù)值對應(yīng)mobile_test01.csv文件中的變量mobile,表示從數(shù)據(jù)文件中獲取測試的手機(jī)號,然后單擊Tests標(biāo)簽,在Tests下方添加斷言代碼,并單擊“Save”按鈕保存修改后的請求信息如下圖所示。4.4.3 Postman參數(shù)化在參數(shù)化的應(yīng)用集合名稱處連續(xù)快速單擊2次,進(jìn)入?yún)?shù)化的應(yīng)用界面,如下圖所示。4.4.3 Postman參數(shù)化單擊上一頁圖中的Run進(jìn)入Runner界面,如下圖所示。4.4.3 Postman參數(shù)化單擊Runner界面中的“Run參數(shù)化的應(yīng)用”按鈕發(fā)送請求。測試結(jié)果如下圖所示。4.4.3 Postman參數(shù)化如果需要將測試數(shù)據(jù)的文件保存為JSON格式,則JSON文件格式內(nèi)容如下圖所示。4.4.3 Postman參數(shù)化

先定一個小目標(biāo)!掌握接口測試報告的生成方式,能夠使用newman命令生成HTML格式的接口測試報告4.4.4 Postman生成測試報告測試報告主要用來記錄測試的過程和結(jié)果,便于測試人員分析發(fā)現(xiàn)的缺陷,并為修改軟件系統(tǒng)存在的質(zhì)量問題提供依據(jù)。在Postman中完成接口測試后,如果需要更直觀地查看和分析測試結(jié)果,則可以導(dǎo)出Postman中的環(huán)境變量和集合,并通過命令生成測試報告。使用Postman做接口測試并生成測試報告的具體步驟如下。(1)在Postman中創(chuàng)建環(huán)境變量,并設(shè)置變量名和變量值。(2)在Postman中創(chuàng)建集合,并設(shè)置請求信息,發(fā)送請求。(3)從Postman中導(dǎo)出環(huán)境變量。(4)從Postman中導(dǎo)出集合。(5)打開cmd命令窗口,輸入生成測試報告的newman命令。4.4.4 Postman生成測試報告Postman是一個輕量級的工具,該工具不具備自動生成測試報告的功能,需要借助newman插件才能夠生成測試報告。newman是一款基于Node.js開發(fā)、并能夠通過命令運(yùn)行Postman腳本的插件,該插件支持生成HTML、JSON、XML等格式的測試報告,由于HTML格式的測試報告界面美觀且方便查看,所以本書主要選擇安裝newman-report-html插件,用于生成HTML格式的測試報告。4.4.4 Postman生成測試報告關(guān)于Node.js、newman和newman-report-html的具體安裝過程如下所示。4.4.4 Postman生成測試報告步驟1步驟2步驟3Node.js的下載與安裝首先通過瀏覽器訪問Node.js的官方網(wǎng)站,該網(wǎng)站的首頁如下圖所示。4.4.4 Postman生成測試報告步驟1步驟2步驟3Node.js的下載與安裝單擊Node.js的官方網(wǎng)站首頁中的“所有下載選項”鏈接,進(jìn)入CNPMBinariesMirror頁面,如下圖所示。node-v12.22.10-x64.msi安裝包單擊下載4.4.4 Postman生成測試報告步驟1步驟2步驟3Node.js的下載與安裝雙擊安裝包進(jìn)入安裝Node.js的界面,如下圖所示。124.4.4 Postman生成測試報告步驟1步驟2步驟3Node.js的下載與安裝34564.4.4 Postman生成測試報告步驟1步驟2步驟3Node.js的下載與安裝9104.4.4 Postman生成測試報告步驟1步驟2步驟3Node.js的下載與安裝當(dāng)Node.js安裝完成之后,在cmd命令行窗口中輸入“node--version”命令并按下“Enter”鍵,檢查Node.js是否安裝成功,cmd命令行窗口如下圖所示。4.4.4 Postman生成測試報告步驟2步驟1步驟3newman的安裝在cmd命令行窗口中,輸入“npminstall-gnewman”命令,并按下“Enter”鍵即可安裝newman。cmd命令行窗口如下圖所示。4.4.4 Postman生成測試報告步驟3步驟1步驟2newman-report-html的安裝在cmd命令行窗口中輸入“npminstall-gnewman-reporter-html”命令,并按下“Enter”鍵即可安裝newman-reporter-html。cmd命令行窗口如下圖所示。生成測試報告的newman命令格式如下。關(guān)于上述命令中使用的參數(shù)介紹如下。-e:該參數(shù)是-environment的縮寫,用于指定測試環(huán)境的文件。-r:該參數(shù)是--reporters的縮寫,用于指定生成的測試報告類型。4.4.4 Postman生成測試報告newmanrun集合文件–e測試環(huán)境的文件–r測試報告類型下面通過一個案例演示測試報告的生成,具體操作步驟如下。STEP01創(chuàng)建環(huán)境變量在Postman主窗口中創(chuàng)建博學(xué)谷測試環(huán)境變量,環(huán)境變量界面如下圖所示。4.4.4 Postman生成測試報告STEP02創(chuàng)建集合訪問博學(xué)谷首頁的請求信息如下圖所示。4.4.4 Postman生成測試報告STEP02創(chuàng)建集合當(dāng)發(fā)送請求后,在Postman主窗口的下方可以查看訪問博學(xué)谷首頁的響應(yīng)結(jié)果,如下圖所示。4.4.4 Postman生成測試報告STEP03導(dǎo)出環(huán)境變量單擊環(huán)境變量界面右上角的“

”圖標(biāo),彈出一個下拉列表,如下圖所示。4.4.4 Postman生成測試報告STEP03導(dǎo)出環(huán)境變量單擊上一頁圖中的下拉列表中的Export選項,彈出一個Selectpathtosavefile對話框,如下圖所示。4.4.4 Postman生成測試報告STEP04導(dǎo)出集合在博學(xué)谷集合名稱處右擊,彈出一個下拉列表,如下圖所示。4.4.4 Postman生成測試報告STEP04導(dǎo)出集合單擊下拉列表中的Export選項,彈出一個EXPORTCOLLECTION對話框,如下圖所示。4.4.4 Postman生成測試報告STEP04導(dǎo)出集合單擊“Export”按鈕后會彈出Selectpathtosavefile對話框,如下圖所示。4.4.4 Postman生成測試報告STEP05輸入生成測試報告的newman命令進(jìn)入“D:\test_report”,打開cmd命令窗口,在該窗口中輸入以下命令。4.4.4 Postman生成測試報告newmanrun博學(xué)谷.postman_collection.json-e博學(xué)谷測試環(huán)境.postman_environment.json-rhtmlSTEP05輸入生成測試報告的newman命令雙擊測試報告就可以查看訪問博學(xué)谷首頁的詳細(xì)測試報告內(nèi)容,如下圖所示。4.4.4 Postman生成測試報告實例:iHRM人力資源管理系統(tǒng)接口測試4.5

先定一個小目標(biāo)!了解iHRM人力資源管理系統(tǒng)項目的介紹,能夠說出登錄頁面和員工管理頁面顯示的信息4.5.1 項目介紹iHRM人力資源管理系統(tǒng)是一個管理員工績效、入職、離職等信息的項目,該項目包含登錄、組織管理、員工管理、績效管理等模塊。本實例只對iHRM人力資源管理系統(tǒng)中的登錄模塊和員工管理模塊的接口進(jìn)行測試。iHRM人力資源管理系統(tǒng)的登錄界面和首頁效果如下圖所示。4.5.1 項目介紹

先定一個小目標(biāo)!熟悉項目接口文檔,能夠歸納登錄模塊和員工管理模塊的接口信息4.5.2 項目接口文檔為了對iHRM人力資源管理系統(tǒng)中的登錄模塊和員工管理模塊進(jìn)行接口測試,接下來介紹這兩個模塊的接口信息。1.

登錄模塊—登錄接口在登錄模塊中,登錄接口的信息具體如下。(1)請求信息請求信息中的請求方法、請求地址和請求頭,分別如下所示。請求方法:POST。請求地址:http:///api/sys/login。請求頭:Content-Type:application/json。4.5.2 項目接口文檔(2)請求體參數(shù)登錄接口的請求體參數(shù)如下表所示。4.5.2 項目接口文檔參數(shù)名稱參數(shù)類型是否必須備注mobilestring是手機(jī)號(使用手機(jī)號作為登錄的用戶名)passwordstring是密碼(6位)(3)返回數(shù)據(jù)當(dāng)?shù)卿浗涌谡埱蟪晒蚴r,返回數(shù)據(jù)中的操作狀態(tài)碼及其描述分別如下所示。10000:操作成功!。20001:用戶名或密碼錯誤。99999:抱歉,系統(tǒng)繁忙,請稍后重試!。假設(shè)登錄接口請求成功,返回的數(shù)據(jù)如下所示。4.5.2 項目接口文檔{"success":true,"code":10000,"message":"操作成功!","data":"d09899f7-f069-461c-a68c-56e139c87f42"}2.

員工管理模塊—員工管理列表接口在員工管理模塊中,員工管理列表的接口信息具體如下。(1)請求信息請求信息中的請求方法、請求地址和請求頭,分別如下所示。請求方法:GET。請求地址:http:///api/sys/user?page=2&size=1,其中page和size是請求地址中的必填參數(shù),page表示員工管理列表的當(dāng)前頁數(shù),size表示每頁展示的記錄數(shù)。請求頭:Content-Type:application/json、Authorization:token。(2)返回數(shù)據(jù)當(dāng)員工管理列表接口請求成功或失敗時,返回數(shù)據(jù)中的操作狀態(tài)碼及其描述分別如下所示。10000:操作成功!。99999:抱歉,系統(tǒng)繁忙,請稍后重試!。4.5.2 項目接口文檔假設(shè)成功查詢員工管理列表中的第2頁第1條記錄,則返回數(shù)據(jù)如下所示。4.5.2 項目接口文檔{

"success":

true,

"code":

10000,

"message":

"操作成功!",

"data":

{

"total":

17,

"rows":

[

{

"id":

"1066370498633486336",

"mobile":

"12000000693",…….

}

]

}}3.員工管理模塊—添加員工接口在員工管理模塊中,添加員工的接口信息具體如下。(1)請求信息請求信息中的請求方法、請求地址和請求頭,分別如下所示。請求方法:POST。請求地址:http:///api/sys/user。請求頭:Content-Type:application/json、Authorization:token。4.5.2 項目接口文檔添加員工接口的請求體參數(shù)如下表所示。4.5.2 項目接口文檔參數(shù)名稱參數(shù)類型是否必須備注usernamestring是姓名mobilestring是手機(jī)號workNumberstring是工號timeOfEntrystring否入職時間formOfEmploymentstring否聘用形式departmentNamestring否部門名稱departmentIdstring否部門idcorrectionTimestring否轉(zhuǎn)正時間(3)返回數(shù)據(jù)當(dāng)添加員工接口請求成功或失敗時,返回數(shù)據(jù)中的操作狀態(tài)碼及其描述分別如下所示。10000:操作成功!。99999:抱歉,系統(tǒng)繁忙,請稍后重試!。假設(shè)添加員工接口請求成功時,則返回數(shù)據(jù)如下所示。4.5.2 項目接口文檔{"success":true,"code":10000,"message":"操作成功!","data":{null}}4.

員工管理模塊—查詢員工接口在員工管理模塊中,查詢員工的接口信息具體如下。(1)請求信息請求信息中的請求方法、請求地址、請求頭,分別如下所示。請求方法:GET。請求地址:http:///api/sys/user/target,其中target是請求地址中的必填參數(shù),表示員工id。請求頭:Authorization:token。(2)返回數(shù)據(jù)當(dāng)查詢員工接口請求成功或失敗時,返回數(shù)據(jù)中的操作狀態(tài)碼及其描述分別如下所示。10000:操作成功!。99999:抱歉,系統(tǒng)繁忙,請稍后重試!。4.5.2 項目接口文檔假設(shè)查詢員工接口請求成功時,返回的數(shù)據(jù)如下所示。4.5.2 項目接口文檔{

"success":

t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論