css
自動化測試:由程序代替人爲去驗證程序功能的過程html
爲何要進行自動化測試?linux
解決-迴歸測試web
壓力測試編程
兼容性測試數組
提升測試效率,保證產品質量瀏覽器
什麼階段開始自動化測試?併發
功能測試完畢(手工測試)app
手工測試:就是由人去一個個輸入測試用例,而後觀察結果;框架
自動化測試所屬分類(代碼可見度)
黑盒測試
灰盒測試
白盒測試
提示: Web 自動化測試屬於黑盒測試(功能測試)
優勢:
較少時間內運行更多的測試用例
自動化腳本可重複運行
減小人爲的錯誤
測試數據存儲
缺點:
不能取代手工測試
手工測試比自動化測試發現的缺陷更多
測試人員技能要求
Web(UI)自動化測試
接口-自動化測試
移動(app)-自動化測試
單元測試-自動化測試
什麼Web 項目適合作自動化測試?
需求變更不頻繁
項目週期長
項目須要迴歸測試
如何進行 Web 自動化測試?
QTP(收費)
Selenium (開源)
Jmeter(開源,Web,接口,性能)
LoadRunner(收費.Web,性能)
Robot framework 基於Python 可擴展的( 關鍵字驅動) 自動化測試框架
主流工具-匯結:
Web 自動化測試:selenium,robot framework
App端:Appium MonkeyRunner,UIautomation
PC(win32):QTP
接口:Jemeter,Postman,HttpUnit,RESTClient
雲平臺:Testin Testbird
性能測試: Jemeter,LoadRunner
開源
跨屏圖
多個瀏覽器測試
多語言
成熟穩定 google 百度 騰訊 都在用
功能強大
Selenium Grid 分佈式測試,超大規模測試
重點:
Selenium IDE
Selenium2.0(WebDriver)
Selenium IDE :是一個 Firefox 插件,用於記錄和播放用戶與瀏覽器的交互.(錄製 Web 操做腳本)
爲社麼要學習?
安裝地址:
Version: 2.9.1.1
https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/versions/
火狐瀏覽器地址:
下載地址:
運行: Ctrl+Alt+S
35 版本兼容性最好
FireBug 差價事火狐一款插件,可以調試全部網站語言,同時也能夠快速定位HTML 頁面中的元素;
做用:定位元素
Selenium IDE 提示
錄製腳本時候是錄製鼠標和鍵盤的全部再瀏覽器操做,那麼腳本會出現多餘的步驟,有時候咱們須要手動填寫腳本或修改腳本,全部咱們有必要對Selenium IDE 腳本編輯與操做有所瞭解;
目的:手動修改或編寫腳本(採用錄製方式很容易記錄出多餘的操做)
單機click 是沒有值
右鍵鼠標 「insert new command」 插入一條新的命令
右鍵「insert new comment」 插入註釋,紫色字體
選定要執行的命令點擊單個執行按鈕便可,注意:有一些命令必須依賴於前面命令的運行結果才能成功執行,不然會致使執行失敗
做用:打開指定的URL ,URL 能夠爲相對或是絕對URL
Target:要打開的URL;value 值爲空
當Target 爲空,將打開Base URL 中填寫的頁面
當Target 不爲空且值爲相對路徑,將打開Base URL +Target 頁面.如,假設 Base URL 爲 http://www.zhi97.com, 而Taget爲/about.aspx,則執行open命令時,將打開http://www.zhi97.com/about.aspx
當Target以http://卡頭是,將忽略Base URL,直接打開Target的網址;
做用:暫停腳本運行
waitTime:等待時間,單位爲ms;//Target=1000
做用:模擬單機瀏覽器的後退按鈕;
提示:因爲沒有參數,因此Target和Value可不填
做用:刷新當前頁;
提示:因爲沒有參數,因此Target和Value可不填;
做用:單擊一個連接,按鈕,複選框或單選按鈕;
提示:若是該單擊事件致使新的頁面加載,命令將會加上後綴"AndWait",即"clickAndWait",或"waitForPageToLoad"
做用:向指定輸入域中輸入指定值;也可爲下拉框,複選框和單選框按鈕賦值
Target:元素的定位表達式;
Value:要輸入的值;
做用:模擬用戶單擊窗口上的關閉按鈕
提示:因爲沒有參數,因此Target和Value可不填
須要關注的
1.Selenium2.0(WebDeiver)
提示:
Selenium2.0=Selenium1.0+WebDriver
Selenium1.0 和WebDeiver 原屬於兩個不一樣的東西,因爲某種緣由已合併
Selenium2.0之後咱們簡稱WebDriver
什麼是WebDriver
WebDriver 是一種用於web應用程序的自動測試工具;
它提供了一套友好的API
WebDriver 徹底就是一套類庫,不依賴任何測試框架,除了必要的瀏覽器驅動
說明:
API:應用編程接口說明(WebDriver類庫內封裝很是多的方法,要使用這些方法,舊須要友好的調用命名規則)
Firefox(FirefoxDriver) 推薦
IE(InternetExplorerDriver)
Opera(OperaDriver)
Chrome(ChromeDriver)
safari(SafariDriver)
HtmlUnit(HtmlUnit Driver)
Firefox,Chrome:對元素定位和操做有良好的支持,同時對JavaScript支持也很是好.
IE:只能再Windows平臺運行,全部瀏覽器中運行速度最慢
HtmlUnit:無GUI(界面),運行速度最快
推薦緣由
Selenium IDE
FireBug
對WebDriver API 支持良好
自動化測試概念
WebDriver-定位元素
WebDriver-操做元素
安裝: pip install selenium == 2.48.0
通用的Python包管理工具.提供了對Python包的查找下載,安裝,卸載的功能
install: 安裝命令
elenium==2.48.0:指定安裝selenium2.48.0 版本(若是不指定版本默認爲最新版本)
卸載:pip uninstall selenium
查看:pip show selenium
FireFox 48 以上版本
Selenium3.X+ FireFix 驅動-geckodriver
Firefox 48 如下版本
Selenium2.X 內置驅動
Selenium2.x/3.x+Chrome 驅動
每一個瀏覽的驅動版和其餘瀏覽器的不一致
但要與對應的一致
各個驅動下載地址:http://www.seleniumhq.org/download/
瀏覽器的版本和驅動版本要一致
(若是是32bit瀏覽器而Driver 是64bit則會致使腳本運行失敗)
瀏覽器驅動下載好後須要添加Path 環境變量中,或者直接放到Python 安裝目錄,由於Python以添加到Path 中
推薦使用火狐瀏覽器(24,35)版本
目標瞭解元素各類定位方法
掌握 id,name,class_name,tag_name,link_text,partial_link_text 定位的使用
爲何要學習元素定位方式
讓程序操做指定元素,舊必須先找到此元素
程序不像人類用眼睛直接定位到元素
WebDriver 提供了八種定位元素方式
id
name
class_name
tag_name
link_text
partial_link_text
Xpath
css
定位方式分類-彙總
id,name,class_name:元素屬性定位
tag_name:元素標籤名稱
link_text,partial_link_text:超連接定位(a標籤)
Xpath:元素路徑定位
css:css選擇器定位
導入selenium 包->from selenium import webdriver
導入time 包->from time import sleep
實例化火狐瀏覽器->driver=webdriver.Firefox()
打開註冊A.html->driver.get(url)
調用id 定位方法->driver.find_element_by_id("")
使用send_keys()方法發送數據-<.send_keys("admin")
暫停3秒->sleep(3)
關閉瀏覽器->quit()
說明:爲了接下來更好而學習體驗,咱們先暫時使用send_keys()和quit()方法.再2.4節元素操做詳解
driver.find_element_by_name(名稱).send_key(賦值)
driver.find_element_by_class_name()
說明:HTML 規定了class 來指定元素的類名,用法和name,id 相似
前提:元素有class 屬性
經過class_name定位電話號碼A,併發送1861111111
說明:HTML本質就是由不一樣的tag(標籤)組成,而每一個tage 都是指同一類,因此tag 定位效率低.通常不建議使用;tag_name 定位就是經過標籤名來定位
find_element_by_tag_name()
返回:符合條件的第一個標籤
如何獲取第二個元素?稍後(2.8節)講解
說明:link_text定位於前面4個定位有所不一樣,它專門用來定位超連接文本(<a"> 標籤 </a">)
方法:find_element_by_link_text()
說明:須要傳入a 標籤所有文本
參考id定位
點擊->click()
說明:partial_link_text 定位是對 link_text 定位的補充,partial_like_text 爲模糊匹配; link_text所有匹配
做用:
查找定位全部符合條件的元素
返回的定位元素格式爲數組(列表)格式
說明:
列表數據格式的讀取須要指定下標(下標從0開始)
操做(2.4 tag_name)
說明:使用tag_name 獲取第二個元素(密碼框)
代碼: driver.find_elements_by_tag_name("input")[1].send_keys("123456")
Xpath 即爲XML Path 的簡稱,它是一種用來肯定XML文檔中某部分位置的語言.
HTML 能夠看作是 XML 的一種實現,因此 Selenium 用戶可使用這種強大的語言在Web 應用中定位元素.
XML: 一種標記語言,用於數據的存儲和傳遞.後綴.xml
提示:Xpath 爲強大的語言,那是由於它有很是靈活定位策略;
Xpath 有哪些策略呢?
路徑-定位
絕對路徑
相對路徑
利用元素屬性-定位
層級於屬性結合-定位
屬性於邏輯結合-定位
driver.find_element_by_xpath()
1. 絕對路徑:從最外層元素到指定元素之間全部通過元素層級路徑;如:/html/body/div/p[2]
提示:
1.1. 絕對路徑以/開始
1.2. 使用Firebug能夠快速生成,元素Xpath絕對路徑
2. 相對路徑: 從第一個符合條件元素開始(通常配合屬性來區分);
2.1. 相對路徑以//開始,後邊必須跟標籤名稱或*
2.2. 使用FireBug擴展插件FirePath 可快速生成,元素相對路徑
3.Xpath 路徑內使用屬性時,必需要使用@修飾
提示:爲了方便練習Xpath,能夠在FireBug內安裝擴展插件-FireFinder 插件;
3. 火狐瀏覽器->組件管理器->搜索FireFinder
說明:快速定位元素,利用元素惟一屬性;
示例://*[@id='userA']
說明:要找的元素,沒有屬性,但它的父級有
示例://*[@id='p1']/input
說明:解決元素之間個數相同屬性重名問題
示例://*[@id='telA' and @class='telA']
//*[text()='xxx'] #文本內容是xxx的元素
//*[starts-with(@attribute,'xxx')] #屬性以xxx開頭的元素
//*[contains(@attribute,'xxx')] #屬性中含有xxx的元素
https://ftp.mozilla.org/pub/firefox/releases/
CSS(Cascading Style Sheets)是一種語言,它用來描述HTML 和XML 的元素顯示樣式;
css語言書寫兩個格式:
卸載HTML語言中.卸載單獨文件中 後綴.css
而在CSS語言中有CSS選擇器(不一樣的策略選擇元素),在Selenium 中也可使用這種選擇器;
提示:
在selenium 中極力推薦CSS 定位,由於它比XPath 定位速度要快
CSS 選擇器語法很是強大,在這裏咱們只學習在測試中經常使用的幾個
driver.find_element_by_css_selector()
id選擇器
class選擇器
元素選擇器
屬性選擇器
層級選擇器
說明:根據元素id 屬性來選擇
格式:#id 如: #userA<選擇id屬性值爲userA的全部元素>
根據元素class屬性來選擇
格式:
.class 如: .telA <選擇class屬性值爲telA的全部元素>
根據元素的標籤名選擇
格式:
element 如:input<選擇全部input元素>
根據元素的屬性名和值來選擇
格式:
[attribute=value]如:[type='password']<選擇全部type屬性值爲password的值>
根據元素的父子關係來選擇
格式:
element>element 如:p>input .返回全部p元素下全部的input元素
提示:
">" 能夠用空格代替 如:p input 或者 p [type='password']
1.input[type^='p'] type屬性以p字母開頭的元素
2.input[type$='d'] type屬性以d字母結束的元素
3.input[type*='w'] type屬性包含w字母的元素
說明:調用find_element()方法,經過By來聲明定位的方法,而且傳入對應的方法和參數(瞭解)
導包:from selenium.webdriver.common.by import By
driver.find_element(By.XPATH,...)
原find的底層