版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單元4單元測試軟件開發(fā)工程師小張開發(fā)了自動售貨機系統(tǒng),他想測試一下代碼方法是否有問題,應(yīng)該如何來進行?單元測試可以幫助他解決此問題。引例描述單元測試主要針對代碼中的方法或函數(shù)進行測試,是代碼級最小單位的測試。通常單元測試在開發(fā)階段由開發(fā)人員完成,是程序開發(fā)過程中非常重要的一個環(huán)節(jié)。單元測試一般使用自動化測試工具完成,JUnit是一個開源的Java編程語言的單元測試標(biāo)準(zhǔn)框架。引例描述開發(fā)工程師小張要完成單元測試任務(wù),需按照下面3步的單元測試學(xué)習(xí)計劃來完成學(xué)習(xí)。1.學(xué)習(xí)單元測試的入門知識,編寫驅(qū)動模塊和樁模塊程序?qū)Ρ粶y程序模塊進行動態(tài)測試;2.學(xué)習(xí)JUnit基礎(chǔ),對Java程序進行單元測試;3.學(xué)習(xí)JUnit的核心架構(gòu),對自動售貨機程序進行單元測試。引例描述目錄動態(tài)測試Java程序單元任務(wù)一使用JUnit測試Java程序任務(wù)二使用Junit測試程序任務(wù)三任務(wù)一動態(tài)測試Java程序單元●本任務(wù)對已經(jīng)編寫的Java程序方法進行測試。開發(fā)人員通過編寫被測單元的上層模塊(驅(qū)動模塊),被測單元所調(diào)用的模塊(樁模塊),建立單元測試的完整環(huán)境,使被測單元能夠運行起來,對Java程序方法進行動態(tài)測試,從而來驗證被測單元的正確性?!裨趯嶋H操作的過程中,學(xué)生應(yīng)獨立自主完成程序單元的分離,面對復(fù)雜的軟件系統(tǒng),能整體系統(tǒng)的考慮程序的執(zhí)行路徑,認真對待每個單元模塊的細節(jié),細致、嚴(yán)謹、規(guī)范、全面、快速的設(shè)計被測程序的上層模塊和下層調(diào)用模塊。任務(wù)陳述
單元測試也成為模塊測試,是指對軟件中的最小可測試單元或基本組成單元進行檢查和驗證。對應(yīng)單元測試中單元的含義,一般要根據(jù)實際情況去判定其具體含義,對于軟件的代碼,單元就是一個函數(shù)、方法或者類,對于軟件的界面,單元就是一個窗口或菜單。通常而言,一個單元測試是用于判斷某個特定條件(或者場景)下某個特定函數(shù)的行為。如果將測試比做清洗臺機器,那么單元測試就是清洗各個零件的內(nèi)部。活動一認識單元測試一、單元測試的定義單元測試是小段代碼,用于檢驗被測代碼的一個很小的,很明確的功能是否正確。單元測試的作用是獲取應(yīng)用程序中可測軟件的最小片段,將其同其他代碼隔離開來,然后確定它的行為確實和開發(fā)者所期望的一致。顯然,只有保證了最小單位的代碼準(zhǔn)確,才能有效構(gòu)建基于它們之上的軟件模塊及系統(tǒng)。單元測試是由程序員自己來完成。程序員有確保自己編寫的軟件單元準(zhǔn)確的責(zé)任,通過對自己編寫的功能代碼進行單元測試,大大提高了代碼和軟件質(zhì)量。單元測試不但會使工作完成得更輕松,而且會令設(shè)計變得更好,甚至大大減少花在調(diào)試上的時間?;顒右徽J識單元測試二、單元測試的目的單元測試中選取的單元應(yīng)具有明確的功能定義、性能定義以及連接其他部分的接口定義等,且應(yīng)可以清晰地與其他單元區(qū)分開來。從某種意義上而言,單元的概念已經(jīng)護展為組件。單元可以認為是人為規(guī)定的最小的被測功能模塊。1.對于C語言這類面向過程的開發(fā)語言,單元常指一個函數(shù)或子過程。在特殊情況下,若存在幾個函數(shù)之間具有強耦合性,導(dǎo)致函數(shù)關(guān)系非常密切,則應(yīng)將這幾個函數(shù)共同作為一個單元來測試。2.對于C++、Java語言或C#等面向?qū)ο蟮拈_發(fā)語言,單元一般指一個類。然而,某些基礎(chǔ)類可能非常龐大,涉及大量屬性和方法,甚至需要幾個開發(fā)人員來編碼完成,則若將該類作為一個單元來測試并不合適,此時的測試將上升到集成測試的層面。3.圖形化軟件中,單元常指一個窗口或一個菜單?;顒右徽J識單元測試三、單元選取原則1.單元功能測試;2.單元接口測試;3.單元內(nèi)部數(shù)據(jù)流測試;4.單元邏輯路徑測試;5.單元可預(yù)見異?;虺鲥e條件測試?;顒右徽J識單元測試四、單元測試的任務(wù)由于單元測試所測試的不僅僅是代碼,還要測試接口、局部數(shù)據(jù)結(jié)構(gòu)、獨立路徑、邊界條件等,因此單元測試的主要依據(jù)是軟件詳細設(shè)計說明書?;顒右徽J識單元測試五、單元測試的依據(jù)單元測試過程中應(yīng)綜合應(yīng)用各種黑盒測試和白盒測試方法。使用黑盒測試方法對被測單元進行功能測試,使用白盒測試方法對被測單元進行代碼測試?;顒佣卧獪y試策略一、單元測試方法1.靜態(tài)測試技術(shù)靜態(tài)測試技術(shù)是指不運行被測程序本身。僅通過分析或檢查源程序的語法、結(jié)構(gòu)、接口等來檢查程序的正確性,對需求規(guī)格說明書、軟件設(shè)計說明書、源程序作結(jié)構(gòu)分析,流程圖分析、符號執(zhí)行來找錯。靜態(tài)測試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等。它可以由人工進行,充分發(fā)揮人的邏輯思維優(yōu)勢,也可以借助軟件工具自動進行。活動二單元測試策略一、單元測試方法1.靜態(tài)測試技術(shù)靜態(tài)測試技術(shù)是指不運行被測程序本身。僅通過分析或檢查源程序的語法、結(jié)構(gòu)、接口等來檢查程序的正確性,對需求規(guī)格說明書、軟件設(shè)計說明書、源程序作結(jié)構(gòu)分析,流程圖分析、符號執(zhí)行來找錯。靜態(tài)測試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等。它可以由人工進行,充分發(fā)揮人的邏輯思維優(yōu)勢,也可以借助軟件工具自動進行?;顒佣卧獪y試策略一、單元測試方法2.動態(tài)測試技術(shù)動態(tài)測試技術(shù)是指通過運行被測程序,檢查運行結(jié)果與預(yù)期結(jié)果的差異,并分析運行效率和健壯性等性能。這種技術(shù)山3部分組成:構(gòu)造測試實例、執(zhí)行程序、分析程序的輸出結(jié)果。且前,動態(tài)測試也是測試工作的主要方式。活動二單元測試策略一、單元測試方法靜態(tài)測試和動態(tài)測試應(yīng)配合使用。靜態(tài)測試的代碼分析結(jié)果適用于所有可能的運行情況,而動態(tài)測試由于總是針對特殊取值的測試,因此僅能測試到程序的特定屬性,即保證被測組件在其測試平臺上對于特定輸入是有效的?;顒佣卧獪y試策略一、單元測試方法單元本身并不是一個獨立的程序,往往需要基于被測單元的接口開發(fā)相應(yīng)的驅(qū)動模塊和樁模塊。因此,單元測試環(huán)境包括驅(qū)動模塊和樁模塊?;顒佣卧獪y試策略二、單元測試環(huán)境1.驅(qū)動模塊和樁模塊定義(1)驅(qū)動模塊是模擬被測單元的上級模塊,用于接收測試數(shù)據(jù)、啟動被測模塊和輸出結(jié)果。(2)樁模塊是模擬被測單元所調(diào)用的模塊。有時,需要使用子模塊的接口,才能做少量數(shù)據(jù)操作,并驗證和打融入最的信息,然后返回。樁模塊不包含原模塊的所有細節(jié)。活動二單元測試策略二、單元測試環(huán)境2.驅(qū)動模塊和樁模塊的使用條件設(shè)計驅(qū)動模塊和樁模塊時,一方面應(yīng)考思到測試結(jié)論的有效性決定于單元測試環(huán)境下模擬目標(biāo)環(huán)境(程序)執(zhí)行的精確度,即設(shè)計驅(qū)動模塊和樁模塊時應(yīng)能慮到測試用例執(zhí)行應(yīng)滿足的所有環(huán)境因素。另方面,也應(yīng)充分考慮到測試過程的選代性,使得驅(qū)動模塊和樁模塊在回歸測試中能夠不經(jīng)修改直接使用,提高重用性,進而提高回歸測試效率?;顒佣卧獪y試策略二、單元測試環(huán)境3.構(gòu)建單元測試環(huán)境建立單元測試的環(huán)境,需完成以下工作:構(gòu)造最小運行調(diào)度系統(tǒng),即構(gòu)造被測單元的驅(qū)動模塊;模擬被測單元的接口,即構(gòu)造被測單元調(diào)用的樁模塊;模擬生成測試數(shù)據(jù)及狀態(tài),即測試驅(qū)動程序,為被測單元運行準(zhǔn)備動態(tài)環(huán)境?;顒佣卧獪y試策略二、單元測試環(huán)境4.驅(qū)動模塊的設(shè)計在多數(shù)的實際應(yīng)用中,驅(qū)動模塊的設(shè)計可根據(jù)其定義得到,步驟如下。(1)接收測試的輸入數(shù)據(jù)。實現(xiàn)方式是將輸入數(shù)據(jù)寫在測試程序中,更好的策略是通過外部調(diào)用的方式從數(shù)據(jù)文件中依次讀入數(shù)據(jù)。(2)將數(shù)據(jù)傳遞給被測單元,從而啟動被測單元實現(xiàn)方式是調(diào)用被測單元,同時利用參數(shù)傳遞將輸入數(shù)據(jù)傳給被測單元。(3)打印和輸出相關(guān)結(jié)果,判斷測試是通過還是失敗。利用結(jié)果的比較來判斷,在允許的誤差條件下,一致的結(jié)果表明測試通過,否則視為測試失敗。執(zhí)行結(jié)果可以直接輸出到屏幕。活動二單元測試策略二、單元測試環(huán)境5.樁模塊的設(shè)計(1)完成原單元的基本功能,即針對特定的輸入可以輸出正確的結(jié)果,注意:這里所謂的完成功能其實并非真正在模塊內(nèi)部去執(zhí)行某些復(fù)雜的邏輯判斷或計算過程,而是簡單的批量打印而已,只是將固定的某些執(zhí)行結(jié)果簡單輸出。(2)能夠被正確調(diào)用,即符合正確的輸入條件,包括個數(shù)、參數(shù)類型順序等與被模擬單元完全一致。(3)有返回值。若有返回值,則應(yīng)針對特定輸入返回與被模擬單元完全一致的結(jié)果。(4)不包含原單元的所有細節(jié)。原單元的輸入情況可能是無限多的,所謂模擬意味將僅挑選式中典型的輸入(如邊界),給出己知的輸出結(jié)果。活動二單元測試策略二、單元測試環(huán)境6.測試驅(qū)動程序的設(shè)計測試驅(qū)動程序是通過測試用例來驅(qū)動被測單元,以便于觀察測試用例執(zhí)行結(jié)果,查找缺陷的代碼段。簡單地說,測試驅(qū)動是能夠執(zhí)行測試用例或測試套包的軟件程序或測試工具。測試驅(qū)動程序的設(shè)計可從以下方面來考慮:(1)利用已有的測試用例,接收測試數(shù)據(jù)。(2)將測試數(shù)據(jù)傳遞給被測單元。(3)輸出測試用例的執(zhí)行結(jié)果。活動二單元測試策略二、單元測試環(huán)境1.單元代碼測試的方式實現(xiàn)對單元代碼測試的方式主要包括:(1)在開發(fā)源代碼中直接加入斷點(和調(diào)試比較相似);(2)通過調(diào)用被測函數(shù)輸入一些測試數(shù)據(jù),觀察實際執(zhí)行情況與預(yù)期情況之間的差異;(3)針對被測對象編寫專門的測試代碼,并專門對這些代碼進行組織和管理。活動二單元測試策略三、單元測試的設(shè)計2.單元測試的原則編寫單元測試代碼是,應(yīng)遵循以下基本原則。(1)不要將測試用例的執(zhí)行結(jié)果輸出到屏幕;(2)將測試代碼與開發(fā)代碼分開;(3)所有測試方法以test開頭,測試代碼分組放置;(4)在一個獨立的測試中避免多重聲明;(5)測試正確的事情?;顒佣卧獪y試策略三、單元測試的設(shè)計1.要測試以下程序段的正確性,需要構(gòu)造被測單元的驅(qū)動模塊。 intmax(intx,inty){ intz; if(x>y) z=x; else z=y; returnz; }任務(wù)實施根據(jù)被測單元的情況,需要編寫驅(qū)動模塊,通過給定實參5和8來調(diào)用被測單元。需要創(chuàng)建一個類(Test.java),并將被測單元封裝在獨立的類中(Max.java),在測試類中創(chuàng)建被測類的對象,以實現(xiàn)測試程序和被測程序的分離,通過調(diào)用被測類對象的方法進行測試。任務(wù)實施被測單元封裝為一個類(Max.java)publicclassMax{ intmax(intx,inty){ intz; if(x>y) z=x; else z=y; returnz; }}任務(wù)實施驅(qū)動模塊的類(Test.java)publicclassTest{ publicstaticvoidmain(String[]args){ intresult; Maxm=newMax(); result=m.max(5,8); System.out.println("5和8的最大值是:"+result); }}任務(wù)實施運行結(jié)果如圖所示:任務(wù)實施2.對下面的程序進行單元測試。publicstaticvoidmain(String[]args){ intyear,leap1; Scannerinput=newScanner(System.in); System.out.println("請輸入一個年份:"); year=input.nextInt(); leap1=leapyear(year); if(leap1==1) System.out.println(year+"isaleapyear."); else System.out.println(year+"isnotaleapyear."); }任務(wù)實施被測單元是一個主函數(shù),需要構(gòu)造被測單元的樁模塊,通過調(diào)用一個leapyear(intyear),使被測單元能順利調(diào)用,從而測試該單元的正確性。任務(wù)實施import
java.util.Scanner;public
classLeapYear{
static
intleapyear(intyear){
if(year%4==0&&year%100!=0||year%400==0)
return1;
else
return0; }
public
static
voidmain(String[]args){
intyear,leap1; Scannerinput=newScanner(System.in); System.out.println("請輸入一個年份:"); year=input.nextInt(); LeapYearm=newLeapYear(); leap1=m.leapyear(year);
if(leap1==1) System.out.println(year+"isaleapyear.");
else System.out.println(year+"isnotaleapyear."); }
}任務(wù)實施運行結(jié)果如下圖任務(wù)實施任務(wù)二使用JUnit測試Java程序●本任務(wù)通過對一個簡單計算器的加、減、乘、除功能的測試代碼的編寫,了解單元測試的基本概念和JUnit單元測試工具。掌握JUnit的安裝,熟悉使用Eclipse和JUnit進行簡單測試用例編寫和運行的過程,為后面的JUnit框架的理解和使用提供基礎(chǔ)。●JUnit是Java最主要的單元測試框架,對單元測試的基本概念的學(xué)習(xí)和理解,能幫助學(xué)生進步理解JUnit的基本概念。在理解JUnit的基礎(chǔ)上,要求學(xué)生進步掌握使用Eclipse進行單元測試代碼的編寫流程。任務(wù)陳述活動一認識JUnit
在Java編程環(huán)境中,JUnit是一個已經(jīng)被多數(shù)Java程序員采用和實證的優(yōu)秀測試框架。開發(fā)人員只需要按照JUnit的約定編寫測試代碼,就可以對被測試代碼進行測試。JUnit是1997年由ErichGamma(GoF之一)和KentBeck(XP和refactor先驅(qū)者之一)創(chuàng)建的。1999年以來,JUnit已經(jīng)發(fā)展成業(yè)界標(biāo)準(zhǔn)的Java測試和設(shè)計工具。一、認識JUnit活動一認識JUnit1.使用斷言方法判斷期望值和實際值差異,返回Boolean值;2.測試驅(qū)動設(shè)備使用共同的初始化變量或者實例。3.測試包結(jié)構(gòu)便于組織和集成運行。4.支持圖形交互模式和文本交互模式。二、JUnit特性活動一認識JUnit1.JUnit是開源工具;2.JUnit可以將測試代碼和產(chǎn)品代碼分開;3.JUnit的測試代碼非常容易編寫且功能強大;4.JUnit自動檢測測試結(jié)果并且提供及時的反饋;5.易于集成;6.便于組織。四、JUnit優(yōu)點三、JUnit優(yōu)點活動一認識JUnit1.只需要到JUnit的官方網(wǎng)站下載JUnit最新版本的安裝程序。2.將下載得到的junit.jar加入CLASSPATH環(huán)境變量即可使用JUnit,如果使用Eclipse工具,則可以在項目屬性的BuildPath中單擊“Add
Library”選項,選擇JUnit的jar包即可。四、JUnit下載和安裝活動二
JUnit的基本應(yīng)用public
classCalculator{
public
intadd(inta,intb){
returna+b; }
public
intsubstrate(inta,intb){
returna-b; }
public
intmultiply(inta,intb){
returna*b; }
public
intdivide(inta,intb){
returna/b; }}一、編寫計算器程序的代碼活動二JUnit的基本應(yīng)用packagejunit.demo;import
staticorg.junit.Assert.*;importorg.junit.Test;public
classCalculatorTest{ @Test
public
voidtestAdd(){ Calculatorcalculator=newCalculator();
intresult=calculator.add(3,2);
assertEquals(5,result); }}二、編寫計算器程序的測試代碼活動二
JUnit的基本應(yīng)用第1行,定義測試類所在的包。第2、3行,引入JUnit測試類必需的jar包。第4行,定義一個測試類CalculatorTest.第5行,用JUnit的注解@Test,將下面的方法標(biāo)注為一個測試方法。第6行,定義一個測試方法,方法名可自定義,一般以test開頭。第7行,遵循對象測試的風(fēng)格,創(chuàng)建對象。第8行,
測試Calculator的add的方法。第9行,用斷言比較調(diào)用add方法之后的返回值和期望值是否致。二、編寫計算器程序的測試代碼活動二
JUnit的基本應(yīng)用JUnit
4測試用例的基本結(jié)構(gòu):1.JUnit一個測試用例對應(yīng)一個測試方法,即一個函數(shù)。要創(chuàng)建測試,必須編寫對應(yīng)的測試方法。2.JUnit4的測試是基于注解的,每個測試方法前面都要加上@Test注解。3.每個測試方法要做一些斷言,
斷言主要用于比較實際結(jié)果與期望結(jié)果是否相符。上面的例子中,如果返回值不等于5,斷言失敗,整個測試用例運行的結(jié)果就是失敗,否則表示這個測試用例通過。二、編寫計算器程序的測試代碼活動二
JUnit的基本應(yīng)用JUnit4提供3種不同方式的運行器執(zhí)行測試用例:文本方式;AWT方式;Swing方式。三、運行測試用例活動二
JUnit的基本應(yīng)用JUnit
4測試用例的基本結(jié)構(gòu):1.JUnit一個測試用例對應(yīng)一個測試方法,即一個函數(shù)。要創(chuàng)建測試,必須編寫對應(yīng)的測試方法。2.JUnit4的測試是基于注解的,每個測試方法前面都要加上@Test注解。3.每個測試方法要做一些斷言,
斷言主要用于比較實際結(jié)果與期望結(jié)果是否相符。上面的例子中,如果返回值不等于5,斷言失敗,整個測試用例運行的結(jié)果就是失敗,否則表示這個測試用例通過。三、編寫計算器程序的測試代碼1.JUnit的下載與安裝JUnit工具的jar包可以從下載。JUnit是以jar文件的形式發(fā)布的,其中包括了所有必需的類。安裝JUnit,就是把jar文件放到編譯器能夠找到的地方,如果不使用IDE,而是從命令行直接調(diào)用JDK,則必須上CLASSPATH包含JUnit的jar包所在的路徑。簡單來說,就是解壓下載的壓縮文件到指定文件夾,并將JUnit.jar包加入到CLASSPATH中即可完成安裝。任務(wù)實施2.對一個Java類進行單元測試。該類為Caculator,實現(xiàn)簡單的加、減、乘、除等功能,實現(xiàn)用Eclipse編寫JUnit單元測試。任務(wù)實施(1)在Eclipse中引入JUnit任務(wù)實施(1)在Eclipse中引入JUnit任務(wù)實施(2)在Java項目中編寫被測單元程序任務(wù)實施(3)JUnit測試用例編寫任務(wù)實施(3)JUnit測試用例編寫任務(wù)實施(4)JUnit測試用例編寫任務(wù)實施任務(wù)三使用Junit測試自動售貨機程序●本任務(wù)將利用經(jīng)典的自動售貨機案例,完成Junit4的測試用例的編寫,掌握JUnit的測試框架和核心類:TestCase、TestSuite、TestRunner和Assert,以及它們?nèi)绾喂餐ぷ?,完成測試用例的編寫和運行。JUnit4是一個全新的框架,它充分利用了Java5的注解,使測試更為簡單快捷。通過對本任務(wù)的學(xué)習(xí),充分理解JUnit4的注解的應(yīng)用。任務(wù)陳述活動一Junit核心類1.TestCase
(測試用例)——擴展
了JUnit的TestCase
類的類。它以testXxxx方法的形式包含一個或多個測試。一個測試用例把具有公共行為的測試歸入一組。2.TestSuite
(測試集合)——一組測試。
一個測試集
合是把多個相關(guān)測試歸入一組的便捷方式。3.TestRuner(測試運行器)執(zhí)行testsuite的程序。JUnit提供了幾個測試運行器,可以用它們來執(zhí)行你的測試。一、JUnit核心類與接口活動一Junit核心類一、JUnit核心類與接口類/借口功能Assert當(dāng)條件成立時,asset方法保持沉默,但若條件不成立就拋出異常TestResult包含了測試中發(fā)生的所有錯誤或者失敗Test可以運行Test并把結(jié)果傳遞給TestResultTestListener測試中若產(chǎn)生事件(開始、結(jié)束、錯誤、失敗)會通知TestListenerTestCaseTestCase定義了可以用于運行多項測試的環(huán)境(或者說固定設(shè)備)TestSuiteTestSuite運行組TestCase
(它們可能包含其他TestSuite),它是Test的組合BaseTestRunnerestRunner是用來啟動測試的用戶界面,Base
TestRunner是所有TestRunner的超類活動一Junit核心類1.Teat接口Test接口是TestCase、TestSuite的共同接口,用于運行測試和收集測試結(jié)果。它的run(TestResultresult)萬法用來運行Test,并且將結(jié)果保存到TestResult.2.TestResult(測試結(jié)果)TestResult類收集TestCase的執(zhí)行結(jié)果,并報告測試結(jié)果。若測試成功,那么TestResult代碼是正確的,進度條就是綠色顯示,否則TestResult就會報告失敗,并輸出失敗測試的數(shù)目和它的堆棧軌跡。3.TestListener接口JUnit框架提供了TestListener接口,以幫助對象訪問TestResult并創(chuàng)建有用的報告。TestRunner實現(xiàn)了TestListener,很多特定的JUnit擴展也實現(xiàn)了TestListener.可以有任意數(shù)量的TestListener向JUnit框架注冊,這些TestListener可以根據(jù)TestResult提供的信息做它們需要做的任何事情。二、Junit其他接口活動一Junit核心類1.用fixture管理資源fixture是運行一個或多個測試所需的公用資源或數(shù)據(jù)集合。TestCase通過setUp和tearDown方法來自動創(chuàng)建和銷毀fixture。TestCase會在運行每個測試之前調(diào)用setUp,并且在每個測試完成之后調(diào)用tearDown。把不止一個測試方法放進同一個TestCase的一個重要理由就是可以共享fixture代碼。三、TestCase活動一Junit核心類2.TestCase成員三、TestCase方法描述countTestCase計算run()所執(zhí)行的TestCase的數(shù)目createResult創(chuàng)建默認的TestResult對象getName獲得TestCase的名字run運行TestCase并收集TestRrsult中的結(jié)果runBare運行測試序列(比如自動發(fā)現(xiàn)test方法)runTest重載以運行測試并斷言其狀態(tài)setName設(shè)置TestCase的名字setup初始化資源配置tearDown清除資產(chǎn)配置toString返回TextCase的字符串表示活動一Junit核心類Assert是JUnit框架的一個靜態(tài)類,包含一組靜態(tài)的測試方法,用于期望值和實際值比較是否正確。如果測試失敗,Assert類就會拋出一個AssertionFailedError異常。四、Junit斷言方法描述assertTrue斷言條件為真。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertFalse斷言條件為假。若不滿足,方法拋出帶有相應(yīng)的信息(若果有)的AssertionFailedError異常assertEquals斷言兩個對象相等。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertNotNull斷言對象不為null。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertNull斷言對象為null。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertSame斷言兩個引用指向同一個對象。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertNotSame斷言兩個指向不同對象。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常fail強制測試失敗,并給出指定信息活動二
JUnit測試套件默認的TestSuite會掃描測試類,找出所有以test開頭的方法。默認的TestSuite在內(nèi)部為每個testXxxx方法都創(chuàng)建一個TestCase的實例,要調(diào)用的方法的名稱會傳遞給TestCase的構(gòu)造函數(shù),這樣每個實例就有個獨一無二的標(biāo)識。一、運行自動的Suite活動二
JUnit測試套件PublicstaticTestsuite()
{ReturnnewTestSuite(CalculatorTest.class);}這就相當(dāng)于:
PublicstaticTestsuite()
{TestSuitesuite=newTestSuite();Suite.addTest(newCalculatorTest("testAdd"));return
suite;}一、運行自動的Suite活動二
JUnit測試套件publicclassAllTestsextendsTestCase{publicstaticTestsuite()(TestSuitesuite=newTestSuite(AllTests.class.getName());Suite.addTestSuite(CalculatorTest.class);returnsuite;}}二、編寫自己的TestSuite活動二
JUnit測試套件1.測試用例必須是公有類(public);2.測試用例必須繼承于TestCase類;3.測試用例的測試方法必須是公有的(public);4.測試用例的測試方法必須被聲明為void;5.測試用例的測試方法的前置名詞必須是test;6.測試用例的測試方法無任何傳遞參數(shù)。二、編寫自己的TestSuite活動三探究JUnit4Java注解(Annotation)的使用方法是@注解名,能通過簡單的詞語來實現(xiàn)一些功能。一、認識JUnit4注解活動三探究JUnit4在JUnit中常用的注解有@Test、@Ignore、@BeforeClass、@AfterClass、@Before、@After、@Runwith、@Parameters。二、常用注釋活動三探究JUnit41.@TestTesl表明這是一個測試方法可以隨意取,在Junit中將會自動被執(zhí)行。對于方法的聲明有如下要求:名字可以隨意取,但返回值必須為void類型,而且不能有任何參數(shù)。如果違反這些規(guī)定,會在運行時拋出一個異常。例如:@Test publicvoidtestAdd(){ Calculatorcalculator=newCalculator(); intresult=calculator.add(3,4); assertEquals(9,result); }二、常用注釋活動三探究JUnit42.@Before初始化方法,在任何一個測試執(zhí)行之前必須執(zhí)行的代碼,跟3.X中的setUp()方法具有相同功能。格式:@Beforepublicvoidmethod(),例如:@Before publicvoidsetUp()throwsException{ Calculatorcalculator=newCalculator(); }二、常用注釋活動三探究JUnit43.@After釋放資源,在任何測試執(zhí)行之后需要進行的收尾工作。跟3.X中的tearDown()方法具有相同的功能。格式:@Afterpublicvoidmethod(),例如:@After publicvoidtearDown()throwsException{ calculator=null; }二、常用注釋活動三探究JUnit44.@BeforeClass針對所有測試,在所有測試方法執(zhí)行前執(zhí)行一次,且必須為publicstaticvoid,此注解為4.X新增功能。格式:@BeoreClasspublicvoidmethod(),例如:@BeforeClass publicstaticvoidsetUpBeforeClass()throwsException{ System.out.println("@BeforeClassiscalled!"); }二、常用注釋活動三探究JUnit45.@AfterClass針對所有測試,在所有測試方法執(zhí)行結(jié)束執(zhí)行一次,且必須為publicstaticvoid,此注解為4.X新增功能。格式:@AfterClasspublicvoidmethod(),例如:@AfterClass publicstaticvoidtearDownAfterClass()throwsException{ System.out.println("@AfterClassiscalled!"); }二、常用注釋活動三探究JUnit46.@lgnore忽略的測試方法,標(biāo)注的含義就是“某些方法尚未完成,暫不參與此次測試”;這樣測試結(jié)果就會提示用戶有幾個測試被忽略,而不是失敗。一旦完成了相應(yīng)函數(shù),只需要把@Ignore標(biāo)注刪去,就可以進行正常的測試。例如:@Ignore @Test publicvoidtestAdd(){ intresult=calculator.add(1,1); assertEquals(2,result); }二、常用注釋活動三探究JUnit4二、常用注釋注解含義@Before初始化方法,在任何一個測試執(zhí)行之前必須執(zhí)行@After釋放資源,在任何測試執(zhí)行之后需要進行的收尾工作@Test表明這是一個測試方法@BeforeClass針對所有測試,在所有測試方法執(zhí)行前執(zhí)行一次@AfterClass針對所有測試,在所有測試方法執(zhí)行后執(zhí)行一次@RunWith指定使用測試的運行器@SuiteClass制定運行哪些測試類@Ignore忽略的測試方法@Parameter為單元測試提供參數(shù)值活動三探究JUnit4根據(jù)以上說明,Junit4的單元測試用例執(zhí)行順序為:@BeforeClass->@Before->@Test->@After->@AfterClass;每一個測試方法的調(diào)用順序為:@Before->@Test->@After二、常用注釋活動三探究JUnit41.認識測試套件Junit4中最顯著的特性是沒有套件(套件機制用于將測試從邏輯上的分組并將這些測試作為一個單元測試來運行)。為了替代老版本的套件測試,套件被兩個新注解代替:@RunWith、@SuiteClasses。通過@RunWith制定一個特殊的運行器::Suieclas套件運行器,并通過@uitliases注解,將需要進行測試的類列表作為參數(shù)傳入。三、測試套件活動三探究JUnit42.測試套件編寫流程(1)創(chuàng)建個空類作為測試套件的入口;(2)將@RunWith、@suiteClasses注解修飾這個空類:(3)把Suite.classs作為參數(shù)傳入@RunWih注解,以提示JUnit將此類指定為運行器;(4)將需要測試的類組成數(shù)組作為@SuiteClases的參數(shù)。如下例所示:@RunWith(value=Suite.class)@SuiteClasses(value={CalculatorTest.class,ExceptionTest.class})publicclassTestAll{}三、測試套件1.“計算每月多少天”程序的JUnit測試用例編寫(1)“計算每月多少天”程序功能介紹根據(jù)所提供的年份和月份(為函數(shù)的兩個參數(shù)),返回該月的天數(shù)(為函數(shù)返回值);(2)編碼實現(xiàn);(3)“計算每月多少天”的測試用例分析;(4)測試代碼;(5)測試結(jié)果;任務(wù)實施單元5自動化測試目錄自動化測試基礎(chǔ)任務(wù)一SeleniumWebDriver的基本應(yīng)用任務(wù)二SeleniumWebDriver的高級應(yīng)用任務(wù)三任務(wù)一自動化測試基礎(chǔ)活動一認識自動化測試
自動化測試是把以人為驅(qū)動的測試行為轉(zhuǎn)化為機器執(zhí)行的一種過程,即模擬手工測試步驟通過執(zhí)行程序語言編制的測試腳本自動地測試軟件。
自動化測試可以把我們需要花費大量時間去重復(fù)執(zhí)行的測試操作用腳本實現(xiàn),把測試人員從枯燥單調(diào)的重復(fù)性勞動中解放出來,進而節(jié)省人力、時間和資源,提高測試效率。一般滿足以下三個條件就可以對項目實施自動化測試:項目需求變動不頻繁項目周期較長自動化測試腳本可重復(fù)使用活動一認識自動化測試常見的自動化測試工具LoadRunner適用于性能測試,通過模擬大量用戶實施并發(fā)負載及實時性能監(jiān)測的方式來確認和查找問題。LoadRunner可適用于各種體系架構(gòu)的自動負載測試,能預(yù)測系統(tǒng)行為并評估系統(tǒng)性能。QuickTestProfessional適用于Web自動化測試,提供符合所有主要應(yīng)用軟件環(huán)境的功能測試和回歸測試的自動化。采用關(guān)鍵字驅(qū)動的理念以簡化測試用例的創(chuàng)建和維護。它讓用戶可以直接錄制屏幕上的操作流程,自動生成功能測試或者回歸測試用例。Postman適用于接口測試,提供功能強大的WebAPI和HTTP請求的調(diào)試,它能夠發(fā)送任何類型的HTTP請求,并且能附帶任何數(shù)量的參數(shù)和Headers,還提供測試數(shù)據(jù)和環(huán)境配置數(shù)據(jù)的導(dǎo)入導(dǎo)出。JMeter適用于接口測試,性能測試,100%的用java實現(xiàn)。用于模擬在服務(wù)器、網(wǎng)絡(luò)或者其他對象上附加高負載以測試他們提供服務(wù)的受壓能力,或者分析他們提供的服務(wù)在不同負載條件下的總性能情況。Selenium適用于Web自動化測試,利用Selenium編寫的自動化測試腳本可以模擬用戶在瀏覽器中的各種操作,支持的瀏覽器包括IE、Firefox、Chrome等,還支持多平臺和多語言。Appium適用于App自動化測試,支持iOS和Android平臺,支持Python、Java等語言。當(dāng)收到客戶端的連接后,就會監(jiān)聽到命令,然后在移動設(shè)備上執(zhí)行這些命令,最后將執(zhí)行結(jié)果放在HTTP響應(yīng)中返還給客戶端。AppiumSeleniumJMeterPostmanQTPLoadRunner活動一認識自動化測試自動化測試的流程活動一認識自動化測試活動二搭建自動化測試環(huán)境四款軟件:PythonPython語言開發(fā)環(huán)境基于Web的自動化測試工具SeleniumPyCharmPythonIDE谷歌瀏覽器Chrome一、安裝Python開發(fā)環(huán)境
從Python官網(wǎng)下載安裝程序,雙擊Python,根據(jù)提示一步步操作。1、雙擊安裝文件(如python-3.11.5-amd64.exe)進行安裝,如下圖所示。按照圈中區(qū)域進行設(shè)置,切記要勾選打鉤的框,如果不進行勾選,需要自己配置環(huán)境變量,勾選后會自動配置環(huán)境變量。然后再點擊“Customizeinstallation(自定義安裝)”進入到下一步?;顒佣罱ㄗ詣踊瘻y試環(huán)境2、點擊自定義安裝后彈出如下圖所示的安裝界面,將所有的復(fù)選框進行勾選,點擊Next?;顒佣罱ㄗ詣踊瘻y試環(huán)境3、彈出新的安裝界面,如下圖所示。
界面中只勾選圖中選中的復(fù)選框即可。然后選擇安裝路徑。我們可以通過點擊Browse按鈕自行選擇安裝路徑,也可以直接點擊Install在默認路徑進行安裝,點擊Install后等待安裝完成?;顒佣罱ㄗ詣踊瘻y試環(huán)境4、安裝完成后為了檢查我們的Python是否安裝成功,可以使用win+R打開cmd命令窗口,在窗口中輸入python命令進行查詢,出現(xiàn)如下圖所示的提示信息則表示成功了。活動二搭建自動化測試環(huán)境二、安裝Selenium打開cmd命令窗口在線安裝Selenium。命令:pipinstallselenium說明:通過“pipinstallselenium”命令安裝Selenium時,系統(tǒng)將默認安裝當(dāng)前最新的版本。如果想要安裝指定的Selenium版本,可以使用“pipinstallselenium==版本號”命令。活動二搭建自動化測試環(huán)境安裝完成后可以用
pipshowselenium命令檢查是否安裝成功。如下圖所示?;顒佣罱ㄗ詣踊瘻y試環(huán)境三、安裝PyCharm
PyCharm安裝包需要從網(wǎng)上自行下載。安裝步驟如下:1、雙擊PyCharm安裝包,彈出如下圖所示對話框,之后點擊Next?;顒佣罱ㄗ詣踊瘻y試環(huán)境2、選擇安裝路徑(也可以使用默認路徑),選擇完成后,點擊Next,如下圖所示。活動二搭建自動化測試環(huán)境3、選擇相對應(yīng)的系統(tǒng)和文件后綴名,之后點擊Next,如圖所示。活動二搭建自動化測試環(huán)境4、在開始安裝界面點擊Install,進行安裝,如圖所示?;顒佣罱ㄗ詣踊瘻y試環(huán)境5、安裝成功之后勾選復(fù)選框,點擊Finish,表示安裝完成并運行PyCharm。如圖所示。活動二搭建自動化測試環(huán)境四、安裝Chrome瀏覽器以及驅(qū)動1、安裝Chrome瀏覽器
訪問GoogleChrome官方網(wǎng)站下載Chrome瀏覽器安裝程序,下載地址:/chrome/,然后根據(jù)提示一步步完成安裝。2、安裝Chrome瀏覽器驅(qū)動
要想通過自動化腳本打開瀏覽器,還需要安裝瀏覽器驅(qū)動。除了Firefox瀏覽器的驅(qū)動已經(jīng)默認包含在SeleniumWedDriver包里了,可以直接調(diào)用。如果要使用其他瀏覽器,比如IE瀏覽器或者谷歌瀏覽器,都需要安裝相應(yīng)的瀏覽器驅(qū)動?;顒佣罱ㄗ詣踊瘻y試環(huán)境
注意下載與谷歌瀏覽器版本對應(yīng)的驅(qū)動。然后將谷歌瀏覽器驅(qū)動文件chromedriver.exe放置在python安裝文件的根目錄“...\Python\Python35”下,如下圖所示?;顒佣罱ㄗ詣踊瘻y試環(huán)境任務(wù)二SeleniumWebDriver的基本應(yīng)用一、引入webdriver模塊
要在Pycharm中使用WebDriver編寫自動化測試腳本,首先需要引入WebDriver模塊。代碼如下:
fromseleniumimportwebdriver活動一熟悉WebDriver基礎(chǔ)二、瀏覽器的打開、關(guān)閉方法說明webdriver.瀏覽器名稱()打開測試使用的瀏覽器get(url)打開頁面quit()退出當(dāng)前瀏覽器close()關(guān)閉瀏覽器的當(dāng)前窗口表5-5打開、關(guān)閉瀏覽器的方法活動一熟悉WebDriver基礎(chǔ)示例:調(diào)用谷歌瀏覽器訪問百度首頁,然后關(guān)閉窗口。fromseleniumimportwebdriver
#打開Chrome瀏覽器使用Chrome()方法driver=webdriver.Chrome()
driver.get("")
driver.close()活動一熟悉WebDriver基礎(chǔ)三、瀏覽器的前進、后退和刷新表5-6瀏覽器的前進、后退和刷新方法方法說明forward()瀏覽器前進back()瀏覽器后退refresh()瀏覽器刷新活動一熟悉WebDriver基礎(chǔ)示例:實現(xiàn)百度首頁和百度新聞頁面之間的切換。fromseleniumimportwebdriver
driver=webdriver.Chrome()
driver.get("")
driver.get("")
driver.back()#后退到“百度首頁”
driver.forward()#前進到“百度新聞頁面”driver.refresh()#刷新頁面活動一熟悉WebDriver基礎(chǔ)四、瀏覽器窗口的設(shè)置表5-7設(shè)置瀏覽器窗口的大小和位置的方法方法說明maximize_window()將瀏覽器窗口最大化minimize_window()將瀏覽器窗口最小化set_window_position(x,y)將瀏覽器窗口移動到指定位置set_window_size(width,height)將瀏覽器窗口設(shè)置為指定大小set_window_rect(x,y,width,height)將瀏覽器窗口移動到指定位置并設(shè)置為指定大小活動一熟悉WebDriver基礎(chǔ)示例:設(shè)置瀏覽器窗口的大小和位置。fromseleniumimportwebdriver
driver=webdriver.Chrome()
driver.get("")#將瀏覽器窗口最小化driver.minimize_window()#將瀏覽器窗口最大化driver.maximize_window()#設(shè)置瀏覽器窗口大小為寬500像素、高600像素driver.set_window_size(500,600)#將瀏覽器窗口移動到橫坐標(biāo)200像素、縱坐標(biāo)100像素的位置driver.set_window_position(200,100)#將瀏覽器窗口移動到橫坐標(biāo)200像素、縱坐標(biāo)200像素的位置并設(shè)置窗口大小為寬400像素、高400像素driver.set_window_rect(200,200,400,400)活動一熟悉WebDriver基礎(chǔ)自動化要做的就是模擬鼠標(biāo)和鍵盤來操作頁面上的元素,或單擊,或輸入,或鼠標(biāo)懸停等。
操作這些元素的前提是需要找到它們,自動化工具無法像測試人員一樣可以通過肉眼來分辨頁面上的元素,并且知道它們是做什么用的,那么如何找到它們呢?活動二定位元素通過前端工具,可以看到頁面上的元素都是由一行行的代碼組成的,它們之間有層級地組織起來,每個元素有不同的標(biāo)簽名和屬性值。WebDriver就是通過這些信息來找到不同的元素的?;顒佣ㄎ辉匾?、單個元素的定位
WebDriver提供了八種對單個元素進行定位的方法,在Python語言中,所對應(yīng)的方法如下:find_element_by_id()find_element_by_name()find_element_by_class_name()find_element_by_tag_name()find_element_by_link_text()find_element_by_partial_link_text()find_element_by_xpath()find_element_by_css_selector()活動二定位元素格式:find_element_by_id()1、id定位id定位是通過元素的id屬性值來定位元素。由于在頁面中id屬性值一般不會重復(fù),所以如果元素有id屬性,可以優(yōu)先考慮使用id定位方法定位元素。
以百度頁面的輸入框為例。先打開百度頁面,右擊輸入框,在彈出菜單中選“檢查”,出現(xiàn)的界面如右圖所示。定位輸入框的腳本:find_element_by_id(“kw”)活動二定位元素格式:find_element_by_name()2、name定位在編寫自動化腳本的時候,如果頁面中某個元素沒有id屬性,那我們就沒有辦法通過id屬性去定位頁面元素,但是如果這個元素的name屬性值是獨一無二的,我們就可以使用name屬性來定位。
以百度頁面的輸入框為例,如右圖所示。定位輸入框的腳本:find_element_by_name(“wd”)活動二定位元素格式:find_element_by_class_name()3、class_name定位
如果某個頁面元素,既沒有id屬性,也沒有name屬性,但是我們可以在定位的頁面中找到class屬性,那么我們就可以使用class屬性來定位。
以百度頁面的輸入框為例,如右圖所示。定位輸入框的腳本:find_element_by_class_name(“s_ipt”)活動二定位元素格式:
find_element_by_tag_name()4、tag_name定位
HTML的本質(zhì)就是通過tag來定義實現(xiàn)不同的功能,每一個元素本質(zhì)上也是一個tag。因為一個tag往往用來定義一類功能,所以通過tag識別某個元素的概率很低。打開任意一個頁面,都會發(fā)現(xiàn)存在大量的<div>、<input>、<a>等tag。所以很難通過tagname去區(qū)分不同的元素。以百度頁面為例,如右圖所示。腳本find_element_by_tag_name(“input”)不能定位到文本框?;顒佣ㄎ辉馗袷剑?/p>
find_element_by_link_text()5、link_text定位link_text定位專門用來定位文本鏈接,使用超鏈接的文本做參數(shù)來進行定位。
右擊百度頁面左上角的“地圖”,選“檢查”,如右圖所示。通過元素屬性可以看出,標(biāo)簽名為a,且href
=“http://map.baidu.com”,說明它是個超鏈接,對于這種元素,可以用link定位。定位“地圖”鏈接的腳本:find_element_by_link_text(“地圖”)活動二定位元素格式:find_element_by_partial_link_text()6、partial_link_text定位link_text定位方法是使用超鏈接文本的全部字符串進行定位。有時候一個超鏈接文本的字符串可能比較長,如果輸入全稱的話,會顯示很長,既占地方而且也易出錯,這時候可以用partial_link_text定位。這是一種模糊匹配方式,只要截取超鏈接文本中一部分字符串就可以。
如右圖所示的新浪網(wǎng)站。定位“跟著習(xí)近平學(xué)黨史—增強理論自信”鏈接的腳本:find_element_by_partial_link_text(“學(xué)黨史”)活動二定位元素格式:find_element_by_xpath()7、XPath定位
XPath即為XML路徑語言,是一種用來確定XML文檔中某部分位置的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點的能力。因為HTML可以看做XML的一種實現(xiàn),所以selenium用戶可以使用這種強大的語言在web應(yīng)用中定位元素。
如果熟悉XPath語法可手工編寫XPath路徑。更簡單的做法是直接從網(wǎng)站頁面復(fù)制XPath路徑。以百度網(wǎng)站為例,如右圖所示。XPath定位輸入框的腳本:find_element_by_xpath(‘//*[@id="kw"]’)活動二定位元素格式:find_element_by_css_selector()8、css_selector定位
css_selector定位是另外一種通過路徑導(dǎo)航實現(xiàn)某個元素的定位方法,但是此方法比XPath更為簡潔,運行速度更快。我們可以通過定位到某個頁面元素后,直接右擊選擇“Copy–Copyselector”復(fù)制出CSS路徑,然后放到css_selector定位方法中做參數(shù)進行元素定位。以百度網(wǎng)站為例,如右圖所示。CSS定位輸入框的腳本:find_element_by_css_selector(“#kw”)活動二定位元素
當(dāng)測試頁面上有多個元素需要進行操作時,逐一進行定位就會比較麻煩。例如需要同時選擇頁面上的所有復(fù)選框,這時候可以通過一組元素的定位方法進行定位。方法說明find_elements_by_id()通過元素的id屬性值定位一組元素find_elements_by_name()通過元素的name屬性值定位一組元素find_elements_by_class_name()通過元素的class屬性值定位一組元素find_elements_by_tag_name()通過元素的標(biāo)簽名定位一組元素find_elements_by_link_text()通過超鏈接全部文本內(nèi)容定位一組元素find_elements_by_partial_link_text()通過超鏈接部分或全部文本內(nèi)容定位一組元素find_elements_by_xpath()通過元素路徑定位一組元素find_elements_by_css_selector()通過css選擇器定位一組元素表5-8定位一組元素的方法活動二定位元素一、Keys類
用selenium做自動化測試,有時候會遇到需要用到模擬鍵盤操作的情況,而selenium給我們提供了一個類來處理這類事件——Keys類。Keys類提供了對鍵盤上幾乎所有按鍵的操作。這個類能夠滿足我們對鍵盤基本操作的需求。注意:模擬鍵盤的操作需要先導(dǎo)入鍵盤模塊,腳本為:frommon.keysimportKeys活動三模擬鍵盤操作Keys常用按鍵列表回車鍵
Keys.ENTER刪除鍵
Keys.BACK_SPACE空格鍵
Keys.SPACETAB鍵
Keys.TABShift鍵
Keys.SHIFTESC鍵
Keys.ESCAPE上鍵
Keys.ARROW_UP下鍵
Keys.ARROW_DOWN左鍵
Keys.ARROW_LEFT右鍵
Keys.ARROW_RIGHT“+”鍵Keys.
ADD“-”鍵Keys.
SUBTRACT“*”鍵Keys.MULTIPLY“/”鍵Keys.DIVIDE“=”鍵
Keys.EQUALS全選(Ctrl+A)Keys.CONTROL,'a'復(fù)制(Ctrl+C)Keys.CONTROL,'c'剪切(Ctrl+X)Keys.CONTROL,'x'粘貼(Ctrl+V)Keys.CONTROL,'v'數(shù)字0Keys.NUMPAD0數(shù)字1Keys.NUMPAD1…….數(shù)字9Keys.NUMPAD9鍵盤F1 Keys.F1…….鍵盤F12
Keys.F12活動三模擬鍵盤操作三、send_keys方法
send_keys()方法可以用來模擬鍵盤輸入,將按鍵發(fā)送到當(dāng)前活動對象,就好像它們是從鍵盤輸入的一樣。send_keys()方法的參數(shù)可以是字符串常量或變量,也可以是Keys類中的按鍵。例如:driver.find_element_by_id(“kw”).send_keys(“軟件測試”)driver.find_element_by_id(“kw”).send_keys(Keys.TAB)活動三模擬鍵盤操作在百度首頁的輸入框中做模擬鍵盤操作的練習(xí)。fromseleniumimportwebdriver#引入Keys模塊frommon.keysimportKeys
importtime
driver=webdriver.Chrome()
driver.get(“”)
#輸入框輸入文字“selenium書”
driver.find_element_by_id(“kw”).send_keys(“selenium書")#刪除最后一個字符“書”driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)活動三模擬鍵盤操作#輸入空格鍵+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")#ctrl+a全選輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")#ctrl+x剪切輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
#ctrl+v粘貼內(nèi)容到輸入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")#定位到“百度一下”按鈕,按下回車鍵driver.find_element_by_id("su").send_keys(Keys.ENTER)活動三模擬鍵盤操作一、鼠標(biāo)單擊操作
WebDriver提供了click()
方法用來模擬鼠標(biāo)單擊操作。
click()
方法可以用來單擊一個元素,前提是這個元素是可以被單擊的對象。
所以,click()方法可用于單擊一個按鈕,還能單擊文本鏈接、圖片鏈接、復(fù)選框、單選框、下拉框等任何可以單擊的元素。例如:
driver.find_element_by_id("su").click()活動四模擬鼠標(biāo)操作二、ActionChains類
除了鼠標(biāo)單擊操作,其余的鼠標(biāo)操作方法都是由ActionChains類來提供。
引入ActionChains類的腳本:frommon.action_chainsimportActionChainsActionChains執(zhí)行原理:
調(diào)用ActionChains中的方法時,不會立即執(zhí)行,而是會將所有的操作按順序存放在一個隊列里,當(dāng)你調(diào)用perform()方法時,會按照隊列里面的順序進行執(zhí)行。其中調(diào)用的perform()方法必須放在ActionChains方法的最后?;顒铀哪M鼠標(biāo)操作三、鼠標(biāo)右擊操作
ActionChains類中用來模擬鼠標(biāo)右擊操作的方法是context_click()。例:實現(xiàn)百度輸入框的右擊操作。fromseleniumimportwebdriver
#引入ActionChains類
frommon.action_chainsimportActionChains
driver=webdriver.Chrome()
driver.get("")
#定位到要右擊的元素
right=driver.find_element_by_id("kw")
#對定位到的元素執(zhí)行鼠標(biāo)右鍵操作
ActionChains(driver).context_click(right).perform()活動四模擬鼠標(biāo)操作四、鼠標(biāo)雙擊操作ActionChains類中用來模擬鼠標(biāo)雙擊操作的方法是double_click()。例:…….
#定位到要雙擊的元素double=driver.find_element_by_id("su")#對定位到的元素執(zhí)行雙擊操作ActionChains(driver).double_click(double).perform()…….活動四模擬鼠標(biāo)操作五、鼠標(biāo)懸停操作ActionChains類中用來模擬鼠標(biāo)懸停操作的方法是move_to_element()。例:將鼠標(biāo)懸停在百度首頁的文本鏈接“更多”上,效果如圖所示。fromseleniumimportwebdriver
#引入ActionChains類
frommon.action_chainsimportActionChains
driver=webdriver.Chrome()
driver.get("")
#定位到要懸停的元素
above=driver.find_element_by_link_text("更多")
#對定位到的元素執(zhí)行懸停操作
ActionChains(driver).move_to_element(above).perform()活動四模擬鼠標(biāo)操作六、鼠標(biāo)拖放操作ActionChains類中用來模擬鼠標(biāo)拖放操作的方法是drag_and_drop(source,target)。各參數(shù)含義:source:鼠標(biāo)拖動的源元素target:鼠標(biāo)釋放的目標(biāo)元素方法作用:實現(xiàn)在源元素上按住鼠標(biāo)左鍵,然后移動到目標(biāo)元素上釋放。例:#定位源元素s=driver.find_element_by_id(“xx")#定位目標(biāo)元素
t=driver.find_element_by_id(“xx")#執(zhí)行鼠標(biāo)的拖放操作ActionChains(driver).drag_and_drop(s,t).perform()活動四模擬鼠標(biāo)操作click(on_element=None)——單擊鼠標(biāo)左鍵click_and_hold(on_element=None)——點擊鼠標(biāo)左鍵,不松開context_click(on_element=None)——點擊鼠標(biāo)右鍵double_click(on_element=None)——雙擊鼠標(biāo)左鍵drag_and_drop(source,target)——拖拽到某個元素然后松開drag_and_drop_by_offset(source,xoffset,yoffset)——拖拽到某個坐標(biāo)然后松開key_down(value,element=None)——按下某個鍵盤上的鍵key_up(value,element=None)——松開某個鍵move_by_offset(xoffset,yoffset)——鼠標(biāo)從當(dāng)前位置移動到某個坐標(biāo)move_to_element(to_element)——鼠標(biāo)移動到某個元素move_to_element_with_offset(to_element,xoffset,yo
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綜合制劑車間課程設(shè)計
- 中西醫(yī)助理醫(yī)師考試中醫(yī)內(nèi)科學(xué)總結(jié)要點大全
- 自然大調(diào)音階的課程設(shè)計
- 中考英語各種題材閱讀理解強化訓(xùn)練(附詳解)
- 學(xué)年論文和課程設(shè)計
- (CFG及真空聯(lián)合堆載預(yù)壓)軟基處理施工方案
- 《機械通氣的應(yīng)用》課件
- 油庫課程設(shè)計書封面圖案
- 模擬電子琴設(shè)計課程設(shè)計
- 知識產(chǎn)權(quán)活動課程設(shè)計
- 【MOOC期末】《電子技術(shù)實習(xí)SPOC》(北京科技大學(xué))期末慕課答案
- 新媒體技術(shù)基礎(chǔ)知識單選題100道及答案解析
- 2025蛇年帶橫批春聯(lián)對聯(lián)200副帶橫批
- 互聯(lián)網(wǎng)+創(chuàng)新商業(yè)模式考核試卷
- 江蘇省揚州市梅嶺中學(xué)2023-2024學(xué)年七年級上學(xué)期期末地理試題(含答案)
- 克羅恩病病例分析
- 《冠心病》課件(完整版)
- DB43T 1694-2019 集體建設(shè)用地定級與基準(zhǔn)地價評估技術(shù)規(guī)范
- 高級技師電工培訓(xùn)
- DZ/T 0462.3-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- Lesson-1.-spring-festival(雙語課件-春節(jié))
評論
0/150
提交評論