五大Java自動(dòng)化測(cè)試框架
譯文【51CTO.com快譯】多年來(lái),Java一直是服務(wù)器端應(yīng)用開發(fā)的首選編程語(yǔ)言。隨著時(shí)間的推移和自動(dòng)化測(cè)試的興起,業(yè)界出現(xiàn)了許多基于Java,并根據(jù)不同的業(yè)務(wù)邏輯而發(fā)展起來(lái)的開源框架。在此,我向大家介紹并比較五種用到了Java的自動(dòng)化測(cè)試框架。
1.JUnit
由Kent Beck和Erich Gamma開發(fā)的JUnit是xUnit框架的一個(gè)實(shí)例。其設(shè)計(jì)的宗旨是讓Java開發(fā)人員能夠編寫出各種腳本、并執(zhí)行那些可重復(fù)的測(cè)試用例。因此,JUnit通常被用來(lái)測(cè)試各種小塊的程序代碼。同時(shí),您還可以通過(guò)將JUnit與Selenium WebDriver相集成,來(lái)執(zhí)行針對(duì)某個(gè)網(wǎng)站的自動(dòng)化測(cè)試。不過(guò),只要添加了任何新的代碼,您都需要重新執(zhí)行整個(gè)測(cè)試用例、以確保無(wú)任何損壞。
安裝JUnit的先決條件
由于JUnit是一種基于Java的框架,因此它與Java的Selenium WebDriver高度兼容。您需要準(zhǔn)備如下先決條件:
- 安裝新版本的JDK。
- 下載最新版本的JUnit,并設(shè)置相關(guān)的環(huán)境。
- 熟悉使用面向?qū)ο缶幊陶Z(yǔ)言(尤其是Java)進(jìn)行應(yīng)用開發(fā)。
JUnit的優(yōu)點(diǎn)和缺點(diǎn)
JUnit有如下優(yōu)點(diǎn):
- 由于必須閱讀代碼、并查找異常,因此開發(fā)人員普遍能夠?qū)σ詼y(cè)試為驅(qū)動(dòng)的環(huán)境處之泰然。
- 能夠盡早地檢測(cè)出錯(cuò)誤,進(jìn)而產(chǎn)生更為可靠的程序代碼。
- 能夠開發(fā)出更具可讀性且無(wú)bug的程序代碼,以增強(qiáng)項(xiàng)目相關(guān)人員的信心。
- 最新版本的JUnit(版本4)不但可以更加輕松地識(shí)別出各種異常,而且能夠執(zhí)行那些由舊版JUnit所編寫的測(cè)試用例。
- 可與Java 5及以上版本一起使用。
JUnit的缺點(diǎn)是:
- 該框架無(wú)法執(zhí)行依賴性測(cè)試。
JUnit的特點(diǎn)與競(jìng)品比較
JUnit與下面將要提到的TestNG具有相似的功能。但是兩者在參數(shù)化測(cè)試的實(shí)現(xiàn)過(guò)程上不盡相同。由于歷史悠久,JUnit擁有更好的社區(qū)支持,并被定義為使用Selenium WebDriver進(jìn)行基于Java類應(yīng)用單元測(cè)試的標(biāo)準(zhǔn)。而TestNG雖然目前用戶相對(duì)較少,但是其社區(qū)規(guī)模卻日益增長(zhǎng)。因此,我們認(rèn)為:是選擇JUnit、還是TestNG作為Java測(cè)試的框架,完全取決于目標(biāo)應(yīng)用的性質(zhì)和需求。
當(dāng)然,如果您已選定了使用JUnit的話,請(qǐng)參考《使用JUnit和Selenium執(zhí)行自動(dòng)化測(cè)試》一文,以針對(duì)瀏覽器的兼容性開展分步測(cè)試。
2.JBehave
作為測(cè)試人員,您一定聽說(shuō)過(guò)行為驅(qū)動(dòng)開發(fā)(Behavior Driven Development,BDD)。它能夠以一種透明的方式,向業(yè)務(wù)用戶描述驗(yàn)收測(cè)試。而JBehave正是一種通過(guò)Selenium WebDriver來(lái)針對(duì)BDD開展Java測(cè)試的框架。它可以讓新手輕松地理解BDD概念,進(jìn)而基于行為開展應(yīng)用測(cè)試。
安裝JBehave的先決條件
用戶使用JBehave的理想方法是與Eclipse相集成。因此,除了具有JDK1.7及更高版本,和Indigo以上的任意Eclipse IDE之外,您還需要配備如下jar文件:
- JUnit-4.1.0.jar
- Jbehave-core-3.8.jar
- Commons-lang-2.4.jar
- Paranamer-2.5.jar
- Freemarker-2.3.9.jar
- Org.apacje.commons.io.jar
- Org.apache.commons.collections.jar
- Plexus-utils-1.1.jar
JBehave的優(yōu)點(diǎn)和缺點(diǎn)
與所有其他BDD測(cè)試框架一樣,JBehave具有如下優(yōu)點(diǎn):
- 協(xié)調(diào)具有類似規(guī)范、卻身處不同項(xiàng)目的開發(fā)團(tuán)隊(duì),來(lái)實(shí)現(xiàn)行為驅(qū)動(dòng)式的開發(fā)。
- 根據(jù)類似的規(guī)范格式,讓項(xiàng)目經(jīng)理和利益相關(guān)者對(duì)開發(fā)團(tuán)隊(duì)和QA團(tuán)隊(duì)的輸出具有更清楚地了解。
- 由于JBehave具有更多值得用戶推理和思考的細(xì)節(jié),因此目標(biāo)產(chǎn)品會(huì)具有更好的規(guī)范性。
- 由于使用了半正式(semi-formal)語(yǔ)言、以及域詞匯表(domain vocabulary),因此JBehave有助于在團(tuán)隊(duì)結(jié)構(gòu)中保持一致性的行為。
JBehave同樣也有著其他BDD測(cè)試工具一樣的缺點(diǎn):
- 一款BDD測(cè)試工具的成功,主要取決于項(xiàng)目中不同成員,包括:利益相關(guān)者、開發(fā)人員和測(cè)試人員之間的溝通,以及組織的管理。反之,溝通的缺乏則可能會(huì)導(dǎo)致無(wú)法逾越的問(wèn)題、有缺陷的應(yīng)用、業(yè)務(wù)需求未被滿足、以及各方的互相推諉。
JBehave的特點(diǎn)與競(jìng)品比較
JBehave與下面將要提到的Serenity有著相同的工作方式。但是,如果您的目標(biāo)是使得自動(dòng)驗(yàn)收測(cè)試更為有效的話,那么將Serenity與JBehave相集成,則會(huì)獲得更好的測(cè)試體驗(yàn)。
3.Serenity
Serenity同樣是一種能被用于行為驅(qū)動(dòng)測(cè)試的開源庫(kù)。該框架可幫助您編寫出各種結(jié)構(gòu)良好、且易于維護(hù)的驗(yàn)收標(biāo)準(zhǔn)。它在一定程度上擴(kuò)展了JUnit和WebDriver的功能。
安裝Serenity的先決條件
由于該框架基于Java,因此您顯然需要具備Java、或其他任何面向?qū)ο缶幊陶Z(yǔ)言的知識(shí)與經(jīng)驗(yàn)。此外,您的電腦上還需要有:
- JDK 5或更高版本。
- Maven 3.0或更高版本。
- 由于Maven和Eclipse的組合更易于使用,因此作為IDE工具的Eclipse通常是所有開發(fā)人員首選的。
Serenity的優(yōu)點(diǎn)和缺點(diǎn)
針對(duì)行為驅(qū)動(dòng)測(cè)試,Serenity具有如下優(yōu)點(diǎn):
- 該框架能夠幫助測(cè)試人員創(chuàng)建各種REST服務(wù)的測(cè)試用例。
- 用戶不必花費(fèi)大量的時(shí)間,來(lái)維護(hù)或構(gòu)建自己的自動(dòng)化框架。
- 它能夠在定義、理解測(cè)試用例、以及實(shí)現(xiàn)方式建立平衡。
- 它可以與許多自動(dòng)化框架相集成,其中包括:Selenium、JBehave、基于Java的高級(jí)開發(fā)框架(如Spring)、甚至是JIRA之類的持續(xù)集成工具。
與JBehave類似,Serenity的唯一缺點(diǎn)便是:為了充分發(fā)揮其支持行為驅(qū)動(dòng)開發(fā)的完整功能,項(xiàng)目參與者需要保持彼此之間的溝通。
Serenity的特點(diǎn)與競(jìng)品比較
由于主要被用于報(bào)告驗(yàn)收的標(biāo)準(zhǔn),因此使用Serenity所寫出的報(bào)告,比JBehave等其他BDD框架具有更豐富信息量。同時(shí),它還可以幫助開發(fā)人員編寫出更高質(zhì)量的自動(dòng)化測(cè)試用例場(chǎng)景。另外,它能夠?yàn)镽estAssured和Selenium WebDriver提供支持,使得測(cè)試人員能夠更快、更簡(jiǎn)便地寫出基于驗(yàn)收測(cè)試標(biāo)準(zhǔn)的自動(dòng)化用例。
4.TestNG
也許是受到了JUnit的啟發(fā),由Cedric Beust創(chuàng)建的TestNG也是一種基于Java的開源自動(dòng)化測(cè)試框架,不過(guò)它更為強(qiáng)大。此處NG表示“下一代”,因此它能夠在集成的過(guò)程中采用更好的執(zhí)行方式。該框架可幫助開發(fā)人員實(shí)現(xiàn)排序、分組和參數(shù)化等功能,進(jìn)而在消除了以往框架各種缺點(diǎn)的基礎(chǔ)上,讓新的測(cè)試用例更具靈活性。
安裝TestNG的先決條件
- 在系統(tǒng)中已安裝了最新版本的JDK。
- 最新版本的Eclipse。
- 具備Java或其他任何面向?qū)ο缶幊陶Z(yǔ)言的知識(shí)和實(shí)踐經(jīng)驗(yàn)。
TestNG的優(yōu)點(diǎn)和缺點(diǎn)
在彌補(bǔ)過(guò)往框架諸多缺點(diǎn)的基礎(chǔ)上,TestNG還具備如下優(yōu)點(diǎn):
- 該框架能使用戶在多個(gè)代碼片段上運(yùn)行各種并行的測(cè)試。
- 在執(zhí)行用例測(cè)試的期間,您可以生成一份HTML報(bào)告。
- 可以根據(jù)優(yōu)先級(jí)對(duì)測(cè)試用例進(jìn)行分組和排列。該框架大幅簡(jiǎn)化了數(shù)據(jù)庫(kù)測(cè)試、前端測(cè)試等方面。
- 您可以對(duì)數(shù)據(jù)采取參數(shù)化、并使用注釋來(lái)輕松地設(shè)置優(yōu)先級(jí)。當(dāng)然,如果您的項(xiàng)目并不需要測(cè)試用例的優(yōu)先級(jí),則也沒必要用到TestNG。
它的唯一缺點(diǎn)是:
- 用戶需要一些時(shí)間來(lái)設(shè)置TestNG。
TestNG的特點(diǎn)與競(jìng)品比較
如前所述,TestNG雖然與JUnit有著相同的功能,但是它補(bǔ)足了JUnit的短板。在面對(duì)既有的依賴性,您卻無(wú)法控制先測(cè)試哪個(gè)的時(shí)候,TestNG允許您以任意順序運(yùn)行測(cè)試用例。此外,它還有助于實(shí)現(xiàn)參數(shù)化的測(cè)試。雖然JUnit 4.5已經(jīng)具備了此功能,但是TestNG的實(shí)現(xiàn)效率更高。因此,如果您的項(xiàng)目很復(fù)雜、并且需要執(zhí)行上百種測(cè)試用例的話,花點(diǎn)時(shí)間去設(shè)置TestNG是完全值得的。
如果您不太熟悉TestNG的話,請(qǐng)通過(guò)參考:https://www.lambdatest.com/blog/a-complete-guide-for-your-first-testng-automation-script/?utm_source=Dzone&utm_medium=blog&utm_campaign=SS-030419&utm_term=arnab。這是一份TestNG自動(dòng)化腳本的完整指南,您可以用在Selenium WebDriver上,進(jìn)行跨瀏覽器的Java自動(dòng)化測(cè)試。
5.Selenide
由Selenium提供的Selenide,可用作為Java應(yīng)用程序編寫穩(wěn)定、精確且具有友好UI的測(cè)試用例。如今,針對(duì)Ajax之類Web技術(shù)的測(cè)試工具日趨復(fù)雜,動(dòng)輒便會(huì)出現(xiàn)超時(shí)的問(wèn)題。而Selenide卻能夠以簡(jiǎn)單的方式處理該問(wèn)題。Selenide簡(jiǎn)單易學(xué),您無(wú)需搜索任何相關(guān)教程,只需專注于業(yè)務(wù)邏輯,便可通過(guò)幾行簡(jiǎn)單的代碼來(lái)搞定工作。
使用Selenide的先決條件
Selenide的安裝非常簡(jiǎn)單。如果您使用的是Maven,則只需要在pom.xml文件中添加如下代碼行:
- com.codeborne selenide 5.1.0 test
如果您使用的是Ivy,請(qǐng)?jiān)趇vy.xml文件中添加如下代碼行:
Selenide的優(yōu)點(diǎn)和缺點(diǎn)
在測(cè)試人員處理那些由Java編寫的前端應(yīng)用時(shí),往往會(huì)碰到超時(shí)的問(wèn)題。也許您當(dāng)前編寫的測(cè)試用例尚能正常工作。而幾天之后,隨著某些Ajax請(qǐng)求的增多,相應(yīng)的JavaScript的運(yùn)行則可能會(huì)慢下來(lái)。此外,如果您的系統(tǒng)還同時(shí)運(yùn)行著另一個(gè)進(jìn)程的話,這些都會(huì)導(dǎo)致測(cè)試用例的失敗。您與其花上幾天時(shí)間去尋找問(wèn)題的根源,不如讓Selenide從如下方面幫助您:
- 簡(jiǎn)潔的測(cè)試用例編寫過(guò)程,消除了超時(shí)的問(wèn)題。
- 能夠測(cè)試由AngularJS所開發(fā)的應(yīng)用程序。
- 減少了各種傳統(tǒng)Selenium工具中的大量命令。
目前,我們尚未發(fā)現(xiàn)Selenide的明顯缺點(diǎn)。
Selenide的特點(diǎn)與競(jìng)品比較
WebDriver雖然是UI測(cè)試的流行工具,但是它無(wú)法解決由Ajax超時(shí)、JavaScript運(yùn)行緩慢、以及加載動(dòng)態(tài)內(nèi)容耗時(shí)等一系列問(wèn)題。過(guò)去,我們?cè)跍y(cè)試用例中使用的是“wait_until”或“sleep”方法。如今有了Selenide,我們只要關(guān)注業(yè)務(wù)邏輯便可??梢哉f(shuō),就UI測(cè)試而言,除了Selenium WebDriver(Selenide的父框架),沒有比它更好的Java框架了。
如果您選定了Selenide作為自動(dòng)化Java測(cè)試框架,請(qǐng)參考:https://www.lambdatest.com/blog/selenium-testing-with-selenide-using-intellij-maven/?utm_source=Dzone&utm_medium=blog&utm_campaign=SS-030419&utm_term=arnab。該指南能夠幫助您使用Selenide、IntelliJ和Maven來(lái)進(jìn)行Selenium的自動(dòng)化測(cè)試。
總結(jié)
如今的敏捷(Agile)時(shí)代,開發(fā)人員時(shí)常需要參與到測(cè)試環(huán)節(jié)中。能夠了解測(cè)試的重要性,往往是Java專業(yè)開發(fā)人員與業(yè)余愛好者之間的區(qū)別。雖然您沒有必要一定成為該領(lǐng)域的專家,但是您至少應(yīng)當(dāng)懂得,如何編寫可自動(dòng)化驗(yàn)證代碼的測(cè)試用例。希望上述介紹與比較的五種自動(dòng)化測(cè)試框架與工具,能夠在UI測(cè)試、單元測(cè)試、以及針對(duì)應(yīng)用程序的BDD測(cè)試中給您提供幫助。
原文標(biāo)題:Top 5 Java Test Frameworks for Automation in 2019,作者:Arnab Roy
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】