自動化測試與功能測試詳解

🍅?點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快????

什么是自動化測試?

自動化測試是指利用軟件測試工具自動實現全部或部分測試,它是軟件測試的一個重要組成 部分,能完成許多手工測試無法實現或難以實現的測試。能夠正確、合理地實施自動測試,可以 快速、全面地對軟件進行測試,從而提高軟件質量,節省經費,縮短軟件發布周期。

自動化測試一般分為UI 自動化測試和接口自動化測試。

UI自動化測試是指基于界面元素的自動化測試。需要先定位界面元素的路徑,然后通過腳本 實現自動化。這種方法因為界面需求的變更頻繁,腳本更新頻繁,不利于后期的維護工作,造成 自動化工作的成本巨大,已經慢慢被各大公司所淘汰。

隨即演變出的就是接口自動化了。接口自動化是指模擬程序接口層面的自動化,由于接口不 易變更維護成本小,所以它深受各大公司喜愛。接口自動化也是本書的重點。它包含兩個部分, 功能性的接口自動化測試和并發接口自動化測試。

自動化測試與手工測試的區別

自動化測試和手工測試并沒有高低貴賤之分,雖然劃分在不同的階層,但只是出于對測試人 員個人的價值評判而已。以下詳細解析這兩者的區別。

1.測試目的不同

雖然都是測試,但這2種測試的目的卻是截然相反的。

  • 手工測試的目的在于通過“破壞”發現系統有bug。
  • 自動化測試的目的在于“驗證”系統沒有bug。

當測試系統處于前期不穩定的時候,做自動化測試將毫無意義,因為程序運行到一半就會因 為某個bug而停止的,而當這個bug未被修復之前所有的自動化測試都會卡在這里無法往下執行。 而當測試系統處于穩定的時候,通過手工測試重復著一樣的操作也會變得煩瑣和枯燥,所以這兩 者在不同的測試階段都有著不可替代的作用。

2.覆蓋范圍不同

除了目的的不同,覆蓋范圍也是不同的。

  • 手工測試可以盡可能地覆蓋測試系統的各個角落。
  • 自動化測試只能覆蓋測試系統的主要功能。

試想把所有的測試用例都弄成自動化是一件多么美好的事情,但代價實在太大了,投入的時 間和產出完全不成正比,不夸張地說如果要做到完全自動化測試,所需要的代碼量會遠遠超過開 發編寫程序的代碼量。所以自動化測試只能挑一些重要和穩定的功能來做,而更多的一些細節的 測試還需要手工測試來完成。

3.智能判斷不同

自動化和手工測試還有一個最大的區別是智能判斷方面。 計算機程序對于人而言是絕對的服從和誠實的。

舉個例子,用計算機程序去計算1+1,結果必然等于2(除非你的程序本身寫的有bug, 這不是計算機程序的問題),而如果問一個人1+1等于幾,可能會有一個答案“1+1等于我 們”,那這個結果是對還是錯呢?如果交給程序判斷必然是錯的。因此智能判斷是自動化測試的 瓶頸,一個操作出現多種結果可能都是對的,但又可能都是錯的。

再舉個電商的例子,比如有個特價產品只有一份,需要秒殺,有可能搶到,也有可能搶不到。 對于能搶到來說,只有“他”1個人搶到是對的,如果多個人都能搶到那就是錯的。對于不能搶 到來說,已經有1個人搶到就是對的,如果沒有一個人搶到的話就是錯的,這個時候自動化測試 程序該如何判斷結果的對錯呢?這樣的情況比比皆是,雖然有辦法通過程序去預置各種條件讓結 果唯一化,但需要花大量的時間和精力去優化自動化測試代碼,并且還需要分多個自動化測試程 序完成,這個時候還不如人工介入測試進行判斷來得方便。

這樣看來其實自動化測試能做的還是非常有限的,而更多的時候還是需要手工測試,利用工具也好,邏輯判斷也好,又或者讓開發修改程序來配合測試也好,總之能達到測試的最終目的就好,從這個意義上來說手工測試也并非沒有技術含量,而自動化測試也沒有那么無所不能。

自動化測試的困境

自動化測試具有很大的優勢,一勞永逸地用程序代替人力,人力干活8小時,而程序可以24小時不停止地干活。但是自動化測試還有一個很大的困境,即由于自動化測試很難持續維護,導致在大多數公司無法普及這種測試方式。

IT行業的競爭日益激烈,產品要保持自身的競爭力就需要不斷高速迭代新版本、新功能。這就意味了原來寫的自動化測試程序變得不可用了(其中的部分程序),而留給測試人員的時間又往往是很少的,于是只能手工測試保證按時上線,等上完線之后可能過幾天又有新的功能要測試。留給測試的時間不夠完成自動化測試程序的維護更新,周而復始,久而久之,原來的自動化測試程序已經和當前版本相去甚遠了,最后自動化測試就不了了之了。我想這就是人們常說的“愿望是美好的,但現實總是殘酷的”。

既然知道是困境,必然就是很難解決的,那有沒有折中的辦法來減少一定的維護成本,又可以達到一定的自動化測試的目的呢?回答這個問題之前先要看透自動化測試的核心本質,就是元素識別+元素操作+驗證結果,大多數自動化測試工具都會提供元素識別和元素操作(鼠標點擊、鍵盤輸入、屏幕 touch等),只有在驗證結果的時候需要寫代碼提取實際結果,然后和預期結果進行比較,最后得出測試通過或者不通過的結論。

其實對于寫代碼的部分來說都是通用的,不同的地方在于獲取實際結果的方式變更或者預期結果的變更,工作量并不多。真正煩瑣之處在于元素的識別,每個元素其實都由唯一標識來識別,這樣才能保證不會操作錯元素,好處在于如果元素不變,那唯一的標識也永遠不會識別錯,這是自動化測試可以實施的基礎。但有利自然有弊,一旦元素變了,原來的標識就不可用了,那自動化測試就無法實施了。說到這里如果可以繞過元素識別這一步,將元素操作以接口的形式通過腳本完成,就可以拋棄重量級的自動化測試工具,而通過測試腳本直接實現接口自動化測試。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。

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

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

相關文章

MySQL全量,增量備份與恢復

目錄 一.MySQL數據庫備份概述 1.數據備份的重要性 2.數據庫備份類型 3.常見的備份方法 二:數據庫完全備份操作 1.物理冷備份與恢復 2.mysqldump 備份與恢復 3.MySQL增量備份與恢復 3.1MySQL增量恢復 3.2MySQL備份案例 三:定制企業備份策略思路…

Ubuntu 安裝 Nginx

Nginx 是一個高性能的 Web 服務器和反向代理服務器,同時也可以用作負載均衡器和 HTTP 緩存。 Nginx 的主要用途 用途說明Web服務器提供網頁服務,處理用戶的 HTTP 請求,返回 HTML、CSS、JS、圖片等靜態資源。反向代理服務器將用戶請求轉發到…

人工智能 機器學習期末考試題

自測試卷2 一、選擇題 1.下面哪個屬性不是NumPy中數組的屬性( )。 A.ndim B.size C.shape D.add 2.一個簡單的Series是由( )的數據組成的。 A.兩…

使用阿里云CLI調用OpenAPI

介紹使用阿里云CLI調用OpenAPI的具體操作流程,包括安裝、配置憑證、生成并調用命令等步驟。 方案概覽 使用阿里云CLI調用OpenAPI,大致分為四個步驟: 安裝阿里云CLI:根據您使用設備的操作系統,選擇并安裝相應的版本。…

K8S Svc Port-forward 訪問方式

在 Kubernetes 中,kubectl port-forward 是一種 本地與集群內資源(Pod/Service)建立臨時網絡隧道 的訪問方式,無需暴露服務到公網,適合開發調試、臨時訪問等場景。以下是詳細使用方法及注意事項: 1. 基礎用…

23、DeepSeek-V2論文筆記

DeepSeek-V2 1、背景2、KV緩存優化2.0 KV緩存(Cache)的核心原理2.1 KV緩存優化2.2 性能對比2.3 架構2.4多頭注意力 (MHA)2.5 多頭潛在注意力 (MLA)2.5.1 低秩鍵值聯合壓縮 (Low-Rank Key-Value …

MySQL OCP試題解析(2)

試題如下圖所示: 一、題目背景還原 假設存在以下MySQL用戶權限配置: -- 創建本地會計用戶CREATE USER accountinglocalhost IDENTIFIED BY acc_123;-- 創建匿名代理用戶(用戶名為空,允許任意主機)CREATE USER % IDENTI…

深度學習Y7周:YOLOv8訓練自己數據集

🍨 本文為🔗365天深度學習訓練營中的學習記錄博客🍖 原作者:K同學啊 一、配置環境 1.官網下載源碼 2.安裝需要環境 二、準備好自己的數據 目錄結構: 主目錄 data images(存放圖片) annotati…

英偉達Blackwell架構重構未來:AI算力革命背后的技術邏輯與產業變革

——從芯片暴力美學到分布式智能體網絡,解析英偉達如何定義AI基礎設施新范式 開篇:當算力成為“新石油”,英偉達的“煉油廠”如何升級? 2025年3月,英偉達GTC大會上,黃仁勛身披標志性皮衣,宣布了…

CurrentHashMap的整體系統介紹及Java內存模型(JVM)介紹

當我們提到ConurrentHashMap時,先想到的就是HashMap不是線程安全的: 在多個線程共同操作HashMap時,會出現一個數據不一致的問題。 ConcurrentHashMap是HashMap的線程安全版本。 它通過在相應的方法上加鎖,來保證多線程情況下的…

Android開發-設計規范

在Android應用開發中,遵循良好的設計規范不僅能夠提升用戶體驗,還能確保代碼的可維護性和擴展性。本文將從用戶界面(UI)、用戶體驗(UX)、性能優化以及代碼結構等多個維度探討Android開發中的設計規范&#…

泛型加持的策略模式:打造高擴展的通用策略工具類

一、傳統策略模式的痛點與突破 1.1 傳統策略實現回顧 // 傳統支付策略接口 public interface PaymentStrategy {void pay(BigDecimal amount); }// 具體策略實現 public class AlipayStrategy implements PaymentStrategy {public void pay(BigDecimal amount) { /* 支付寶支…

物聯網從HomeAssistant開始

文章目錄 一、什么是home-assistant?1.核心架構2.集成架構 二、在樹梅派5上安裝home-assistant三、接入米家1.對比下趨勢2.手動安裝插件3.配置方式 四、接入公牛1.手動安裝插件2.配置方式 五、接入海爾1.手動安裝插件2.配置方式 六、接入國家電網 一、什么是home-assistant? …

系統架構-嵌入式系統架構

原理與特征 嵌入式系統的典型架構可概括為兩種模式,即層次化模式架構和遞歸模式架構 層次化模式架構,位于高層的抽象概念與低層的更加具體的概念之間存在著依賴關系,封閉型層次架構指的是,高層的對象只能調用同一層或下一層對象…

計算機圖形學編程(使用OpenGL和C++)(第2版)學習筆記 09.天空和背景

天空和背景 對于 3D 場景,通常可以通過在遠處的地平線附近創造一些逼真的效果,來增強其真實感。我們可以采用天空盒、天空柱(Skydome)或天空穹(Skydome)等技術來模擬天空。 天空盒 天空盒(Sk…

【Leetcode 每日一題】1550. 存在連續三個奇數的數組

問題背景 給你一個整數數組 a r r arr arr,請你判斷數組中是否存在連續三個元素都是奇數的情況:如果存在,請返回 t r u e true true;否則,返回 f a l s e false false。 數據約束 1 ≤ a r r . l e n g t h ≤ 10…

面試題解析 | C++空類的默認成員函數(附生成條件與底層原理)

在C面試中,“空類默認生成哪些成員函數”是考察對象模型和編譯器行為的高頻題目。許多資料僅提及前4個函數,但完整的答案應包含6個核心函數,并結合C標準深入解析其生成規則與使用場景。 一、空類默認生成的6大成員函數 1. ?缺省構造函數? …

視頻編解碼學習7之視頻編碼簡介

視頻編碼技術發展歷程與主流編碼標準詳解 視頻編碼技術是現代數字媒體領域的核心技術之一,它通過高效的壓縮算法大幅減少了視頻數據的體積,使得視頻的存儲、傳輸和播放變得更加高效和經濟。從早期的H.261標準到最新的AV1和H.266/VVC,視頻編碼…

使用Stable Diffusion(SD)中,步數(Steps)指的是什么?該如何使用?

Ⅰ定義: 在Stable Diffusion(SD)中,步數(Steps) 指的是采樣過程中的迭代次數,也就是模型從純噪聲一步步“清晰化”圖像的次數。你可以理解為模型在畫這張圖時“潤色”的輪數。 Ⅱ步數的具體作…

消息隊列如何保證消息可靠性(kafka以及RabbitMQ)

目錄 RabbitMQ保證消息可靠性 生產者丟失消息 MQ丟失消息 消費端丟失了數據 Kakfa的消息可靠性 生產者的消息可靠性 Kakfa的消息可靠性 消費者的消息可靠性 RabbitMQ保證消息可靠性 生產者丟失消息 1.事務消息保證 生產者在發送消息之前,開啟事務消息隨后生…