于Python 的 Web 自動(dòng)化測(cè)試的實(shí)踐)
Web 測(cè)試是軟件測(cè)試?yán)锩嫦鄬?duì)比較重要的一部分, 如果想要實(shí)現(xiàn) Web 自動(dòng)化測(cè)試, 那就必須要求測(cè)試人員具備精通自動(dòng)化測(cè)試工具以及編程語言的能力。接下來需要對(duì)免費(fèi)且開源的 Web 測(cè)試工具做一個(gè)介紹, 同時(shí)也要介紹一下目前流行的編程語言相關(guān)的內(nèi)容, 重點(diǎn)在于圍繞自動(dòng)化測(cè)試的基本原理, 詳細(xì)闡述頁(yè)面元素的常見定位方式, 以及如何具體對(duì)頁(yè)面元素執(zhí)行操作這兩個(gè)方面的內(nèi)容。結(jié)合實(shí)際工作的具體情況, 對(duì)自動(dòng)化測(cè)試的基本流程展開深入分析, 其基本流程具體涵蓋以下步驟: 首先是分析測(cè)試需求, 其次是編寫測(cè)試用例, 接著是搭建測(cè)試環(huán)境, 然后是創(chuàng)建測(cè)試腳本, 隨后是執(zhí)行測(cè)試, 最后一步是對(duì)測(cè)試結(jié)果進(jìn)行分析。在完成任務(wù)之后, 還對(duì)自動(dòng)化測(cè)試的實(shí)際開展情況進(jìn)行全面總結(jié)并進(jìn)行展望, 從而為在后續(xù)時(shí)間里更加順利、有效地開展測(cè)試相關(guān)工作打下堅(jiān)實(shí)基礎(chǔ)。自動(dòng)化測(cè)試這一步驟和手工測(cè)試的情況是有相似之處。它同樣需要提前去制定好測(cè)試計(jì)劃, 接著要根據(jù)軟件的需求規(guī)格說明書來分析清楚具體的測(cè)試需求。在方法的選擇上, 可以運(yùn)用黑盒或者白盒這些方式來設(shè)計(jì)對(duì)應(yīng)的測(cè)試用例。當(dāng)把測(cè)試環(huán)境搭建到位之后, 就需要使用相關(guān)的編程語言來編寫用于自動(dòng)化的腳本程序。后續(xù)需要執(zhí)行這些測(cè)試操作, 并且對(duì)發(fā)現(xiàn)的缺陷情況等進(jìn)行記錄。另外還需要特別注意一點(diǎn), 就是在正式去執(zhí)行自動(dòng)化腳本之前, 必須先把手工測(cè)試做完, 這樣做是為了打下更扎實(shí)的基礎(chǔ), 從而能夠更好發(fā)現(xiàn)其中存在的缺陷問題。關(guān)于自動(dòng)化測(cè)試技術(shù), 其中涉及的第一項(xiàng)內(nèi)容為第一小節(jié), 具體名稱是測(cè)試工具。鑒于被測(cè)軟件在類型方面的不同, 我們可以據(jù)此選擇相適應(yīng)的測(cè)試工具。當(dāng)我們?cè)诿鎸?duì)桌面應(yīng)用程序的時(shí)候, 市場(chǎng)上那些主流的測(cè)試工具包括有utf還有auto等而要是說我們測(cè)試的對(duì)象是web系統(tǒng), 那么這里提到的這種工具就變成了一種非常適合的優(yōu)良選擇。是一款免費(fèi)、開源的分布式的自動(dòng)化測(cè)試工具對(duì)商業(yè)用戶也沒有任何限制支持多種平臺(tái)可以在 、Linux、Mac 和 等多種操作系統(tǒng)上運(yùn)行支持多種瀏覽器包括 IE、、、Opera、 等使用方便支持腳本錄制可以將測(cè)試用例分布到不同的測(cè)試機(jī)器上執(zhí)行支持多種語言包括C、Java、Ruby、、C#等。1.語言它是一門優(yōu)雅的語言, 同時(shí)也是健壯的語言。它繼承了傳統(tǒng)編譯語言的強(qiáng)大性。它繼承了傳統(tǒng)編譯語言的通用性。它還借鑒了簡(jiǎn)單腳本的易用性。它還借鑒了解釋語言的高效。它的代碼非常簡(jiǎn)潔。它的代碼體積很小。它是開源的。它能跨平臺(tái)運(yùn)行。它是面向?qū)ο蟮摹K哂辛己玫臄U(kuò)展性。正因?yàn)檫@些優(yōu)點(diǎn)。它被應(yīng)用到數(shù)據(jù)分析領(lǐng)域。它被應(yīng)用到數(shù)據(jù)處理領(lǐng)域。它被應(yīng)用于網(wǎng)絡(luò)爬蟲開發(fā)。它被用于Web應(yīng)用開發(fā)。它被人工智能所采用。自動(dòng)化測(cè)試中也能看到它的身影。在自動(dòng)化測(cè)試領(lǐng)域, 你可以用那個(gè)標(biāo)準(zhǔn)庫(kù)來搞自動(dòng)化測(cè)試框架, 也可以拿像 Robot 這種別的工具來干活。這玩意兒擴(kuò)展得很強(qiáng), 它支持關(guān)鍵字驅(qū)動(dòng)的辦法, 不管是測(cè)各種客戶端還是接口, 它都能一邊搞定, 還能搞分布式測(cè)試執(zhí)行那塊兒的事。2 網(wǎng)頁(yè)元素定位自動(dòng)化功能測(cè)試這個(gè)工具能夠模擬人類去操作網(wǎng)頁(yè), 所以想要實(shí)現(xiàn)對(duì)頁(yè)面上那些元素的動(dòng)作, 就必須準(zhǔn)確地找到這些頁(yè)面元素在哪里。通常我們用來定位Web頁(yè)面元素的屬性有好多種, 其中包括id、name、class name、link text、XPath以及CSS等等。接下來我們將著重介紹其中最為常用的四種方法。2.我們是通過id屬性來進(jìn)行定位操作的。要是那個(gè) Web 頁(yè)面上的 id 不是動(dòng)態(tài)生成的, 那么在一個(gè)頁(yè)面里, 這個(gè) id 值就是唯一的一個(gè)了。這個(gè)方法, 它是通過去找那個(gè) Web 頁(yè)面上的元素 id 的值, 來把那一個(gè)元素給抓出來的??墒? 如果遇到了那些 Web 元素的 id 是被動(dòng)態(tài)分配的情況, 這種方法就派不上用場(chǎng)了, 不能用。比如說, 百度首頁(yè)搜索欄的代碼樣子就是這樣子的:通過仔細(xì)觀察, 可以很輕易地發(fā)現(xiàn)它的 id 屬性是“kw”, 那么我們就可以使用這個(gè) id 來進(jìn)行元素定位。這表示我們正在創(chuàng)建的那個(gè)對(duì)象, 具體的代碼形式如下:等于是用括號(hào)把“kw”括起來。2.第2步利用link text這個(gè)屬性來進(jìn)行定位。當(dāng)人們?cè)L問網(wǎng)頁(yè)時(shí), 我們能夠通過超鏈接的方式, 把頁(yè)面鏈接到下層的網(wǎng)頁(yè)或者是其他網(wǎng)站。我們可以通過查找網(wǎng)頁(yè)里的那個(gè) link text 屬性, 然后模擬對(duì)鏈接文本的單擊操作, 這樣就能實(shí)現(xiàn)自動(dòng)地訪問。這種定位方法僅僅只適用于文本鏈接的場(chǎng)景, 它通過元素標(biāo)簽所對(duì)應(yīng)的文本信息, 來找到并定位那個(gè)元素。跟其他的元素定位方法相比之下, 它的適用的場(chǎng)景是比較有限的。比如說百度首頁(yè)上面關(guān)于 “新聞” 這個(gè)文字, 它所對(duì)應(yīng)的 link text 屬性的值就是 “新聞”, 這樣的話, 你就可以用這個(gè)屬性來對(duì)元素進(jìn)行定位了。代碼為 ._text新聞2.方法三是通過使用XPath屬性來進(jìn)行定位操作。XPath這個(gè)詞, 它是英文里面那個(gè)XML Path的縮寫形式, 意思就是說, 它是一種專門用來定位XML文檔路徑的語言。XPath這個(gè)東西, 它是在基于XML的那種樹狀的結(jié)構(gòu)上面去進(jìn)行信息的查找工作的, 它會(huì)使用那些路徑表達(dá)式來去把XML文檔里面的某個(gè)節(jié)點(diǎn)或者是一組節(jié)點(diǎn)給定位住。你要是去把這個(gè)從最上面那一個(gè)根節(jié)點(diǎn)一直到它那個(gè)目標(biāo)節(jié)點(diǎn)一路上面經(jīng)過的所有節(jié)點(diǎn)的都記錄下來的信息弄好了, 那么就能夠形成那只有唯一的一條能夠到達(dá)當(dāng)前這個(gè)目標(biāo)節(jié)點(diǎn)的路徑表達(dá)式了。咱們可以把這種強(qiáng)大的語言用在Web頁(yè)面元素的定位上, 定位的方式一般有兩種, 分別是絕對(duì)路徑和相對(duì)路徑, 具體情況如下。1絕對(duì)路徑絕對(duì)路徑表達(dá)式是以那個(gè)斜杠開頭的, 它會(huì)從整個(gè)結(jié)構(gòu)最上面的根節(jié)點(diǎn)開始往下走, 一直延伸到你想要找的那個(gè)目標(biāo)節(jié)點(diǎn)才停下來。當(dāng)你要找的元素的層級(jí)很深, 嵌套得很多很多的階段時(shí)候, 這個(gè)絕對(duì)路徑表達(dá)式的長(zhǎng)度就會(huì)被拉得特別長(zhǎng), 看起來會(huì)不太舒服, 也就很難一眼就看懂它的意思。這種情況不僅會(huì)讓你去尋找東西的時(shí)候速度變慢, 效率降低, 而且到了后來對(duì)這部分內(nèi)容進(jìn)行維護(hù)和修改的階段也會(huì)變得非常困難, 很不容易打理清楚。所以基于以上這些原因, 通常都不太建議大家在實(shí)際的操作過程中去使用這種方式。2相對(duì)路徑相對(duì)路徑表達(dá)式是以雙斜杠“//”開頭的, 這種表達(dá)式是從某個(gè)特定的節(jié)點(diǎn)開始出發(fā), 然后接著沿著樹形的結(jié)構(gòu)一直往下走, 直到抵達(dá)目標(biāo)節(jié)點(diǎn)的位置才停止。當(dāng)前大多數(shù)主流的瀏覽器, 比如谷歌瀏覽器以及火狐瀏覽器等都準(zhǔn)備了 XPath 的專用工具, 這些工具可以幫助人們非常輕松地獲取到所需要的 XPath 路徑信息。比如, 你要是想知道百度搜索框的 XPath 屬性是什么, 那你可以先定位到這個(gè)元素, 然后右鍵點(diǎn)擊它, 在出現(xiàn)的快捷菜單里面找到“Copy”, 再點(diǎn)擊下面的“Copy XPath”選項(xiàng), 這樣就可以把 XPath 復(fù)制下來了, 這個(gè)屬性的值寫的是“//*”。在這里面, “//”這兩個(gè)符號(hào)的意思是說在當(dāng)前頁(yè)面的某個(gè)目錄下找東西, “*”這個(gè)星號(hào)是通配符, 意思是說要匹配任意類型的節(jié)點(diǎn), 而“”這部分的意思則是說最后要匹配到的那個(gè)元素的 id 屬性值得等于 kw。2.N通過CSS屬性來把位置固定住, 從而實(shí)現(xiàn)那個(gè)定位效果。層疊樣式表 CSS 是英文 Style 的簡(jiǎn)稱, 它是一種用于表現(xiàn) HTML 或 XML 等文件樣式的計(jì)算機(jī)語言。同時(shí), 你也可以通過使用瀏覽器工具來查詢相關(guān)元素的CSS, 借此實(shí)現(xiàn)元素定位。比如說, 你能夠先定位到百度搜索框這個(gè)元素, 然后去查看它對(duì)應(yīng)的 HTML 代碼, 再通過快捷菜單里的“Copy - Copy”這個(gè)選項(xiàng)來獲取該元素的 CSS 屬性。這時(shí), 你會(huì)看到它的屬性值就是#kw。接下來, 相關(guān)的代碼就可以按照下面的方式來進(jìn)行編寫:通過選取元素#kw來進(jìn)行操作。第三步就是把用戶進(jìn)行的操作給拿過來, 然后再對(duì)這些動(dòng)作進(jìn)行處理。庫(kù)中有一個(gè)API, 它可以使用IE等瀏覽器來進(jìn)行Web測(cè)試, 這個(gè)測(cè)試模擬了用戶打開瀏覽器的行為, 并且支持在頁(yè)面上單擊鼠標(biāo), 讓鼠標(biāo)在某個(gè)元素上懸停, 以及進(jìn)行鍵盤的各項(xiàng)操作, 測(cè)試的過程是通過模擬用戶在前端發(fā)出的鍵盤和鼠標(biāo)操作, 來觸發(fā)前端頁(yè)面的事件, 然后再解析網(wǎng)頁(yè)文檔以獲取相應(yīng)的結(jié)果, 并最后進(jìn)行驗(yàn)證。3.1鼠標(biāo)事件鼠標(biāo)操作除了我們比較熟悉的單擊操作外還包括右擊、雙擊、懸停和拖動(dòng)等。在 中將這些關(guān)于鼠標(biāo)操作的方法封裝在 類提供。例如鼠標(biāo)懸停的代碼為# 引入類from mon. ?# 定位元素并懸停上面的內(nèi)容等于那個(gè)帶有文庫(kù)字樣的文本元素。這是一個(gè)屬于上方位置的空白部分。3.2鍵盤操作Keys 類為所有的鍵盤提供了操作方法, 該類既可以用來模擬鍵盤輸入, 也可以用來模擬鍵盤按鍵操作, 其中也包括組合鍵的按下行為, 比如 CtrlN 這個(gè)組合。我們要執(zhí)行模擬用戶百度搜索框中輸入搜索關(guān)鍵字的動(dòng)作。就是, 它的代碼為:# 引入 Keys 類從mon。keys 中獲取 Keys。模擬輸入框, 將內(nèi)容輸入到里面。.kw.3.3元素等待因?yàn)樽詣?dòng)化進(jìn)行測(cè)試操作的速度比人去操作要快出好多, 另外現(xiàn)在網(wǎng)頁(yè)當(dāng)中普遍都在使用 AJAX 這種技術(shù), 所以頁(yè)面里面的各種元素有可能不會(huì)在同一時(shí)刻被加載出來, 這樣一來就必須要設(shè)置合適的等待時(shí)間, 這樣才能確保那些元素能夠被正確地識(shí)別出來, 在這件事務(wù)里面總共有兩種類型的等待方法, 一個(gè)叫顯式等待, 另一個(gè)叫隱式等待。3.4多窗口切換如果在操作的過程中, 一旦單擊了某些鏈接, 導(dǎo)致彈出了新的窗口, 那么就需要利用 .這種方法進(jìn)行切換。通過這樣的切換操作, 就可以確保后續(xù)的一系列相關(guān)工作能夠順順利利地開展, 不會(huì)出現(xiàn)中斷或者其他意外阻礙的情況, 從而讓整個(gè)操作的流程保持在正常且連貫的狀態(tài)中。3.5警告框處理除了能夠處理由其他元素彈出的對(duì)話框之外, 我們還可以通過特定的方式來應(yīng)對(duì)警告框。具體而言, 應(yīng)當(dāng)使用這一工具來完成對(duì)警告框的定位工作。在完成定位之后便可以采用相關(guān)的命令去執(zhí)行一系列操作動(dòng)作了。在此過程中可用到的技術(shù)手段涵蓋但不限于以下幾種情形:返回出現(xiàn)在警告框里面的那些文字信息。接受當(dāng)前警告框解散當(dāng)前警告框?qū)⑽谋緝?nèi)容輸送到當(dāng)前顯示的那個(gè)警告對(duì)話框里。關(guān)于第4點(diǎn), 我們開展了自動(dòng)化測(cè)試方面的實(shí)踐。自動(dòng)化測(cè)試這個(gè)過程, 簡(jiǎn)單來說可以分成好幾個(gè)階段。首先是得把測(cè)試需求給分析清楚, 接著是編寫測(cè)試用例, 然后需要搭建好測(cè)試環(huán)境, 之后就是創(chuàng)建測(cè)試腳本, 隨后再執(zhí)行相關(guān)測(cè)試, 最后要對(duì)測(cè)試結(jié)果做分析處理, 大致流程就是這樣子。4.針對(duì)1進(jìn)行詳細(xì)的分析, 以明確具體的測(cè)試需求是什么。不管是采用人工去執(zhí)行測(cè)試任務(wù), 還是借助工具來實(shí)現(xiàn)自動(dòng)化測(cè)試這種模式, 在咱們正式展開測(cè)試工作之前的首要前提條件之一, 就是必須要弄清楚測(cè)試需求到底是什么, 然后依據(jù)已經(jīng)確認(rèn)的需求內(nèi)容進(jìn)行分析, 進(jìn)而判定出被測(cè)軟件系統(tǒng)里面究竟是哪些模塊比較適宜開展自動(dòng)化的功能測(cè)試環(huán)節(jié)。4.第2步, 去編寫那些測(cè)試用例。現(xiàn)在人做那個(gè)自動(dòng)化測(cè)試, 它不是憑空亂來的, 它是建立在手工測(cè)試已經(jīng)打底子的那種基礎(chǔ)上面的, 得先去分析每一個(gè)模塊它們各自都有什么功能特點(diǎn), 然后看著手頭上已經(jīng)有的一套那個(gè)功能測(cè)試案例, 把需要用自動(dòng)化的那些個(gè)案給抽出來, 還得接著補(bǔ)充完善, 爭(zhēng)取能把事情細(xì)化到具體的每一個(gè)頁(yè)面和每一個(gè)具體對(duì)象上面去。4.進(jìn)行第三步, 來搭建測(cè)試環(huán)境。在進(jìn)行自動(dòng)化測(cè)試環(huán)境的搭建工作時(shí), 第一步是先完成下載與安裝操作, 隨后還需要安裝管理工具 pip, 第二步接著要把相關(guān)的包給下載并安裝下來, 并且還要去核驗(yàn)一下安裝的工作到底有沒有成功做徹底, 最后一步則是去獲取瀏覽器驅(qū)動(dòng)并進(jìn)行下載和安裝工作, 同時(shí)必須把驅(qū)動(dòng)文件安置到相應(yīng)軟件安裝目錄所在的最高層級(jí)文件夾內(nèi)部, 這一點(diǎn)非常需要引起大家的注意, 因?yàn)槿绻麨g覽器軟件的版本、運(yùn)行環(huán)境的版本以及對(duì)應(yīng)瀏覽器的驅(qū)動(dòng)三者之間沒有實(shí)現(xiàn)相互匹配的話那么就會(huì)導(dǎo)致瀏覽器在之后無法正常啟動(dòng)的現(xiàn)象發(fā)生。下面的內(nèi)容是借助于軟件自身所附帶的那個(gè) IDLE 運(yùn)行環(huán)境, 來作為例子去驗(yàn)證一下, 這個(gè)相關(guān)的環(huán)境到底是不是已經(jīng)搭建成功了, 其中所提及的具體操作步驟是啟動(dòng)谷歌瀏覽器, 而具體的代碼內(nèi)容如下所示:from #導(dǎo)入 模塊 ..get在執(zhí)行程序之后的情況是, 如果可以達(dá)成自動(dòng)啟動(dòng)谷歌瀏覽器并且訪問百度首頁(yè)的狀態(tài), 那就可以認(rèn)為環(huán)境搭建成功的狀態(tài)已經(jīng)成立。4.進(jìn)行第4步操作, 也就是創(chuàng)建測(cè)試腳本。在進(jìn)行規(guī)模偏大的系統(tǒng)測(cè)試工作之際, 人們往往可以選擇對(duì)某些特定技術(shù)手段實(shí)施二次封裝動(dòng)作, 借此方式去搭建屬于自己的測(cè)試框架體系, 這一做法能夠有效提升針對(duì)頁(yè)面內(nèi)部元素所具有的可視化表現(xiàn)程度, 進(jìn)而大幅度提高在編寫測(cè)試腳本環(huán)節(jié)的工作效率。與此同時(shí), 那個(gè)被構(gòu)建出來的測(cè)試框架本身應(yīng)當(dāng)是由待測(cè)系統(tǒng)功能當(dāng)中能夠被抽離出來的共用部分來組成的, 它不能產(chǎn)生對(duì)于具體應(yīng)用系統(tǒng)的依賴關(guān)系, 也就是意味著測(cè)試框架與那個(gè)正在被測(cè)試的系統(tǒng)之間應(yīng)當(dāng)保持盡可能低的耦合狀態(tài), 通過這種狀態(tài)的確立, 可以使測(cè)試框架整體具備較高水平的可復(fù)用性能。為了把腳本里面那些重復(fù)多余的東西給去掉, 從而把這個(gè)測(cè)試程序維護(hù)起來所需的成本能夠有效地降低一些, 咱們現(xiàn)在可以把在測(cè)試程序當(dāng)中那些一致性的、共同的腳本部分拿出來進(jìn)行一個(gè)提取的操作呢, 然后要把它們變成類還有接口這種形式出來, 以便讓其他的腳本在進(jìn)行調(diào)用的時(shí)候有一個(gè)統(tǒng)一的方式去使用。自動(dòng)化測(cè)試腳本主要是圍繞業(yè)務(wù)流程來開展的, 它是由頁(yè)面元素、業(yè)務(wù)邏輯以及測(cè)試數(shù)據(jù)等部分組成的, 關(guān)于測(cè)試 data 這部分內(nèi)容, 既可以被存放在 Excel 表格里面, 同樣也可以是被存放在像 MySQL 這樣的數(shù)據(jù)庫(kù)之中。下面我們會(huì)以某論壇系統(tǒng)當(dāng)中的注冊(cè)功能作為一個(gè)具體的例子來進(jìn)行展示, 相關(guān)的代碼如下:fromtime ..get:8081/bbs/把那個(gè)叫_text的元素里面的內(nèi)容清空成空字符串, 然后模擬點(diǎn)擊它一下這個(gè)動(dòng)作的效果是讓界面跳轉(zhuǎn)到注冊(cè)頁(yè)面。time.sleep2#停頓 2 秒.強(qiáng).強(qiáng)/。wull#輸入用戶名.. 接下來, 請(qǐng)輸入密碼。..將空白的字符串轉(zhuǎn)換為輸入確認(rèn)密碼。.h//這個(gè)標(biāo)識(shí)的名字, 它被稱為sex。#輸入性別#輸入電話.h//input這里的名稱被指定為電話號(hào)碼。