《Selenium自动化测试指南》—第1章1.1节自动化测试基础
本節(jié)書摘來自異步社區(qū)《Selenium自動化測試指南》一書中的第1章1.1節(jié)自動化測試基礎(chǔ),作者趙卓,更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“異步社區(qū)”公眾號查看。
1.1 自動化測試基礎(chǔ)
Selenium自動化測試指南
1.1.1 軟件測試概述
即使是經(jīng)驗(yàn)非常豐富的程序員,在編寫代碼時也很容易出現(xiàn)錯誤,這些錯誤也許是由于需求不明確,也許是由于設(shè)計(jì)問題,也許是編碼中出現(xiàn)了失誤等。但無論是怎樣的錯誤,若不及時處理,都會降低軟件的可靠性,嚴(yán)重時甚至?xí)?dǎo)致整個軟件的失敗。
為了排除這些錯誤,人們引入了軟件測試的概念。通俗地說,軟件測試就是為了發(fā)現(xiàn)程序中的錯誤而分析或執(zhí)行程序的過程。
據(jù)研究機(jī)構(gòu)統(tǒng)計(jì)分析表明,國外軟件開發(fā)機(jī)構(gòu)40%的工作量都花在軟件測試上,軟件測試費(fèi)用占軟件開發(fā)總費(fèi)用的30%~50%。對于一些要求高可靠、高安全的軟件,測試費(fèi)用所占的比例更高。由此可見,要成功開發(fā)出高質(zhì)量的軟件產(chǎn)品,軟件測試必不可少。
軟件測試的主要工作是驗(yàn)證(Verification)和確認(rèn)(Validation)。
驗(yàn)證是保證軟件正確地實(shí)現(xiàn)了一些特定功能的一系列活動,即保證軟件以正確的方式做了該做的事。具體地講,驗(yàn)證主要完成以下任務(wù)。
(1)確定軟件生存周期中一個給定階段的產(chǎn)品是否達(dá)到當(dāng)前階段確立的需求。
(2)程序正確性的形式證明,即采用形式理論證明程序符合設(shè)計(jì)規(guī)約的規(guī)定。
(3)評審、審查、測試、檢查、審計(jì)等,或?qū)δ承╉?xiàng)處理、服務(wù)或文件等是否和規(guī)定的需求相一致進(jìn)行判斷并進(jìn)行報(bào)告。
確認(rèn)(Validation)的目的是想證實(shí)在一個給定的外部環(huán)境中軟件的邏輯正確性,即保證軟件做了所期望的事情。
(1)靜態(tài)確認(rèn),不在計(jì)算機(jī)上實(shí)際執(zhí)行程序,通過人工或程序分析來證明軟件的正確性。
(2)動態(tài)確認(rèn),通過執(zhí)行程序進(jìn)行分析,測試程序的動態(tài)行為,以證實(shí)軟件是否存在問題。
測試和改正活動可以在軟件生命周期的任何階段進(jìn)行。然而,隨著開發(fā)的不斷進(jìn)行,找出并修正錯誤的代價(jià)也會急劇增加。在需求階段就對其進(jìn)行修改,付出的代價(jià)會很少。如果代碼已經(jīng)編寫完畢,再進(jìn)行更改,則將付出代價(jià)會大許多。
軟件測試的分類
從是否關(guān)心軟件內(nèi)部結(jié)構(gòu)和具體實(shí)現(xiàn)的角度來看,軟件測試可以劃分為以下幾類。
白盒測試:需要了解內(nèi)部結(jié)構(gòu)和代碼。
黑盒測試:不關(guān)心內(nèi)部結(jié)構(gòu)和代碼。
灰盒測試:介于白盒測試和黑盒測試之間。
從是否執(zhí)行程序的角度來看,軟件測試可以劃分為以下幾類。
靜態(tài)測試:測試時不執(zhí)行被測試軟件。
動態(tài)測試:測試時執(zhí)行被測試軟件。
按軟件開發(fā)過程的階段劃分,軟件測試可以劃分為以下幾類。
單元測試:測試軟件的單元模塊(單元模塊指某個功能、某個類等)。
集成測試:將各個“單元”集成到一起測試是否能正確運(yùn)行。
系統(tǒng)測試:測試軟件是否符合系統(tǒng)中的各項(xiàng)需求。
驗(yàn)收測試:類似系統(tǒng)測試,但由用戶執(zhí)行。
按測試的具體目標(biāo)進(jìn)行劃分,軟件測試可以劃分為以下幾類。
功能測試:測試軟件是否符合功能性需求,通常采用黑盒測試方法。
性能測試:測試軟件在各種狀態(tài)下的性能,找出性能瓶頸。
安全測試:測試該軟件防止非法入侵的能力。
回歸測試:在軟件被修正或運(yùn)行環(huán)境發(fā)生變化后進(jìn)行重新測試。
兼容性測試:測試該軟件與其他軟件、硬件的兼容能力。
安裝測試:測試軟件的安裝、卸載、升級是否正常。
各種軟件測試書籍對前面3種劃分方式介紹得很多,但在實(shí)際工作中,更習(xí)慣將測試按具體目標(biāo)進(jìn)行劃分。
1.1.2 自動化測試簡介
軟件測試一般是由測試人員執(zhí)行的,如果由機(jī)器來代替人執(zhí)行軟件測試,那么這種測試就叫自動化測試。例如,由計(jì)算機(jī)代替人來單擊被測試軟件的界面,執(zhí)行一系列操作并進(jìn)行驗(yàn)證。
在各種測試中,都可以引入自動化測試。
通過執(zhí)行自動化測試,可以節(jié)省大量的人力、時間或硬件等資源,同時也能大大提高測試效率。
當(dāng)然,這聽起來很好,但如果要由機(jī)器代替人來執(zhí)行軟件測試,就得開發(fā)相應(yīng)的自動化測試代碼。開發(fā)自動化測試代碼也是需要人力、時間或硬件等資源的。因此,在資源有限的情況下,必須對軟件開發(fā)過程進(jìn)行分析,觀察哪些地方適合使用自動化測試。使用自動化測試通常需要同時滿足以下條件。
(1)軟件需求變動不頻繁。
測試腳本的穩(wěn)定性決定了自動化測試的維護(hù)成本。如果軟件需求變動過于頻繁,測試人員需要根據(jù)變動的需求來更新測試用例以及相關(guān)的測試腳本,而腳本的維護(hù)本身就是一個代碼開發(fā)的過程,需要修改和調(diào)試,必要的時候還要修改自動化測試的框架,如果所花費(fèi)的成本不低于利用其節(jié)省的測試成本,那么自動化測試便是失敗的。
項(xiàng)目中的某些模塊相對穩(wěn)定,而某些模塊需求變動性很大。可以對相對穩(wěn)定的模塊進(jìn)行自動化測試,而變動較大的仍采用手工測試。
(2)項(xiàng)目周期足夠長。
自動化測試的過程包括自動化測試需求的確定、自動化測試框架的設(shè)計(jì)、測試腳本的編寫和調(diào)試等,這個過程本身就是一個測試軟件的開發(fā)過程,需要較長的時間來完成。如果項(xiàng)目的周期比較短,沒有足夠的時間去支持這樣一個過程,那么自動化測試便也無從談起。
(3)自動化測試腳本可重復(fù)使用。
如果費(fèi)盡心思開發(fā)了一套近乎完美的自動化測試腳本,但是腳本的重復(fù)使用率很低,致使其間所耗費(fèi)的成本大于所創(chuàng)造的經(jīng)濟(jì)價(jià)值,自動化測試便成為了測試人員的練手之作,而并非是真正可產(chǎn)生效益的測試手段了。
另外,在手工測試無法完成,需要投入大量時間與人力時也需要考慮引入自動化測試,例如性能測試、配置測試、大數(shù)據(jù)量輸入測試等。
至于自動化測試的開發(fā)過程,與軟件開發(fā)過程從本質(zhì)上來講是一樣的,這將在第6章中介紹。
1.1.3 Selenium簡介
Selenium是一系列基于Web的自動化測試工具。它提供了一系列測試函數(shù),用于支持Web自動化測試。這些函數(shù)非常靈活,它們能夠通過多種方式定位界面元素,并可以將預(yù)期結(jié)果與系統(tǒng)實(shí)際表現(xiàn)進(jìn)行比較。
作為一款強(qiáng)大的測試工具,Selenium具有以下幾個特性。
(1)可對多瀏覽器進(jìn)行測試,如IE、Firefox、Safari、Chrome、Android手機(jī)瀏覽器等。
(2)支持多種語言,例如Java、C#、Python、Ruby、PHP等。
(3)跨平臺,例如Windows、Lunix、iOS、Android等。
(4)開源免費(fèi)。
下面舉個例子來說明Selenium的使用,假設(shè)將要開始對京東商城的用戶登錄進(jìn)行手動測試,測試步驟如下。
(1)進(jìn)入京東用戶登錄頁面https://passport.360buy.com/new/login.aspx,如圖1-1所示。
(2)輸入用戶名和密碼,單擊“登錄”按鈕。輸入過程中分別按不輸入用戶名,輸入錯誤的用戶名,不輸入密碼,輸入錯誤的密碼,輸入正確的用戶名和密碼的順序進(jìn)行測試。
(3)檢查登錄后的狀態(tài)是否符合預(yù)期結(jié)果。
這看上去是一個很簡單的操作,但下面進(jìn)行一個極端的假設(shè):假設(shè)在測試時,需要在6個瀏覽器上都測試通過(如IE、Firefox、Safari、Chrome、Android、iPhone),每天都有8個項(xiàng)目上線,而登錄功能屬于冒煙測試檢查點(diǎn),那么登錄功能也同樣得檢查8次。那么算上各個瀏覽器的測試,每天就得將登錄執(zhí)行6×8=48遍,而且每遍都要包含以下幾種檢查:不輸入用戶名,輸入錯誤的用戶名,不輸入密碼,輸入錯誤的密碼,最后輸入正確的用戶名和密碼。一個看似簡單的操作一天要執(zhí)行這么多次(還沒有算上其他的功能),會讓測試人員感覺很煩。
如果使用Selenium,一切就好辦了,只需編寫少量代碼,就可以實(shí)現(xiàn)以下功能。
(1)計(jì)算機(jī)自動打開瀏覽器并進(jìn)入京東用戶登錄頁面https://passport.360buy.com/new/login.aspx。
(2)計(jì)算機(jī)自動輸入用戶名和密碼,并單擊“登錄”按鈕。分別按不輸入用戶名,輸入錯誤的用戶名,不輸入密碼,輸入錯誤的密碼,輸入正確的用戶名和密碼的順序進(jìn)行測試。
(3)計(jì)算機(jī)自動檢查登錄后的提示文字是否為預(yù)期結(jié)果,然后自動輸出測試報(bào)告。
(4)計(jì)算機(jī)自動切換到另一個瀏覽器,重復(fù)執(zhí)行(1)~(3)步,直到每個瀏覽器都執(zhí)行完畢。
以后執(zhí)行的時候只需要執(zhí)行Selenium代碼即可,無需測試人員費(fèi)神,看上去是不是要輕松多了?
1.Selenium工具組
Selenium由以下幾個工具組成,每一種工具都扮演著獨(dú)特的角色。
Selenium IDE。Selenium IDE是一個用于構(gòu)建腳本的初級工具。它是一個Firefox插件,擁有一個易于使用的界面。Selenium IDE擁有錄制功能,能夠記錄用戶執(zhí)行的操作,并將其導(dǎo)出為可重復(fù)使用的腳本(支持多種編程語言),然后用于執(zhí)行測試。
Selenium 1。Selenium 1(Selenium-RC)是Selenium 最主要的測試工具之一,它所具有的某些功能即使是新版的Selenium 2也無法支持。它能夠通過多種語言(Java、JavaScript、Ruby、PHP、Python、Perl和 C#)編寫測試代碼,同時能支持幾乎所有瀏覽器的測試。
Selenium 2。Selenium 2(WebDriver)作為最新版的Selenium工具,代表未來Selenium的發(fā)展方向。這套全新的自動化測試工具提供了許多功能,包括一套組織性更好、面向?qū)ο蟮腁PI,并克服了在之前Selenium 1版本中測試的局限性。
可以通過很少的修改就將Selenium 1的代碼移植到Selenium 2。同時,Selenium 2也提供了向前兼容Selenium 1的接口。
Selenium Grid。Selenium Grid能夠讓Selenium 1的測試在多個不同的環(huán)境中運(yùn)行,也能讓測試并行執(zhí)行。也就是說,各個測試能夠在同一時間、不同機(jī)器上運(yùn)行。這有兩個好處。首先,如果擁有一套大規(guī)模的測試或執(zhí)行緩慢的測試,可以通過Selenium Grid將測試在同一時間、不同機(jī)器上運(yùn)行,從而大幅提高性能;其次,如果測試必須在多個環(huán)境中運(yùn)行,那么Selenium Grid具有的“同一時間、不同機(jī)器”的特性也能夠輕松做到這一點(diǎn)。不管怎么樣,Selenium Grid都能夠大幅提高測試的效率。
2.選擇合適的Selenium工具
大多數(shù)用戶都是從Selenium IDE開始的。如果沒有編程經(jīng)驗(yàn),可以通過Selenium IDE來快速熟悉Selenium的命令。使用IDE,可以快速創(chuàng)建簡單的測試,有時甚至只需花幾分鐘的時間。
然而,并不建議所有的自動化測試都使用Selenium IDE。為了有效地使用Selnium,需要使用Selenium 1或Selenium 2,并配合使用其中一種編程語言,自己創(chuàng)建并運(yùn)行測試。
雖然,Selenium 2是Selenium未來的發(fā)展方向,但Selenium 1和Selenium 2各有優(yōu)劣,這需要用戶進(jìn)行判斷。另外,Selenium 1和Selenium 2可以互相轉(zhuǎn)換。
Selenium Grid一般用于分布式測試和集群測試,需要在多臺機(jī)器同時執(zhí)行測試時,可以選擇使用該工具。
本文僅用于學(xué)習(xí)和交流目的,不代表異步社區(qū)觀點(diǎn)。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的《Selenium自动化测试指南》—第1章1.1节自动化测试基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HiveQL之Database相关操作
- 下一篇: 深度 | 人工智能全局概览:通用智能的当