1. 程式人生 > >學習selenium過程中的一些筆記

學習selenium過程中的一些筆記

一.分層自動化測試:ui代表頁面級系統測試,service代表服務業務測試(介面測試),unit代表單元測試。Unit佔70%,service佔20%,UI佔10%。
單元測試(unit):它可以通過mock框架,模擬各種異常場景,外部依賴最少,且可以做到測試粒度到最小的一種測試方法。也因為依賴少,可方便隨時隨地執行,也讓問題排查很簡單。這是一切測試的地基。
介面測試(service):這裡要求測試人員對系統的結構和系統間的排程非常清楚,同時要了解介面邏輯關係,否則介面測試程式碼很容易遺漏一些異常場景。這一層由於含有一些業務邏輯和多介面的一個整合,所以相對單元測試來說,多了一些外界依賴,導致問題定位不會有單元測試層那麼準確。因此投入會比單元測試多一些。
頁面測試(ui):是常見的黑盒自動化測試場景。它最接近使用者真實場景,也容易發現問題,但它的實現成本最高且太容易受外部依賴,影響指令碼成功率,所以處在金字塔的頂端,但它不是金字塔的全部。自動化測試的劣勢,其中80%都是因為ui自動化。
分層自動化測試倡導的就是,將系統分層,不同層次用合適的自動化方法進行測試的一種測試策略。
在這裡插入圖片描述


金字塔越高的部分表示需要投入的工作量和精力越大。
二.適合自動化測試的測試場景:
1)任務明確,不會頻繁變動
2)迴歸測試比較頻繁
3)介面比較穩定
4)有大量的重複任務
5)軟體的維護週期較長
6)專案進度方面的壓力較小
7)測試人員具備較強程式設計能力
自動化測試用例從手工測試用例中選取,如果迭代週期短,可以選取功能測試中的核心部分進行測試。
三.常用的自動化測試工具:
1) UTF=QTP,主要用於迴歸測試和同軟體新版本測試,支援B/S和C/S架構。
2)RF(Robot Framework),python編寫的功能自動化測試框架。具備良好的可擴充套件性,支援關鍵字驅動,可以同時測試多種型別的客戶端或者介面,可以進行分散式測試執行。主要用於輪次很多的驗收測試和驗收測試驅動開發。
3)Selenium,用於Web應用程式測試的工具,測試直接執行在瀏覽器中,就像真正的使用者在操作一樣,主要功能包括:測試與瀏覽器的相容性,測試你的應用程式看是否能夠很好得工作在不同瀏覽器和作業系統之上。
四.Selenium:
selenium1.0版本
selenium IDE
Firefox瀏覽器中的一個小外掛,實現瀏覽器操作的錄製與回放
selenium Grid
用來對測試指令碼做分散式執行,即實現在多臺機器上和異構環境中執行測試用例(分散式的概念是寫好一條用例可以呼叫不同的平臺執行,如 A電腦上有一個測試用例,可以呼叫B電腦(linux)的 Firefox瀏覽器來跑A電腦上的測試用例;也可以呼叫C電腦(windows)的 Chrome瀏覽器來跑A電腦上的測試用例,這是分散式的概念)
selenium RC
使用瀏覽器內建的JavaScript 翻譯器來翻譯和執行selenese 命令(selenese 是 selenium 命令集合)
支援多種不同的語言編寫測試指令碼,通過selenium RC的伺服器作為代理伺服器去訪問應用,達到測試的目的
① client libraries:用於編寫測試指令碼,用來控制selenium server的庫,暴露API供呼叫
② selenium server:負責控制瀏覽器行為,Selenium Server 主要包括3 個部分:Launcher、Http Proxy、Core
Launcher:用於啟動瀏覽器,把selenium Core載入到瀏覽器頁面當中,並把瀏覽器的代理設定為selenium server的HTTP Proxy
Http Proxy:攔截請求
Selenium Core:就是一堆JavaScript函式的集合,即通過這些函式,解釋成selenese命令,我們才可以實現用程式對瀏覽器進行操作
selenium 2.0版本:selenium+webdriver
通過WebDriver 去替代RC,webdrive提供了更出色的API,可以繞過JS,直接控制瀏覽器,更快,安全性更高。但為了保持相容性,所以selenium 2.0中,RC 和webdriver 並存,但說起selenium 2.0 一般指的是webdriver
selenium 3.0版本
將Firefox獨立化,對IE、Edge等瀏覽器有了更好的支援。徹底廢棄了RC
selenium環境搭建
1)線上安裝selenium:在python的pip路徑下開啟cmd,輸入pip install selenium
Pip可以安裝python的一些庫,setuptools
2)離線安裝selenium:下載好檔案後,在檔案路徑下開啟cmd,輸入python
setup.py
install
Firefox中IDE
1)安裝IDE,將下載好的IDE檔案直接拖拽進Firefox瀏覽器中即可。
2)安裝好之後在右上角開啟IDE可以開始錄製與回放了
IDE可以在錄製完成後生成.py指令碼檔案,但我們一般不用此功能。
五.使用selenium通過七種元素或方法定位web中的模組:
先呼叫Firefox的webdriver開啟Firefox瀏覽器然後通過driver.get()API開啟www.baidu.com
在這裡插入圖片描述

1.通過元素“id”定位到輸入框並輸入文字
在這裡插入圖片描述
2.通過元素“name”定位到輸入框並輸入文字
在這裡插入圖片描述
3.通過元素“class”定位到輸入框並輸入文字(若class的屬性值中包含空格,我們一般不使用class進行定位)
在這裡插入圖片描述


4.通過“link”來定位A標籤
在這裡插入圖片描述
5.通過“patail_link”來定位A標籤
在這裡插入圖片描述
6.通過xpath來定位web中的模組。絕對路徑從根目錄開始,以“/”開始。相對路徑不需要從根目錄開始,可以從某個有特定標誌的目錄下開始,以“//”開始。
相對路徑:
在這裡插入圖片描述
絕對路徑:
在這裡插入圖片描述
7.通過css來定位模組。css中絕對路徑使用“空格號”或者“>”,但使用css來定位一般不使用絕對路徑。
css通過id定位:
在這裡插入圖片描述
css通過class定位:
在這裡插入圖片描述
css通過id定位時用“#”開始,通過class定位時用“.”開始。
六.Webdriver中的一些其他API。

1)回退:
driver.back()
2)前進
driver.forward()
3)重新整理
driver.refresh()
4)設定瀏覽器的大小
driver.set_window_size(480,320)
5)瀏覽器全屏
driver.maximize_window()
6)清除輸入框的內容
driver.find_element_by_id(“kw”).clear()
7)檢視定位的框的尺寸,可用print(size)列印結果
size = driver.find_element_by_id(“kw”).
print(size)
8)獲取選定位置文字內容
driver.find_element_by_id(“kw”).text
9)獲得屬性值,括號裡寫需要查詢的屬性名,可用print()列印結果
attribute = driver.find_element_by_id(“kw”).get_attribute(‘name’)
10)看選定的位置是否顯示出來,一般值是true或者false,後面可以呼叫if語句
result = driver.find_element_by_id(“kw”).is_displayed()
11)設定休眠時間:進入一個網頁後等待一段時間後執行命令,括號裡是等待的時間
import time
time.sleep(5)