文章目錄
- 自動化測試能夠取代人工測試嗎?
- 回歸測試
- 自動化分類
- 自動化測試金字塔
- 為啥單元測試的性價比這么高呢?
- 那為啥UI自動化測試的性價比沒有組件測試的高呢?
- web自動化測試
- 舉例引入
- 自動化測試的準備工作
- 自動化測試的簡單示例
自動化測試能夠取代人工測試嗎?
測試主要由人工測試,通過自動化測試來輔助測試
自動化測試不一定比人工測試更能保障系統的可靠性,自動化測試也需要測試人員進行設計,后續如果有功能的變更,自動化測試也需要進行不定期的維護和更新。
回歸測試
由于軟件在不斷的迭代更新,因此通常具有非常多的版本。當新的版本即將上線,意味著有用戶使用新的版本,也有用戶在使用舊的版本!因此新版本和舊版本都需要執行測試
由于舊版本的一般不會再有功能變更,這時候自動化測試就是一個很好的選擇。用自動化測試去測舊版本,這就叫回歸測試
看下面的例子,假如說對于我們的一款購物軟件,我們在新版本中添加了一項功能:查看瀏覽記錄。那新版本在測試的時候,是不是只需要測新添加的功能呢?以前的老功能需不需要重新測呢?
答案是以前的老功能也要測,因為新增的代碼很有可能會對以前的老代碼產生影響,為了確保以前的功能不受影響,我們必須也要對以前的老功能進行測試
自動化分類
-
瀏覽器打開的軟件
- web前端
- 接口
- 請求參數
- 請求體
- 響應內容
- 狀態碼
- …
-
終端可以打開的軟件/APP
- 前端(客戶端)
- 接口
從上面我們可以看到,無論是web還是app,我們都需要進行前端測試和接口測試,具體來說就是要做
- 接口自動化測試
- 前端自動化測試
- 凡是界面上肉眼可以看到的東西都需要執行測試
- web界面測試
- 客戶端界面測試
自動化測試金字塔
這個圖是啥意思呢?就是說你越往上去這個測試花費的時間和精力就越多。要往下去,這個測試的投資回報率就越高。
大家非常明顯的可以看出來。單元測試是花費時間精力最少的。投資回報率最高的。手動測試是花費時間最多,投資回報率最低的。
為啥單元測試的性價比這么高呢?
這主要是因為對于一份剛剛寫好的代碼,代碼的作者,也就是開發人員是非常熟悉的。我們讓開發人員在寫完代碼之后順手進行一個單元測試,是非常容易的,因為他不需要額外花時間來熟悉代碼了
那為啥UI自動化測試的性價比沒有組件測試的高呢?
自動化測試其實就是我們理解的前端測試,而API集成組件測試其實就是接口測試。所以這個問題問的實際上就是前端測試為什么比接口測試要麻煩
這個問題就很簡單。因為前端可以看到的元素非常多:文字、圖片、輸入框、按鈕……每個元素的大小、顏色、形狀等等都需要進行測試
就是由于前端涉及到的不可靠因素太多了,編寫前端自動化腳本相較于接口自動化腳本而言難度會大一些,消耗的人力和時間的成本也會更大一些
前面我們說的都是理想狀態下的金字塔。實際業是實際業務中金字塔長得是下面這樣的,原因主要就是開發人員不太重視單元測試
web自動化測試
舉例引入
我們先看一個例子
測試目標:百度搜索關鍵詞“迪麗熱巴”
- 手工測試:
- 點擊瀏覽器
- 在網址欄中輸入百度網址,輸入回車,進入百度網站
- 在百度網站的搜索框中輸入關鍵詞“迪麗熱巴”,然后回車
- 自動化測試:
- 打開瀏覽器
- 輸入百度網址:https://www.baidu.com
- 找到輸入框,輸入關鍵詞“迪麗熱巴”
- 點擊“百度一下”按鈕
讀完上面的話,是不是感覺比較迷糊?這手工測試和自動化測試。感覺干的事情都是一樣的呀,似乎沒什么區別?你的感覺沒錯,他們干的事情確實沒啥區別,最大的區別在于驅動計算機進行測試的角色不同:手工測試是人來驅動,而自動化測試則是程序驅動。
自動化測試的準備工作
那這時候有人就要問了,區別我理解了,但我還是不明白,你程序到底如何去驅動瀏覽器進行測試呢?
很簡單,只需要安裝web驅動(即WebDriver)就行了。WebDriver是瀏覽器的驅動程序,你學過計算機結構體系應該知道,最上層用戶層寫的是高級語言程序。再往下就是系統調用,操作系統內核,然后往下就是驅動程序,最后就是硬件。web驅動就屬于體系結構中的驅動程序
注意:我們必須使用跟瀏覽器版本配套的驅動!若版本不匹配,則無法打開瀏覽器!!!
瀏覽器若更新了呢?----意味著目前已下載的驅動無法使用—
每次瀏覽器更新都需要重新下載新的驅動,整個流程非常冗余/麻煩
為了解決因瀏覽器更新導致驅動無法使用的問題,我們引入了驅動管理工具Webdriver-manager。安裝Webdriver-manager之后,我們就無需手動安裝瀏覽器驅動,即使瀏覽器更新也不會影響自動化的執行。
安裝命令:pip install webdriver-manager
除此之外,由于我們后面是用selenium進行自動化測試的,因此我們還要安裝selenium庫
pip install selenium==4.0.0
安裝完成之后,我們還需要檢查一下python解釋器中提供的庫是否包含webdriver-manager以及selenium
自動化測試的簡單示例
檢查完成之后,下面我們就可以正式編寫自動化測試腳本了 ,下面就是我們最開始那個用例:在百度中搜索迪麗熱巴的web驅動腳本
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager# 編寫自動化腳本,具體步驟
# 1. 打開瀏覽器----驅動管理
ChromeIns=ChromeDriverManager().install()
# 創建谷歌瀏覽器驅動對象
driver=webdriver.Chrome(service=Service(ChromeIns))
time.sleep(2)
# 2. 輸入百度網址:https://www.baidu.com(網址一定要完整,不要寫成www.baidu.com)
driver.get("https://www.baidu.com")
time.sleep(2)
# 3. 找到百度輸入框,輸入關鍵詞"迪麗熱巴"
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪麗熱巴")
time.sleep(2)
# 4. 點擊"百度一下"按鈕
driver.find_element(By.CSS_SELECTOR,"#su").click()
time.sleep(2)
# 5. 關閉瀏覽器
driver.quit()
看完上面的代碼,可能有人還有些問題,比如find_element(By.CSS_SELECTOR,"#kw")
這里面,By.CSS_SELECTOR是啥意思啊,"#kw"又是啥意思啊?
- By 是 Selenium 提供的一個類,用于指定定位網頁元素的方式。
- By.CSS_SELECTOR 表示 使用 CSS 選擇器來定位元素
- 在 CSS 選擇器中:
#
符號表示 “匹配具有指定 id 屬性的元素”,kw是搜索框對應的選擇器定位。"#kw"表示查找網頁中 id=“kw” 的元素。
到這里大家肯定還有問題,你咋知道搜索框對應的選擇器定位是kw 呢?
我們可以通過網頁的開發者模式,來查看界面中某個組件的詳細信息,里面就有組件的選擇器定位
通過selenium編寫的自動化腳本執行流程