自動化測試的概念

文章目錄

    • 自動化測試能夠取代人工測試嗎?
    • 回歸測試
    • 自動化分類
    • 自動化測試金字塔
      • 為啥單元測試的性價比這么高呢?
      • 那為啥UI自動化測試的性價比沒有組件測試的高呢?
    • web自動化測試
      • 舉例引入
      • 自動化測試的準備工作
      • 自動化測試的簡單示例

自動化測試能夠取代人工測試嗎?

測試主要由人工測試,通過自動化測試來輔助測試
自動化測試不一定比人工測試更能保障系統的可靠性,自動化測試也需要測試人員進行設計,后續如果有功能的變更,自動化測試也需要進行不定期的維護和更新。

回歸測試

由于軟件在不斷的迭代更新,因此通常具有非常多的版本。當新的版本即將上線,意味著有用戶使用新的版本,也有用戶在使用舊的版本!因此新版本和舊版本都需要執行測試

由于舊版本的一般不會再有功能變更,這時候自動化測試就是一個很好的選擇。用自動化測試去測舊版本,這就叫回歸測試

看下面的例子,假如說對于我們的一款購物軟件,我們在新版本中添加了一項功能:查看瀏覽記錄。那新版本在測試的時候,是不是只需要測新添加的功能呢?以前的老功能需不需要重新測呢?

答案是以前的老功能也要測,因為新增的代碼很有可能會對以前的老代碼產生影響,為了確保以前的功能不受影響,我們必須也要對以前的老功能進行測試
在這里插入圖片描述

自動化分類

  • 瀏覽器打開的軟件

    • web前端
    • 接口
      • 請求參數
      • 請求體
      • 響應內容
      • 狀態碼
  • 終端可以打開的軟件/APP

    • 前端(客戶端)
    • 接口

從上面我們可以看到,無論是web還是app,我們都需要進行前端測試和接口測試,具體來說就是要做

  1. 接口自動化測試
  2. 前端自動化測試
    • 凡是界面上肉眼可以看到的東西都需要執行測試
    • web界面測試
    • 客戶端界面測試

自動化測試金字塔

這個圖是啥意思呢?就是說你越往上去這個測試花費的時間和精力就越多。要往下去,這個測試的投資回報率就越高。

在這里插入圖片描述
大家非常明顯的可以看出來。單元測試是花費時間精力最少的。投資回報率最高的。手動測試是花費時間最多,投資回報率最低的。
在這里插入圖片描述

為啥單元測試的性價比這么高呢?

這主要是因為對于一份剛剛寫好的代碼,代碼的作者,也就是開發人員是非常熟悉的。我們讓開發人員在寫完代碼之后順手進行一個單元測試,是非常容易的,因為他不需要額外花時間來熟悉代碼了

那為啥UI自動化測試的性價比沒有組件測試的高呢?

自動化測試其實就是我們理解的前端測試,而API集成組件測試其實就是接口測試。所以這個問題問的實際上就是前端測試為什么比接口測試要麻煩

這個問題就很簡單。因為前端可以看到的元素非常多:文字、圖片、輸入框、按鈕……每個元素的大小、顏色、形狀等等都需要進行測試

就是由于前端涉及到的不可靠因素太多了,編寫前端自動化腳本相較于接口自動化腳本而言難度會大一些,消耗的人力和時間的成本也會更大一些

前面我們說的都是理想狀態下的金字塔。實際業是實際業務中金字塔長得是下面這樣的,原因主要就是開發人員不太重視單元測試

在這里插入圖片描述

web自動化測試

舉例引入

我們先看一個例子
測試目標:百度搜索關鍵詞“迪麗熱巴”

  • 手工測試:
    1. 點擊瀏覽器
    2. 在網址欄中輸入百度網址,輸入回車,進入百度網站
    3. 在百度網站的搜索框中輸入關鍵詞“迪麗熱巴”,然后回車
  • 自動化測試:
    1. 打開瀏覽器
    2. 輸入百度網址:https://www.baidu.com
    3. 找到輸入框,輸入關鍵詞“迪麗熱巴”
    4. 點擊“百度一下”按鈕

讀完上面的話,是不是感覺比較迷糊?這手工測試和自動化測試。感覺干的事情都是一樣的呀,似乎沒什么區別?你的感覺沒錯,他們干的事情確實沒啥區別,最大的區別在于驅動計算機進行測試的角色不同:手工測試是人來驅動,而自動化測試則是程序驅動。

在這里插入圖片描述

自動化測試的準備工作

那這時候有人就要問了,區別我理解了,但我還是不明白,你程序到底如何去驅動瀏覽器進行測試呢?

很簡單,只需要安裝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"又是啥意思啊?

  1. By 是 Selenium 提供的一個類,用于指定定位網頁元素的方式。
  2. By.CSS_SELECTOR 表示 使用 CSS 選擇器來定位元素
  3. 在 CSS 選擇器中:# 符號表示 “匹配具有指定 id 屬性的元素”,kw是搜索框對應的選擇器定位。"#kw"表示查找網頁中 id=“kw” 的元素。

到這里大家肯定還有問題,你咋知道搜索框對應的選擇器定位是kw 呢?

我們可以通過網頁的開發者模式,來查看界面中某個組件的詳細信息,里面就有組件的選擇器定位

在這里插入圖片描述

在這里插入圖片描述
通過selenium編寫的自動化腳本執行流程
在這里插入圖片描述

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

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

相關文章

OSPF故障排查實戰:如何通過一條命令精準定位網絡掩碼不匹配問題

掌握display ospf error命令的解讀技巧,快速解決OSPF鄰接關系建立失敗難題。一、問題背景與場景引入 在網絡運維工作中,OSPF(開放最短路徑優先)協議作為主流的內部網關協議,其穩定運行至關重要。然而,在實際…

Redis----如何引入分布式鎖

一、概述首先引入分布式鎖指的是應用程序引入,不是Redis本身引入,Redis作為中間件可以作為分布式鎖的一個典型實現方案,同時也有一些其他的實現方案。分布式鎖指的是一個/組程序,使用Redis實現的話就是通過添加一個特殊的Key-Valu…

prometheus-2.42.0.linux-amd64.tar.gz 安裝配置展示

一、prometheus 1.1解壓文件 # tar -xzvf prometheus-2.42.0.linux-amd64.tar.gz -C ~/apps/ prometheus-2.42.0.linux-amd64/ prometheus-2.42.0.linux-amd64/NOTICE prometheus-2.42.0.linux-amd64/consoles/ prometheus-2.42.0.linux-amd64/consoles/index.html.example p…

Linux 標準輸入 標準輸出 標準錯誤

目錄一. 簡介二. 常見用法2.1 輸出重定向2.2 錯誤重定向2.3 同時重定向標準輸出 錯誤2.4 輸入重定向2.5 特殊設備三. 這樣設計的好處3.1 區分正常信息和錯誤信息3.2 方便調用方腳本處理3.3 與管道結合時更清晰四. 案例4.1 if判斷4.2 ls查詢一. 簡介 ?在 Linux/Unix 中&#…

零基礎新手小白快速了解掌握服務集群與自動化運維(二)Linux Journalctl命令、Journalctl日志持久化存儲

Linux提供了一個強大的日志系統,它可以跟蹤和記錄系統的各種活動。在這個系統中,journalctl是一個非常重要的工具,用于查詢和操作由systemd進程管理的日志。 本文將深入探討journalctl命令,介紹其基本使用、高級選項及示例等內容…

【學習】【js】棧數據結構

棧 棧是一種遵從后進先出(LIFO)原則的有序集合。新添加或待刪除的元素都保存在棧的同一端,稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。 基于數組的棧 時間復雜度O(n),占用較多的…

【Linux】基本指令 · 下

alias 指令起別名為什么 ls -l 指令等價于 ll 指令呢?指令就是可執行程序,和我們自己寫的代碼編譯好的程序,沒有本質區別! 指令在系統的某一個位置存在! 執行指令前,現在系統中查找對應的指令指令在根目錄下…

計算機視覺(opencv)實戰二十二——指紋圖像中提取特征點,計算兩兩指紋之間的相似度

指紋識別原理與代碼實現詳解指紋識別是一種常見的生物特征識別技術,廣泛應用于門禁系統、手機解鎖、考勤打卡、身份認證等場景。其核心思想是:從指紋圖像中提取特征點,計算兩幅指紋之間的相似度,并根據相似度判斷是否為同一人。本…

Linux基礎之部署mysql數據庫

文章目錄一、環境準備二、源碼解壓與依賴三、CMake 編譯配置四、配置 MySQL權限管理修改配置文件 /etc/my.cnf五、環境變量設置六、數據庫初始化七、服務管理八、賬號密碼管理一、環境準備 yum -y install gcc gcc-c ncurses ncurses-devel bison cmakegcc / gcc-c&#xff1a…

代碼審計-PHP專題原生開發文件上傳刪除包含文件操作監控Zend源碼解密1day分析

快速分析脆弱:1、看文件路徑2、看代碼里面的變量(可控)3、看變量前后的過濾文件安全挖掘點:1、腳本文件名2、應用功能點3、操作關鍵字文件上傳,文件下載(讀取),文件包含,文件刪除等emlog-文件上…

零基礎搭建 Hexo 博客:從本地到 GitHub Pages 全流程指南

零基礎搭建 Hexo 博客:從本地到 GitHub Pages 全流程指南 Hexo 是一個快速、簡潔且高效的博客框架,支持使用 Markdown 來編寫文章,并能快速生成靜態網頁,非常適合想要搭建個人博客的同學。本文將帶你從零開始,本地搭建…

Git 簡介

Git 是目前全球最流行的分布式版本控制系統(Distributed Version Control System, DVCS),核心作用是追蹤文件修改歷史、支持多人協同開發,并能高效管理代碼(或任何文本類文件)的版本迭代。它由 Linux 內核創…

后端Web實戰-Spring原理

目錄 1. 配置優先級 2. Bean管理 2.1 獲取Bean 2.2 Bean作用域 面試題:Lazy是如何解決循環依賴問題的? 2.3 第三方Bean 3. SpringBoot原理 3.1 起步依賴 3.2 自動配置 3.2.1 概述 3.2.2 自動配置的原理及常見方案 3.2.2.1 概述 3.2.2.2 方案…

在 Qoder 等 AI 二創 IDE 里用 VS Code Remote-SSH 的“曲線連接”實戰

目標:讓你在 Qoder 等在線/AI 輔助 IDE 中,也能像本地 VS Code 一樣通過 Remote-SSH 連接到自己的遠程服務器進行開發。 前提:只在你擁有或被授權的服務器上使用,遵守所用平臺的條款與限制。兩句話說清楚 先用本地 VS Code 正常連…

python發送請求SSL驗證設置

這個錯誤通常是由于SSL/TLS握手失敗導致的,可能原因包括證書驗證問題、不兼容的加密協議或網絡連接中斷。以下是幾種解決方案,按推薦順序排列: 方案一:臨時禁用SSL驗證(快速測試) response requests.get(u…

工廠自動化正從 “人工堆疊” 向 “設備替代” 快速轉變

?人工進行零件排列,雖在操作靈活性上有一定表現,但實際應用中存在明顯短板,對工廠自動化轉型形成制約。從成本來看,一名工人日均工資約數百元,若需 5-6 名工人協同作業,月均人力成本易突破萬元&#xff0c…

中標麒麟7.4部署gitlab-runner

1. 部署環境 本次部署環境完全斷網。需要離線下載gitlab-runner及其依賴。 本次部署環境為中標麒麟7.4。目前機器上部署了gitlab,安裝了maven。 2. 部署步驟 2.1 在外部下載好依賴 我首先在騰訊云上布置了一個centos7.9的虛擬機,沒有安裝任何東西。 …

在 IDEA 2024 創建 Vue 項目(保姆級)

目錄 一、 前后端分離 1. 簡介 2. 實現前后端分離的常用前端框架 3. 前后端分離和動靜分離 3.1 前后端分離: 3.2 動靜分離: 二、 Vue.js概述 1. 簡介 2. SPA介紹 2.1 優點 2.2 缺點 3. MVVM介紹 3.1 示例 三、 名詞解釋 1. Node.js 2. npm 3. webpack 4. Vue…

Coze源碼分析-資源庫-創建知識庫-后端源碼-應用/領域/數據訪問

3. 應用服務層 3.1 知識庫應用服務 文件位置: backend/application/knowledge/knowledge.go func (k *KnowledgeApplicationService) CreateKnowledge(ctx context.Context, req *dataset.CreateDatasetRequest) (*dataset.CreateDatasetResponse, error) {// 1. 轉換文檔類型d…

Shopify指紋手機矩陣:無限擴店,橫掃FB/GG廣告封號風險

一、 為什么需要為Shopify使用指紋手機?雖然Shopify不會因為你多開店而封號,但以下場景需要隔離環境:規避廣告平臺關聯:這是最核心的用途。你會用Facebook、Google、TikTok等廣告平臺為你的Shopify店鋪引流。這些廣告平臺嚴格禁止…