自動化
什么是自動化?
超市的自動閘門,不需要手動的開門關門生活中的自動動化案例有效的減少了人力的消耗,同時也提高了生活的質量。
軟件自動化測試同理,通過編寫自動化測試程序(減少人力和時間的消耗,提高軟件的測試質量),自動化測試主要是用來進行回歸測試。
針對自動化這個問題,非常容易出兩道面試題
- 自動化測試能夠取代人工測試嗎?
自動化測試不能取代人工測試,首先自動化測試不一定比人工測試更能保證系統的可靠性,再者自動化測試是由測試人員進行編寫的也需要進行不定期的維護和更新。
- 自動化測試可以大幅度降低工作量?
這是一個坑,只能說自動化測試可以一定程度上進行降低工作量,大幅進行降低工作量這個太絕對。
回歸測試
當軟件新增加一個功能后,在新版本上線之前需要將之前產品存在的功能重新進行測試,防止新功能的上線導致之前的功能出現故障。
因此,新舊版本都需要執行測試。
自動化測試的分類
想要進行清楚自動化主要是圍繞著軟件的哪些方面進行的測試,首先要清楚軟件通常有哪幾個部分?
軟件主要分為兩大類:瀏覽器進行打開的軟件、終端可以進行打開的軟件(app)
瀏覽器進行打開的軟件又分為web前端和后端服務器
app分為客戶端和后端的服務器
所以說自動化的分類就分為接口自動化和前端自動化。
前端自動化又分為web界面測試自動化和客戶端界面測試自動化。
自動化測試金字塔
?動化的類型?常多,那么到底哪?種是最好的?哪?種測試的收益會更佳? 這?我們介紹測試圈內?常著名的?動化測試?字塔
理想的?動化測試?字塔表達了?動化測試的理想情況,利?較少的時間和精?在單元測試上就能夠 發現更多有效的問題。
然后實際上在企業中,自動化往往是“冰淇淋蛋筒反模式” ,如下圖所示
在實際的開發中通過UI自動化和接口自動化發現的問題是非常有限的,并且開發人員并不是很重視單元測試,因此實際上手動進行探索測試的回報率是最高的,因此有了冰淇淋蛋筒反模式。
web自動化
驅動的理解
我們在進行學習操作系統的時候就了解過驅動,驅動位于硬件的上層,操作系統的下層,通過驅動實現硬件和軟件的交互。
web自動化測試工具selenium
我們要進行在百度進行搜索“感動中國的十大人物”
手動:手動打開瀏覽器,需要點擊瀏覽器軟件,然后進行搜索,這種情況是手工進行驅動瀏覽器的打開
自動化:① 打開瀏覽器 ②輸入百度網址 ③找到輸入框,輸入關鍵詞“感動中國的十大人物” ④點擊“百度一下”按鈕,這種請i況下就是程序驅動瀏覽器打開。
安裝selenium 庫
安裝對應瀏覽器的驅動 (以chorme瀏覽器為例)
通過下面的網址進行下載對應的驅動
?Chrome for Testing availability
編寫自動化進行測試的小 demo 驗證瀏覽器的驅動是否安裝成功并進行體會自動化測試
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager# 設置 Chrome 瀏覽器的路徑
chrome_options = Options()
chrome_options.binary_location = "C:/Program Files/Google/Chrome/Application/chrome.exe" # 修改為你自己的路徑# 使用 webdriver_manager 自動下載 ChromeDriver,并創建 Service 對象
service = Service(ChromeDriverManager().install()) # 正確實例化 Service 類# 啟動瀏覽器
driver = webdriver.Chrome(service=service, options=chrome_options)driver.get("https://www.baidu.com")#找到搜索框,輸入關鍵詞
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("感動中國十大人物")
time.sleep(2)#點擊百度一下
driver.find_element(By.CSS_SELECTOR,"#su").click()
time.sleep(2)#關閉瀏覽器
driver.close()
selenium+驅動+瀏覽器的工作原理
這三者是如何進行交互的呢?
具體步驟解析如下:?
- 通過selenium編寫的?動化腳本代碼中在ChromeDriverService中創建?個服務?
- 通過創建好的服務打開webdriver,安裝在本地的驅動服務IP為localhost,PORT為 ChromeDriverService中創建的端口號,該服務地址為selenium向webdriver發送請求的服務地址
- 向瀏覽器驅動程序發送HTTP請求,瀏覽器驅動程序解析請求,打開瀏覽器,并獲得sessionid,如 果再次對瀏覽器操作需攜帶此id?
- 打開瀏覽器后,所有的selenium的操作(訪問地址,查找元素等)均通過創建好的服務鏈接到 webdriver,然后使用execute發送請求
- 驅動收到請求并對請求進行解析,轉成瀏覽器能夠解析的腳本并發送給瀏覽器,瀏覽器通過請求的 內容執行對應動作
- 瀏覽器再把執?的動作結果通過瀏覽器驅動程序返回給測試腳本
- 驅動需要接收、解析請求,發送請求給瀏覽器,那么驅動到底是什么樣的角色呢?
驗證方式:執行selenium編寫的自動化腳本代碼中,可以在終端看到創建的驅動服務地址。