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