自動化測試指軟體測試的自動化,在預設狀態下執行應用程式或係統,預設條件包括正常和異常,最後評估運行結果。將人為驅動的測試行為轉化為機器執行的過程。
自動化測試包含UI自動化,介面自動化,單元測試自動化。依照這個金字塔模型來進行自動化測試規劃,可以產生最佳的自動化測試產出投入比(ROI),可以用較少的投入獲得很好的效益。
最大的投入應該在單元測試上,單元測試運行的頻率也更加高。
java的單元測試框架是Junit。
介面測試就是API測試,相對於UI自動化API自動化更容易實現,執行起來也更穩定。
介面自動化的有以下特點:
可在產品前期,介面完成後介入
用例維護量小
適合介面變動較小,介面變動頻繁的項目
常見的介面自動化測試工具有,RobotFramework,JMeter,SoapUI,TestNG HttpClient,Postman等
雖然測試金字塔告訴我們盡量多做API層的自動化測試,但是UI層的自動化測試更加貼近用戶的需求和軟體系統的實際業務。而且有時候我們必須進行UI層的測試。
UI自動化的特點:
用例維護量大
頁面相關性強,必須後期專案頁面開發完成後介入
UI測試適合與介面變動較小的專案
UI層的測試框架比較多,例如Windows客戶端測試的AutoIT,web測試的selenium以及TestPlant ,eggPlant,Robot framework,QTP等。
降低大型系統的由於變更或多期開發引起的大量的回歸測試的人力投入,這可能是自動化測試最主要的任務,特別是在程序修改比較頻繁,效果是非常明顯的,自動化測試前期人力投入較多,但後期進入維護期後,可節省大量人力,而手工測試後期需要增加大量人力用於回歸測試
減少重複測試的時間,實現快速回歸測試
創建優良可靠的測試過程,減少人為錯誤
可以運行更多更繁瑣的測試
可以執行一些手動測試困難或不可能進行的測試
更好的利用資源
測試腳本的複用性
#實作自動化測試的前提條件:需求變動不頻繁、專案週期夠長、自動化測試腳本可重複使用。
適合做自動化的專案:
產品型專案。產品型的項目,新版本是在舊版的基礎上進行改進,功能變不大的項目,但項目的新舊功能都必須重複的進行迴歸測試。自動化測試的優點在於回歸測試,它可以有效驗證是否引入了新的缺陷,以及舊缺陷是否已修復。某種程度上可以把自動化測試工具叫做回歸測試工具。
機械且頻繁的測試。在一個長週期的專案中,需要重複輸入相同大量的資料。比如相容性測試。
以下情況的項目不適合做自動化測試:
#需求變動頻繁的項目,自動化腳本無法重複使用,維護成本太大,性價比低
專案週期短,自動化腳本編製完成後使用次數不多,性價比低
互動型較強的項目,需要人工幹預的項目,自動化無法實施
分析:整體掌握系統邏輯,分析出系統的核心體系架構。
設計:設計測試案例,測試案例要夠明確且清晰,覆蓋面廣而精
實作:實作腳本,有兩個要求一是斷言,二是合理的運用參數化。
執行:執行腳本遠遠沒有我們想像中那麼簡單。腳本執行過程中的異常需要我們仔細的去分析原因。
總結:測試結果的分析,和測試過程的總結是自動化測試的關鍵。
維護:自動化測試腳本的維護是一個難以解決但必須解決的問題。
分析:在自動化測試過程中深刻的分析自動化用例的涵蓋風險和腳本維護的成本。
Selenium是web應用中基於UI的自動化測試框架,支援多平台、多瀏覽器、多語言。
早期的selenium RC已經被現在的webDriver取代,可以簡單的理解為selenium1.0 webdriver構成,現在的Selenium2.0。通常情況下,我們使用“Selenium”一詞指的是Selenium2.0。 Selenium包含Selenium IDE、Webdriver和Selenium Grid三個元件。
分別做介紹:
Selenium IDE
Selenium IDE一個用於Selenium測試的完成整合開發環境,可以直接錄製在瀏覽器的使用者操作,並且能回放,編輯和調試測試腳本。在調試過程中,你可以逐步執行或調整執行速度,並可以在底部查看日誌以獲取錯誤訊息。錄製的測試腳本可以多種語言匯出,例如java,C#,Python,Ruby等,方便掌握不同語言的測試人員操作。 Webdriver
Selenium RC 在瀏覽器中運行JavaScript 應用,會存在環境沙箱問題,而WebDriver可以跳出JavaScript的沙箱,針對不同的瀏覽器創建更健壯的,分佈式的,跨平台的自動化測試腳本。基於特定語言(Java,C#,Python,Ruby,Perl,JavaScript等)綁定來驅動瀏覽器對Web元素進行操作和驗證。
webdriver的工作原理:
啟動瀏覽器後,selenium-webdriver會將目標瀏覽器綁定到特定的端口,啟動後的瀏覽器則作為webdriver的remote server。
客戶端(也就是測試腳本),借助ComandExecutor發送HTTP請求給sever端(通訊協定:The WebDriver Wire Protocol,在HTTP request的body中,會以WebDriver Wire協議規定的JSON格式的字串來告訴Selenium我們希望瀏覽器接下來會做什麼事情)。
Sever端需要依賴原生的瀏覽器元件,轉換Web Service的指令為瀏覽器native的呼叫來完成操作。
selenium Grid
selenium Grid是一個伺服器,提供對瀏覽器實例存取的伺服器列表,管理各個節點的註冊和狀態資訊。可以實現在同一時刻不同伺服器上執行不同的測試腳本。
開啟Edge-外掛程式-選擇selenium IDE:
建立一個新項目,此時左部Test Case 視窗會有一個Untitled 的測試案例,右鍵點選重新命名為”test”
點擊IDE 的右上部錄製按鈕(小紅點)開始手動錄製
#在網址列中輸入待測試的網址如http://www.baidu.com,搜尋關鍵字,這時可以看到IDE進行了錄製操作。
在頁面中點選右鍵,可以增加檢查點。
錄製結束後,點選錄製按鈕(小紅點),結束此手動錄製。在selenium IDE 中,選取一個 Test Case,以滑鼠右鍵選擇「Export 匯出為test.py檔案。
將該腳本在python中執行並偵錯。
# Generated by Selenium IDE import pytest import time import json from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.desired_capabilities import DesiredCapabilities class TestTest(): def setup_method(self, method): self.driver = webdriver.Chrome() self.vars = {} def teardown_method(self, method): self.driver.quit() def test_test(self): self.driver.get("https://www.baidu.com/") self.driver.set_window_size(809, 864) self.driver.find_element(By.ID, "kw").click() self.driver.execute_script("window.scrollTo(0,0)") self.driver.find_element(By.ID, "kw").send_keys("四月是你的谎言") self.driver.find_element(By.ID, "su").click()
以上是Python自動化測試利器selenium怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!