一、自動化
1. 自動化概念
自動的代替人的行為完成操作,通過自動化測試有效減少人力的消耗的同時也提高了測試的質量和效率
常見面試題
1.自動化測試能夠取代人工測試嗎?
自動化測試不一定比人工測試更能保障系統的可靠性,自動化測試是測試人員手工編寫,後續如果有功能的變更自動化也需要進行不定期的維護和更新
2.自動化測試可以大幅度降低工作量?
錯誤!!!
一定程度上和大幅度的表達方式也需要注意
測試筆試中的選擇題儘量不要選擇説的太死或者太絕對的選項
2. 自動化分類
- 接口自動化
- UI自動化
UI測試也稱為界面測試,常見的UI自動化測試包含web自動化測試、移動端自動化測試等等
- 移動端自動化測試
移動端,顧名思義,就是部署在手機上的應用程序。移動端自動化測試主要測試程序部署在手機上能否按照預期的結果的進行操作,移動端測試通常不是將程序部署在移動端上進行測試,而是需要安裝模擬器,在電腦上編寫自動化測試腳本代碼對模擬器上的軟件進行操作 - web自動化測試
模擬人在瀏覽器上的操作行為,自動的打開瀏覽器,訪問需要訪問的內容
3. 自動化測試金字塔
最早提出來的時候是一個三層的金字塔,從上到下分別是UI界面/Service服務/Unit單元測試,隨着敏捷測試的不斷推進,測試金字塔出現一些變種
這種下寬上窄的三角形結構,代表在各層自動化的建議投入分配比例,越接近底層的單元測試建議的投入最多,接口測試居中,界面層建議的投入最少
原則上單元測試需要開發人員承擔,很多團隊中開發人手不足,優先保障功能的實現,在單元測試的投入不夠,並且很多開發人員的單元測試經驗不足,導致很多團隊中不做單元測試或者被動執行流於形式,有人提出了金字塔結構的反模式:蛋筒冰激凌模式和紙杯蛋糕模式
二、web自動化測試
1. 驅動
車有了驅動才能夠讓車跑起來
計算機有了驅動程序就可以與設備(耳機,攝像頭,麥克風,鍵盤,顯示器等等設備)進行通信
安裝驅動管理
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.8.0</version>
<scope>test</scope>
</dependency>
三、Selenium
1. 一個簡單的web自動化示例
1)安裝selenium庫
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
2)使用selenium編寫代碼
public void search() throws InterruptedException {
//1.打開瀏覽器(驅動)
WebDriverManager.chromedriver().setup();
//2)添加瀏覽器配置
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver driver = new ChromeDriver(options);
Thread.sleep(2000);
//2.輸入網址:https://www.baidu.com/
driver.get("https://www.baidu.com/");
//3.找到輸入框,輸入搜索內容
Thread.sleep(2000);
driver.findElement(By.cssSelector("#chat-textarea")).sendKeys("周杰倫");
//4.找到搜索按鈕,點擊
driver.findElement(By.cssSelector("#chat-submit-button")).click();
//5.關閉瀏覽器
Thread.sleep(5000);
driver.quit();
}
2. selenium+驅動+瀏覽器的工作原理
A. Client 端(你的代碼)
是什麼:你用 Python、Java 或 C# 寫的測試腳本(引用了 Selenium 的庫)。
作用:它是發號施令的“大腦”。
具體行為:當你寫下一句 driver.get(“https://www.google.com”) 時,Selenium 庫並不會直接操作瀏覽器(因為 Python 根本不懂怎麼控制 Chrome),而是把這行代碼轉換成一個標準的 HTTP RESTful 請求。
B. Driver 端(中間人/翻譯官)
是什麼:那個你需要單獨下載的 chromedriver.exe (Chrome) 或 geckodriver (Firefox)
作用:它是服務器。當你運行腳本時,驅動程序會啓動一個輕量級的 Web Server(通常監聽在 9515 或類似端口)
具體行為:
它時刻監聽來自 Client 的 HTTP 請求
收到請求後,它解析請求內容(比如“打開網頁”)
它將這個通用請求翻譯”成瀏覽器能聽懂的原生指令(Chrome 使用 CDP 協議,Firefox 使用 Marionette 協議)
C. Browser 端(瀏覽器)
是什麼:真實的 Chrome 或 Firefox 應用程序
作用:執行命令的“手腳”
具體行為:接收 Driver 的原生指令,執行點擊、輸入、滾動等操作,並將執行結果(或報錯信息)返回給 Driver
總結來説:
代碼 發送 HTTP 請求
Driver 解析請求並操控瀏覽器
瀏覽器 執行操作