如何利用F#庫(kù)canopy進(jìn)行UI測(cè)試

這篇文章將為大家詳細(xì)講解有關(guān)如何利用F#庫(kù)canopy進(jìn)行UI測(cè)試,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)為企業(yè)級(jí)客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、app軟件定制開(kāi)發(fā)、小程序定制開(kāi)發(fā)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營(yíng)銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來(lái)大量新的創(chuàng)意。 

InfoQ:你能否為我們介紹一下canopy?

Chris Holt:canopy是基于Selenium之上,以F#實(shí)現(xiàn)的一層功能,它的目標(biāo)是使UI測(cè)試的行為符合使用者的預(yù)期。Selenium雖然表現(xiàn)很出色,但有時(shí)會(huì)顯得過(guò)于刻板。在canopy中,所有行為不再會(huì)因?yàn)闊o(wú)法點(diǎn)擊某個(gè)元素而立即報(bào)錯(cuò),而是不斷地嘗試點(diǎn)擊某個(gè)元素,直至一段合理的時(shí)間后仍無(wú)法點(diǎn)擊才會(huì)報(bào)錯(cuò)。這將幫助你創(chuàng)建更可靠的測(cè)試,而不是往往只在第一次嘗試時(shí)成功的測(cè)試。

InfoQ:canopy如何簡(jiǎn)化通過(guò)Selenium進(jìn)行UI測(cè)試的過(guò)程?

CH:canopy內(nèi)置了重試功能,包括元素的獲取以及用戶在屏幕上的行為,也包括驗(yàn)證功能。此外,canopy還可以通過(guò)實(shí)用的錯(cuò)誤信息幫助用戶修復(fù)一些常見(jiàn)的問(wèn)題,例如某個(gè)選擇器的拼寫錯(cuò)誤。它還支持以多種方式選擇元素,并且易于對(duì)這些功能進(jìn)行擴(kuò)展。

舉例來(lái)說(shuō),如果用戶的屏幕上有一個(gè)顯示“Save”文字的按鈕,那么只需要在代碼中寫為click "Save",就可以實(shí)現(xiàn)單擊的目的。而在常規(guī)的Selenium代碼中,用戶必須在ByText、ById、ByCSS、ByXPath等方法中進(jìn)行選擇。如果要擴(kuò)展這一功能,只需為用戶網(wǎng)頁(yè)的慣用方式添加對(duì)應(yīng)的finder實(shí)現(xiàn),例如在表單數(shù)據(jù)中的placeholder值,或是為了表示元數(shù)據(jù)而人為定義的data-*標(biāo)簽。

canopy還提供了一套簡(jiǎn)明的API,讓用戶更方便地閱讀與編寫測(cè)試。它還能夠克服html中的各種區(qū)別。比方說(shuō),每種輸入類型在html中都有著不同的表現(xiàn)方式,因此通過(guò)原始的Selenium操作他們的方式也是不同的。而在canopy中,操作方式都是相同的。舉例來(lái)說(shuō):

// Assign a value to a textbox or dropdown
"#state" << "New York"

InfoQ:canopy是否支持與外部自動(dòng)化服務(wù)的集成,例如Browserstack?

CH:是的,只要是Selenium支持的功能,canopy也同樣支持。為了支持Browserstack,用戶需要使用RemoteWebdriver。由于canopy本身內(nèi)置了大量的重試功能,因此交互的次數(shù)將有所增加。不過(guò),因?yàn)橛脩舨槐亟?jīng)常調(diào)用Sleep,因此這種增加的交互是可以接受的。canopy還提供了大量可選的優(yōu)化方式,如果你打算具體地表述選擇器的類型,而不是讓canopy分析你的選擇器類型,就可以應(yīng)用這些優(yōu)化。

InfoQ:在頁(yè)面中選擇元素有沒(méi)有推薦的做法?比方說(shuō),通過(guò)id選擇元素是否會(huì)為測(cè)試帶來(lái)更好的可維護(hù)性與健壯性?

CH:在UI自動(dòng)化中所用到的多數(shù)“技巧”都與選擇元素相關(guān)。至于是應(yīng)該使用整潔的選擇器,還是必須要在標(biāo)簽中加入class或id等屬性,這兩者之間需要找到一個(gè)平衡點(diǎn)。我認(rèn)為,CSS與JQuery選擇器的語(yǔ)法是最優(yōu)秀的,用戶可以在80-90%的場(chǎng)景中使用這種方式。而在其余10%-20%的場(chǎng)景中可以使用XPath。在進(jìn)行準(zhǔn)確的文字匹配或是找到某個(gè)元素的父元素時(shí)需要用到XPath。而通過(guò)值或內(nèi)部文字進(jìn)行查找也是非常方便的做法,假如上文所述的click "Save"這個(gè)示例,它的內(nèi)部實(shí)現(xiàn)就用到了XPath。

經(jīng)過(guò)一段時(shí)間的實(shí)踐之后,用戶就可以熟練地掌握創(chuàng)建選擇器的方法了,工建議用戶通過(guò)實(shí)踐進(jìn)行學(xué)習(xí),而不是通過(guò)某種工具去生成選擇器。這種方式更準(zhǔn)確,并且當(dāng)頁(yè)面結(jié)構(gòu)發(fā)生變化而影響了用戶的測(cè)試時(shí),它也更容易進(jìn)行修正。一旦用戶對(duì)于選擇器有了一定的心得體會(huì)之后,用戶就會(huì)懂得如何讓html代碼更易于維護(hù),從而簡(jiǎn)化了選擇器的創(chuàng)建。

選擇器的編寫可以通過(guò)某些方式讓人更易于理解,例如#header .links這個(gè)選擇器就表示在頁(yè)面的header這個(gè)div中所有的links元素。而在自動(dòng)生成的XPath中,它或許會(huì)變成html/body/div/div/div[2]/ul/li/a這種形式,這對(duì)于理解它的意義毫無(wú)幫助。而且如果一旦在這條選擇鏈中多加了或是刪除了某個(gè)div,就會(huì)使選擇器無(wú)法工作。通過(guò)CSS方式編寫的選擇器“永遠(yuǎn)”都是有效的,除非有人改動(dòng)了header這個(gè)id,或者刪除/改變了links這個(gè)class。

InfoQ:用戶是否可以自定義錯(cuò)誤報(bào)告?比方說(shuō),我們是否能夠在測(cè)試失敗時(shí)自動(dòng)截屏呢?

CH:canopy目前內(nèi)置了3種reporter實(shí)現(xiàn),即ConsoleReporter、TeamCityReporter和HtmlReporter。如果用戶需要新增一個(gè)自定義的功能,只需簡(jiǎn)單地實(shí)現(xiàn)IReporter這個(gè)接口就行了。

InfoQ:有哪些方法能夠擴(kuò)展canopy的功能?

1)通過(guò)實(shí)現(xiàn)IReporter接口,自定義測(cè)試結(jié)果的輸出。

2) 在canopy所使用的finder集合中添加新的通用finder實(shí)現(xiàn),以幫助用戶找到頁(yè)面元素。

3) 為用戶常用的action添加新的函數(shù)。由于F#會(huì)運(yùn)行某個(gè)函數(shù)最新定義的版本,因此用戶還能夠“重寫”現(xiàn)有的函數(shù),以滿足自身的需求。

比方說(shuō),用戶可以實(shí)現(xiàn)自定義的“click”功能,只需創(chuàng)建一個(gè)模塊,例如“canopyExtensions”,并在“打開(kāi)canopy”操作后“打開(kāi)”這一模塊,將所有擴(kuò)展方法與重寫的方法定義在其中。這樣一來(lái),所有測(cè)試都會(huì)調(diào)用由用戶所定義的功能,而無(wú)需改動(dòng)任何現(xiàn)有的功能。

這個(gè)示例表現(xiàn)的是某人希望能夠在多選框中實(shí)現(xiàn)對(duì)元素的Ctrl+Click操作。由于canopy本身不具備這一特性,因此作者編寫了一段擴(kuò)展方法。

4) canopy并沒(méi)有隱藏任何Selenium中的特性,或是對(duì)其進(jìn)行抽象化。它只是使用了IWebDriver與IWebElement接口。用戶在Stack      
overflow網(wǎng)站上看到的各種問(wèn)題與回復(fù)對(duì)canopy都是100%有效的。用戶所要做的唯一一件事就是將代碼轉(zhuǎn)換為F#。

InfoQ:在持續(xù)集成(CI)服務(wù)器上運(yùn)行canopy測(cè)試需要經(jīng)過(guò)哪些步驟?

CH:測(cè)試的運(yùn)行方式是執(zhí)行由構(gòu)建過(guò)程所生成的控制臺(tái)應(yīng)用。測(cè)試結(jié)果支持不同的輸出格式。支持TeamCity的配置過(guò)程只需一行代碼:

reporter <- new TeamCityReporter() :> IReporter
 

我個(gè)人會(huì)選擇使用一些簡(jiǎn)單的任務(wù)來(lái)實(shí)現(xiàn)整個(gè)構(gòu)建過(guò)程,因此我在TeamCity中創(chuàng)建的任務(wù)都是很簡(jiǎn)單的,例如從源代碼控制系統(tǒng)中獲取最新代碼,隨后通過(guò)一個(gè)命令行語(yǔ)句啟動(dòng)我的任務(wù),并完成其余工作。

在Jenkins環(huán)境中,我會(huì)選用HtmlReporter,通過(guò)一個(gè)Jenkins的插件生成html文檔,并保存到整個(gè)任務(wù)的結(jié)果中。這同樣也可以通過(guò)簡(jiǎn)短的幾行代碼完成設(shè)置工作。

關(guān)于“如何利用F#庫(kù)canopy進(jìn)行UI測(cè)試”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

分享名稱:如何利用F#庫(kù)canopy進(jìn)行UI測(cè)試
本文網(wǎng)址:http://muchs.cn/article14/iioode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、手機(jī)網(wǎng)站建設(shè)域名注冊(cè)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站