想不想用一個(gè)代碼來解放雙手(Python自動(dòng)化)selenium

下午好啊
又到了見面的時(shí)候啦
土豆本期來跟大家分享一個(gè)關(guān)于解放雙手的
python的自動(dòng)化
有沒有很期待
Selenium


Selenium是ThoughtWorks員工在業(yè)余時(shí)間開發(fā)并維護(hù)的開源項(xiàng)目,并且在ThoughtWorks的項(xiàng)目中被廣泛應(yīng)用。簡(jiǎn)單地說,Selenium是一個(gè)自動(dòng)化的web應(yīng)用功能測(cè)試工具。
我們稍微八卦一下,Selenium有趣的是它名字的來歷:在Selenium出現(xiàn)之前,當(dāng)時(shí)最著名的web應(yīng)用功能測(cè)試工具M(jìn)ercury Quanlity Center,但那是一個(gè)商業(yè)工具,功能強(qiáng)大卻也價(jià)格不菲,常常讓開發(fā)者們又愛又恨。所以,自己動(dòng)手開發(fā)開源功能測(cè)試工具的ThoughtWorker們把這個(gè)工具叫做Selenium——“mercury”有“水銀”的意思
而“selenium”(硒元素)恰好是專解汞中毒的特效藥。



Selenium分為Core與RC(Remote Control)兩個(gè)部分,其中Core是基礎(chǔ)的,直接在HTML Table里編寫測(cè)試代碼的模塊,而Remote Control則支持用Java等語言編寫測(cè)試用例。
最近,Selenium又推出了新的Remote Grid, 支持多任務(wù)并發(fā),可以看成是多個(gè)RC的集合。同時(shí),Selenium也提供了一個(gè)腳本錄制器Selenium-IDE,該錄制器是一個(gè)基于Firefox的插件。而無論Core模式,還是RC模式,其最終都是通過Java Script來實(shí)現(xiàn)對(duì)頁(yè)面元素的控制,它提供了豐富的指定Html頁(yè)面元素和操作頁(yè)面元素的方法。
Selenium Core/Selenium IDE
Selenium Core是Selenium的核心部分,它由一些純js代碼組成, 可以運(yùn)行在windows/linux的不同browser上, 而IDE是在core的基礎(chǔ)上的一種應(yīng)用, 通過UI實(shí)現(xiàn)類似QTP/Winner的腳本錄制回放功能。


1. Selenium IDE 運(yùn)行
利用IDE插件加載core引擎,運(yùn)行測(cè)試腳本。主要用于腳本錄制調(diào)試,類似于開發(fā)工具的調(diào)試,一般不應(yīng)用于測(cè)試。
2. 部署于被測(cè)對(duì)象服務(wù)器上,以http方式運(yùn)行
將core核心引擎和測(cè)試代碼部署與被測(cè)對(duì)象的Web服務(wù)器上,以http請(qǐng)求的方式運(yùn)行。
3. 本地模式HTA and Chrome
HTA模式是在IE下運(yùn)行,Chrome是在Firefox下運(yùn)行。這個(gè)兩個(gè)的原理都是利用瀏覽器的本地化模式,調(diào)用主html文件--Test Runner 加載核心引擎庫(kù),執(zhí)行test suite里的測(cè)試用例。


selenium-api.js :Selenium的主API庫(kù)
selenium-browserbot.js :Selenium的主函數(shù)庫(kù),命令的具體方法都在該庫(kù)中。
selenium-browserdetect.js : 瀏覽器版本檢測(cè)庫(kù)
selenium-logging.js : 記錄日志庫(kù)
user-extensions.js : 用來擴(kuò)展selenium的文件;
用戶自己編寫的函數(shù)和擴(kuò)展的命令都應(yīng)該放在這個(gè)文件中。當(dāng)然,你也可以放在其他地方。
xmlextras.js : 第三方JavaScript庫(kù)。主要用于DHTML及XML的解析。


Selenium IDE是通過監(jiān)聽用戶對(duì)html頁(yè)面的操作來錄制腳本的,是真正能夠監(jiān)聽用戶對(duì)html頁(yè)面的操作的錄制工具。Selenium IDE可以生成7種語言的腳本:
html,java,C#,ruby,python,perl,php。
你可以直接在FireFox中將Selenium IDE打開,執(zhí)行html格式的腳本。
如果你要執(zhí)行其他語言格式的Selenium腳本,那么,你需要使用Selenium服務(wù)器,使用RC模式。6種語言的使用方法都是一樣的。


Selenium RC模式,是客戶端利用各種編程語言,通過網(wǎng)絡(luò)向Selenium Server發(fā)送指令,Selenium Server接收到測(cè)試指令后,啟動(dòng)瀏覽器并向其發(fā)出JavaScript調(diào)用實(shí)現(xiàn)對(duì)Html頁(yè)面的全面追蹤,并通過網(wǎng)絡(luò)把執(zhí)行結(jié)果返回給調(diào)用者。
Selenium Server的實(shí)現(xiàn)原理是其打開瀏覽器時(shí),把自己的JavaScript文件嵌入網(wǎng)頁(yè)中。然后Selenium的網(wǎng)頁(yè)通過frame嵌入目標(biāo)網(wǎng)頁(yè)。這樣,就可以使用Selenium的JavaScript對(duì)象來控制目標(biāo)網(wǎng)頁(yè)。
Selenium客戶端一般使用單元測(cè)試技術(shù)實(shí)現(xiàn),通過判斷返回的結(jié)果與預(yù)期是否一致來決定程序是否運(yùn)行正確。


Selenium Grid是在Selenium RC的基礎(chǔ)上,為了解決RC模式不能并發(fā)調(diào)用的問題而推出的一種解決方案。可以實(shí)現(xiàn)多環(huán)境,同時(shí)測(cè)試的需求。其具體原理如下:
客戶端利用各種編程語言,并發(fā)的方式,通過網(wǎng)絡(luò)向Selenium Grid發(fā)送指令,Selenium Grid接收到測(cè)試指令后,根據(jù)不同的并發(fā)指令,啟動(dòng)對(duì)應(yīng)多個(gè)的Selenium Server。然后Grid把指令發(fā)送給對(duì)應(yīng)Server,每個(gè)Server的處理原理與RC相同。
由上面原理,可以看出,Grid 只是提供運(yùn)行腳本的環(huán)境,無法決定腳本以什么樣的形式去跑(并行的方式,或者多環(huán)境的方式)。腳本以什么樣的形式跑,由腳本本身和腳本的runner (一般用junit或者TestNG)的配置所決定.


操作(action)和斷言(assertion)
操作(action):操作模擬用戶與Web應(yīng)用程序的交互。例如,單擊一個(gè)按鈕和填寫一個(gè)表單,這些都是常見的用戶操作,可以用Selenium命令來自動(dòng)化這些操作。
斷言(assertion):斷言驗(yàn)證一個(gè)命令的預(yù)期結(jié)果。常見的斷言包括驗(yàn)證頁(yè)面內(nèi)容或當(dāng)前位置是否正確。在Selenium網(wǎng)站上可以找到可用命令的完整列表。通過Selenium命令,腳本編寫者可以描述browser bot在瀏覽器中所執(zhí)行的操作
Test Suite和Test Case:
Test Suite: 一組測(cè)試的集合,在實(shí)際中往往一個(gè)模塊對(duì)應(yīng)一個(gè)Test Suite,在Seleium中顯示在左上角。
Test Case:一個(gè)測(cè)試用例,包含多個(gè)action 或者斷言。

好啦,本期的內(nèi)容就先到這里啦
我們下期再見

Python日志
一個(gè)正經(jīng)搞知識(shí)的公眾號(hào)
部分內(nèi)容來自網(wǎng)絡(luò)
