【軟件測試】自動化測試 Selenium 篇(一)

一、什么是自動化測試

1、自動化測試介紹

自動化測試指軟件測試的自動化,在預設狀態下運行應用程序或者系統,預設條件包括正常和異常,最后評估運行結果。將人為驅動的測試行為轉化為機器執行的過程。

自動化就相當于將人工測試手段進行轉換,讓代碼去執行。

自動化測試包括?UI?自動化,接口自動化,單元測試自動化。按照這個金字塔模型來進行自動化測試規劃,可以產生最佳的自貢話測試產出投入比(ROI),可以用較少的投入獲得很好的收益。


(1)單元測試

最大的投入應該在單元測試上,單元測試運行的頻率也更加高。

Java?的單元測試框架是?Junit


(2)接口自動化測試

接口測試就是?API?測試,相對于?UI?自動化?API?自動化更加容易實現,執行起來也更穩定。

接口自動化的有以下特點:

  • 可在產品前期,接口完成后介入。
  • 用例維護量小。
  • 適合接口變動較小,界面變動頻繁的項目。

常見的接口自動化測試工具有?RobotFramework、JMeter、SoapUI、TestNG+HttpClient、Postman 等。


(3)UI?自動化測試

雖然測試金字塔告訴我們盡量多做 API 層的自動化測試,但是 UI 層的自動化測試更加貼近用戶的需求和軟件系統的實際業務。并且有時候我們不得不進行 UI 層的測試。


A. UI 自動化的特點
  • 用例維護量大。
  • 頁面相關性強,必須后期項目頁面開發完成后介入。
  • UI 測試適合與界面變動較小的項目。

B. UI 自動化測試的好處
  1. 降低大型系統的由于變更或者多期開發引起的大量的回歸測試的人力投入,這可能是自動化測試最主要的任務,特別是在程序修改比較頻繁,效果是非常明顯的,自動化測試前期人力投入較多,但后期進入維護期后,可節省大量人力,而手工測試后期需要增加大量人力用于回歸測試。
  2. 減少重復測試的時間,實現快速回歸測試。
  3. 創建優良可靠的測試過程,減少人為錯誤。
  4. 可以運行更多更繁瑣的測試。
  5. 可以執行一些手工測試困難或不可能進行的測試。
  6. 更好的利用資源。
  7. 測試腳本的重用性。

C.?UI?層自動化測試框架

UI 層的測試框架比較多,比如 Windows 客戶端測試的 AutoIT,Web 測試的 Selenium 以及 TestPlant eggPlant,Robot framework,QTP 等。

下面主要以 Web UI 自動化測試框架 Selenium 為例進行詳細介紹。

Selenium 有以下優點:

  • 免費,也不用再為破解軟件而大傷腦筋。
  • 小巧,對于不同的語言它只是一個包而已,而QTP 需要下載安裝1個多G 的程序。
  • 這也是最重要的一點,不管你以前更熟悉C、java、ruby、python、或都是C# ,你都 可以通過 Selenium 完成自動化測試,而QTP 只支持 VBS。
  • 支持多平臺:Windows、Linux、MAC ,支持多瀏覽器:IE、ff、Safari、Opera、Chrome。
  • 支持分布式測試用例的執行,可以把測試用例分布到不同的測試機器執行,相當于分發機的功能。

D.?UI 自動化測試的適用對象

實施自動化測試的前提條件:需求變動不頻繁、項目周期足夠長、自動化測試腳本可重復使用。

適合做自動化的項目:
  1. 產品型項目。產品型的項目,新版本是在舊版本的基礎上進行改進,功能變不大的項目,但項目的新老功能都必須重復的進行回歸測試。回歸測試是自動化測試的強項,它能夠很好的驗證你是否引入了新的缺陷,老的缺陷是否修改過來了。在某種程度上可以把自動化測試工具叫做回歸測試工具。
  2. 機械并頻繁的測試。每次需要輸入相同、大量的一些數據,并且在一個項目中運行的周期比較長,比如兼容性測試。
以下情況的項目不適合做自動化測試:
  1. 需求變動頻繁的項目,自動化腳本不能重復使用,維護成本太大,性價比低。
  2. 項目周期短,自動化腳本編制完成后使用次數不多,性價比低。
  3. 交互型較強的項目,需要人工干預的項目,自動化無法實施。

2、如何實施自動化測試

單純的講,自動化測試的具體實現,應該是包含下面七個過程的:

  1. 分析:總體把握系統邏輯,分析出系統的核心體系架構。
  2. 設計:設計測試用例,測試用例要足夠明確和清晰,覆蓋面廣而精
  3. 實現:實現腳本,有兩個要求一是斷言,二是合理的運用參數化。
  4. 執行:執行腳本遠遠沒有我們想象中那么簡單。腳本執行過程中的異常需要我們仔細的去分析原因。
  5. 總結:測試結果的分析,和測試過程的總結是自動化測試的關鍵。
  6. 維護:自動化測試腳本的維護是一個難以解決但又必須要解決的問題。
  7. 分析:在自動化測試過程中深刻的分析自動化用例的覆蓋風險和腳本維護的成本。


3、自動化測試需要了解的技能

  • 了解被測試系統的基本業務
  • 了解業務的技術框架
  • 懂得功能測試
  • 懂得一種編程語言
  • 懂數據庫、操作系統
  • 了解常見的測試框架
  • ......

二、Selenium?介紹

Selenium?是 Web?應用中基于?UI?的自動化測試框架,支持多平臺、多瀏覽器、多語言。

早期的 Selenium RC?已經被現在的 WebDriver?所替代,可以簡單的理解為 Selenium1.0+WebDriver?構成現在的 Selenium2.0。現在我們說起 Selenium,一般指的是?Selenium2.0,它有由?Selenium IDE,WebDriver,Selenium Grid?組成。


1、Selenium IDE

Selenium IDE?一個用于?Selenium?測試的完成集成開發環境,可以直接錄制在瀏覽器的用戶操作,并且能回放,編輯和調試測試腳本。調試過程中可以逐步進行或調整執行的速度,并且可以在底部瀏覽日志出錯信息。錄制的測試腳本可以以多種語言導出,比如 Java、Python、C#、JavaScript、Ruby?等(豐富的 API),方便掌握不同語言的測試人員操作。


2、Selenium 原理


3、WebDriver

Selenium RC 在瀏覽器中運行 JavaScript 應用,會存在環境沙箱問題,而?WebDriver?可以跳出 JavaScript 的沙箱,針對不同的瀏覽器創建更健壯的,分布式的,跨平臺的自動化測試腳本。基于特定語言(JavaC#PythonRubyPerlJavaScript?等)綁定來驅動瀏覽器對Web元素進行操作和驗證。


(1)Webdriver 的工作原理

啟動瀏覽器后,Selenium-webdriver?會將目標瀏覽器綁定到特定的端口,啟動后的瀏覽器則作為 webdriver 的?remote server

客戶端(也就是測試腳本),借助?ComandExecutor?發送?HTTP?請求給 Sever?端(通信協議:The WebDriver Wire Protocol,在?HTTP request?的?body?中,會以?WebDriver Wire?協議規定的?JSON?格式的字符串來告訴 Selenium,我們希望瀏覽器接下來做什么事情)。

Sever 端需要依賴原生的瀏覽器組件,轉化?Web Service?的命令為瀏覽器?native?的調用來完成操作。


3、Selenium Grid

Selenium Grid?是一個服務器,提供對瀏覽器實例訪問的服務器列表,管理各個節點的注冊和狀態信息。可以實現在同一時刻不同服務器上執行不同的測試腳本。


三、如何使用 Selenium IDE?錄制腳本


四、Selenium + Java?環境搭建

(Windows 電腦環境搭建 - Chrome 瀏覽器)

Chrome + Java(推薦)


1、下載 Chrome 瀏覽器

官網鏈接:Google Chrome 網絡瀏覽器


2、查看 Chrome 瀏覽器版本


3、下載 Chrome 瀏覽器驅動

官方鏈接:ChromeDriver - WebDriver for Chrome - Downloads (chromium.org)

這個頁面數據比較多,往下滑一下就可以看到驅動了,接著將對應的鏈接復制到 Chrome 瀏覽器下載。


4、配置系統環境變量 PATH

解壓下載好的驅動壓縮包,將下載好的 chromedriver.exe 放到 Chrome 瀏覽器安裝路徑下,這里以 Chrome 瀏覽器驅動為例:我的 Chrome 瀏覽器安裝路徑是路徑是:C:\Users\30318\AppData\Local\Google\Chrome\Application


5、驗證環境是否搭建成功

(1)創建 Java 項目,添加 pom 文件中添加依賴

<dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency>
</dependencies>

注意:這里的版本是 Selenium3,不是 Selenium4。?


(2)編寫代碼運行

import org.openqa.selenium.chrome.ChromeDriver;public class Main {public static void main(String[] args) {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");}
}

如果打開了瀏覽器,此時說明安裝成功。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12082.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12082.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【激活函數--下】非線性函數與ReLU函數

文章目錄 一、非線性函數在神經網絡中的重要性二、ReLU函數介紹及其實現2.1 ReLU函數概述2.2 ReLU函數的Python實現及可視化 一、非線性函數在神經網絡中的重要性 在神經網絡中&#xff0c;激活函數的選擇對于網絡的性能和能力至關重要。階躍函數和Sigmoid函數除了是激活函數的…

數據可視化-課堂記錄

week02 # 數據可視化的發展歷史 作用 格式塔原則 # 數據可視化的流程# 數據分析 指標體系建設 確定一個行業指標體系實現報表&#xff08;power bi python matplotlib seaborn pyecharts echarts&#xff09; # 數據分析面試 技術&#xff1a;sqlexcelpythonpowerbispss …

JS 實現冒泡排序

冒泡排序原理&#xff1a; 升序冒泡&#xff1a;兩次循環&#xff0c;相鄰元素兩兩比較&#xff0c;如果前面的大于后面的&#xff0c;就交互位置&#xff1b; 降序冒泡&#xff1a;兩次循環&#xff0c;相鄰元素兩兩比較&#xff0c;如果前面的小于后面的&#xff0c;就交互…

stable-diffusion-webui配置

源碼地址 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git報錯Fresh install fail to load AttributeError: NoneType object has no attribute _id pydantic降級 pip uninstall pydantic pip install pydantic1.10.11記得要把clip-vit-large-patch14放在opena…

業務邏輯攻擊是什么,如何有效進行防護

想象一下&#xff1a;您的開發團隊剛推出了一款令人驚嘆的全新應用程序&#xff0c;它具有頂級的API安全性&#xff0c;通過客戶端保護對其進行了強化&#xff0c;甚至還設置了針對機器人攻擊的防御措施。你感到這款產品很有安全保障&#xff0c;自己的團隊出色地完成了工作。 …

解決Java Web應用中下載文件無法打開的問題

在Java Web應用中&#xff0c;文件下載是一個常見的功能。但有時候&#xff0c;即使代碼看起來正確&#xff0c;下載的文件卻無法正確打開。 問題描述 假設我們有以下代碼用于下載文件&#xff1a; response.addHeader("Content-Disposition", "attachment;fi…

服務器通的遠程桌面連接不上,關于服務器通暢但遠程桌面連接不上問題的專業分析

在日常的企業IT管理中&#xff0c;服務器遠程桌面連接是一個重要的操作功能。然而&#xff0c;有時會出現服務器網絡通暢&#xff0c;但遠程桌面無法連接的情況。 問題分析 1. 防火墻或安全組設置問題&#xff1a;服務器的防火墻或安全組可能阻止了遠程桌面連接的端口&#xf…

adobe安裝“Error:SyntaxError:JSON Parse error:Unexpec

mac電腦安裝Adobe時&#xff0c;會提示錯誤“Error:SyntaxError:JSON Parse error:Unexpected EOF”&#xff0c;這是怎么回事兒的&#xff0c;不管您是安裝AI、PS、PR還是LR&#xff0c;如果也遇到相同的問題&#xff0c;可以參考一下方法解決&#xff1a; 「adobe安裝提示錯誤…

Java RMI反序列化總結篇-01

1.java rmi反序列化 RMI 允許一個應用程序訪問另外一個服務器或虛擬機上的對象&#xff0c;方法和服務&#xff0c;它使遠程方法調用就像在本地調用一樣簡單。它為用戶屏蔽了底層的網絡傳輸細節&#xff0c;使用的時候只需適當處理異常即可。所以 RMI 是非常容易使用的&#x…

Kubernetes集群安裝

Kubernetes集群安裝 環境準備 192.168.1.53 k8s-master 192.168.1.52 k8s-node-1 192.168.1.51 k8s-node-2 設置三臺機器的主機名&#xff1a; Master上執行&#xff1a; [rootlocalhost ~]# hostnamectl --static set-hostname k8s-masterNode1上執行&#xff1a; [ro…

vue3+vite項目部署服務器,選擇非根目錄訪問

背景 vue3vite項目&#xff0c;需要部署服務器。 但是根目錄已經部署了另外一個項目A了&#xff0c;這個時候要在部署另外一個項目B。 問題 比如你的地址是http://test.com 之前直接輸入http://test.com即可訪問A項目 如果B項目也這么干的話就沖突了 訪問A&#xff1a;http…

哪款骨傳導耳機最值得入手?精選5款頂尖配置的骨傳導耳機,閉眼入也不踩雷!

作為一名有著多年工作經驗的數碼博主&#xff0c;我見證了無數因盲目追求新穎而引發的聽力問題。在此&#xff0c;我必須鄭重提醒大家&#xff0c;雖然市面上充斥著眾多聲稱能提供卓越音質和佩戴舒適度的骨傳導耳機品牌&#xff0c;但它們之間存在大量劣質產品&#xff0c;這類…

centos7安裝zabbix-server

zabbixan-server安裝 環境安裝zabbix安裝zabbix配置apachezabbix-UI前端配置修改zabbix為中文語言 環境 準備&#xff1a; centos7系統、mysql數據庫/MariaDB數據庫 mysql數據庫可參照&#xff1a;https://blog.csdn.net/weixin_61367575/article/details/138774428?spm1001.…

算法-卡爾曼濾波之卡爾曼濾波的第二個方程:預測方程(狀態外推方程)

在上一節中&#xff0c;使用了靜態模型&#xff0c;我們推導出了卡爾曼濾波的狀態更新方程&#xff0c;但是在實際情況下&#xff0c;系統都是動態&#xff0c;預測階段&#xff0c;前后時刻的狀態是改變的&#xff0c;此時我們引入預測方程&#xff0c;也叫狀態外推方程&#…

企業為什么進行大數據遷移以及注意事項

在當今數字化時代&#xff0c;數據的遷移成為了企業優化其數據架構、提高數據處理能力、確保業務連續性和數據安全的關鍵步驟。企業可能出于多種原因&#xff0c;如成本效益、性能提升、系統升級、數據集中管理或云服務集成等&#xff0c;選擇將數據從一個存儲系統遷移到另一個…

Spring Boot 整合訊飛星火3.5通過接口Api接口實現聊天功能(首發)復制粘貼即可使用,后續更新WebSocket實現聊天功能

程序員必備網站&#xff1a; 天夢星服務平臺 (tmxkj.top)https://tmxkj.top/#/ 1.pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><depen…

html5關于WebSocket的一些特點與用例

WebSocket通信機制是一種在單個TCP連接上進行全雙工通信的協議&#xff0c;它允許服務器主動向客戶端推送數據&#xff0c;而無需等待客戶端的請求。以下是WebSocket通信的主要機制&#xff1a; 握手協議&#xff1a;WebSocket通信的第一步是通過HTTP協議進行握手。當客戶端發…

C++ QT設計模式:訪問者模式

基本概念 訪問者模式&#xff08;Visitor Pattern&#xff09;是一種行為型設計模式&#xff0c;它允許你在不改變被訪問類的前提下&#xff0c;定義對其進行操作的新操作。 實現的模塊有&#xff1a; ObjectStructure&#xff08;對象結構&#xff09;&#xff1a;用于存儲…

輕松拿下指針(5)

文章目錄 一、回調函數是什么二、qsort使用舉例三、qsort函數的模擬實現 一、回調函數是什么 回調函數就是?個通過函數指針調?的函數。 如果你把函數的指針&#xff08;地址&#xff09;作為參數傳遞給另?個函數&#xff0c;當這個指針被?來調?其所指向的函數 時&#x…

計算模型的邊界

https://github.com/libigl/libigl.git 這是幾何計算庫&#xff0c;可以計算出模型的邊界 #define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <igl/boundary_loop.h>#include <igl/list_to_matrix.h>int main(){std::vector<std::vector<…