軟件測試金字塔

軟件測試金字塔

 在敏捷方法中,持續集成是其基石,持續集成的核心是自動化測試。下面這篇關于測試金字塔的文章,來自大師Martin Fowler。

  測試金字塔的概念來自Mike Cohn,在他的書Succeeding With Agile中有詳細描述:測試金字塔最底層是單元測試,然后是業務邏輯測試,最后是端到端的測試(GUI或CLI)。

  在我的職業生涯中,很多次聽到過自動化測試,自動化測試意味著端到端的通過界面完成的測試。完成這種自動化測試的工具一般是錄制然后回放,初始使用很容易,不需要任何編碼技能。

  不過你使用一段時間后就會遇到很多麻煩,GUI的自動化測試運行速度都很慢導致版本發布速度下降,同時完成自動化測試的軟件,一般都是商業軟件需要license因此只能在特定的機器上部署,且不容易通過腳本集成。

  GUI測試用例還很脆弱,如對系統的一些修正可能導致很多用例的失敗,這時候你需要重新錄制。你可以放棄錄制的方法來解決這個問題,通過寫GUI測試代碼,但是這樣效率非常低。就算你已經很精通了GUI測試代碼的編寫,端到端的GUI測試用例也很容易出現不可預期結果的問題-一些用例成功一些用例失敗,因此,基于GUI的自動化測試是脆弱、耗時(包括用例維護和執行)的。所以測試金字塔要表達的是:底層應當有更多的單元測試和接口測試和邏輯測試,GUI測試用例能覆蓋到主業務流程即可。

  我們注意到測試金字塔中間這一層:服務。業務服務的測試,我稱其為皮下測試,因為這一層就在用戶界面GUI下面。服務測試可以完成很多端到端的功能測試而不需要像GUI自動化測試那樣需要使用復雜的框架。如一個Web應用,你可能使用自己寫的腳本測試端到端的邏輯,而GUI自動化你可能會使用Selenium這個工具。

  測試金字塔發源與敏捷測試實踐,使用測試金字塔原則很容易將你項目中的測試用例達到平衡的狀態。在很多項目中都混淆了“端到端測試”,“UI測試”,“面向用戶的測試”的概念,其實他們都是測試的不同角度。例如你有一個javascript開發的應用,那UI部分就需要用javascript的單元測試工具Jasmine完成大部分的UI功能測試;復雜的業務邏輯需要使用面向用戶的表單(form)來測試,而不僅僅是底層的單元測試。

  因此我通常將上層的測試稱為“測試的第二防線”,如果你的一個上層測試用例執行失敗,表現出來不僅僅是這個功能有問題,還說明你遺漏了這個地方的單元測試,因此你在修復功能之后,還需要補充相關的單元測試用例。








====================================分割線================================



最新內容請見作者的GitHub頁:http://qaseven.github.io/

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

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

相關文章

使用pm2守護你的.NET Core應用程序

簡介PM2是常用的node進程管理工具,它可以提供node.js應用管理,如自動重載、性能監控、負載均衡等。同類工具有Supervisor、Forever等。pm2是一個進程管理工具,可以用它來管理你的node進程,并查看node進程的狀態,當然也支持性能監控…

C-指針02 2017/11/24

/* 復習 1.指針類型 int *指針類型 指針指向的變量類型指針指向哪個變量2.基本數據類型 4種指針類型 存放的地址 和系統有關系 4個字節數組類型結構體 枚舉 聯合3.指針加法減法 p 和數組搭配使用4.兩個運算符 *取值(解引用) &取地址5. *(pi) p[i] …

程序員搞笑段子

轉載于:https://www.cnblogs.com/Zhusi/p/10083474.html

學習之旅——工作記錄日志2017.7.09

1.例子:在dev_lala上開發完畢后,切換到dev分支,在此分支上pull最新的代碼來保證dev上的代碼是最新的。在dev分支上git branch -b haha一個新的分支haha, 用git log dev_lala查看提交記錄,將我自己的幾個記錄加到haha分…

Git常用命令與基本操作

Git操作指令系統配置基本命令獲取/刪除Git倉庫更新記錄撤銷操作遠程倉庫的使用分支系統系統配置 git config 為系統自帶的配置指令,它可以控制GIT的行為和外觀 配置用戶信息 git config --global user.name "John Doe" git config --global user.email …

CA周記 - 在 Azure ML 上用 .NET 跑機器學習

.NET 是一個跨平臺,全場景應用的開源技術。你有在用 .NET 做機器學習/深度學習的應用嗎?如果從框架角度,ML.NET / Tensorflow.NET / 不斷在進步的 TorchSharp 通過幾年的發展已經開始穩定,但如果在一些大型項目上,特別…

iOS10 優化APP首次安裝網絡權限提示方案

我剛經歷了一場末日(停電),特別是在你想寫文檔的時候。。。 言歸正傳,今天的問題是解決iOS10系統下首次按鈕APP彈出的網絡權限提示所帶來了問題以及優化。 起因 查了相關文章知道由于大陸工信部出臺的新規指出,應用在未…

su命令

從一個用戶切換到另一個用戶:su - ceshi(ceshi是用戶名) 查看當前用戶:whoami 在不切換用戶的情況執行另一個用戶的命令:例:su - -c "touch /tmp/111.txt" admin 若用戶沒有加目錄需要添加家目錄,并更改所有…

C語言基礎知識【數據類型】

C 數據類型1.在 C 語言中,數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。2.C 中的類型可分為以下幾種:序號 類型與描述1 基本類型:它們是算…

PS批量替換內容

在制作圖片物料的時候,有時會碰到需要制作大量內容格式一致,但部分文字或圖片不同的圖片,這里我們使用PS的變量功能 物料準備:準備好需要替換的圖片和文字,使用excel制作出需要替換的內容,第一行name和pic…

在 .NET 中執行 JavaScript 代碼

你好,這里是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和組件,希望對您有用!Jint 簡介如果您想在您的 .NET 程序中使用 Javascript,那么我推薦您使用 Jint。Jint 是適用于 .NET 的 開源 Javascript 解…

【本周面試題】第5周 - 開發工具相關

待整理轉載于:https://www.cnblogs.com/padding1015/p/10095424.html

JS 返回上一步(退回上一步上一個網頁)

鏈接式&#xff1a; <a href"javascript:history.go(-1)">返回上一步</a> <a href"<%Request.ServerVariables("HTTP_REFERER")%>">返回上一步</a> 按鈕式&#xff1a; <INPUT name"pclog" type&quo…

jmeter多用戶登錄跨線程組操作傳值

項目需求&#xff1a; 需要登錄兩個用戶A、B&#xff0c;用戶A操作完后會通知B&#xff0c;然后B再操作&#xff0c;B操作完結束或者再通知A。 實現思路&#xff1a; 1. 設置兩個線程組Ⅰ、Ⅱ&#xff0c;組Ⅰ添加cookie管理器&#xff0c;里面添加用戶A的操作&#xff1b;組Ⅱ…

手動修改美化7zip圖標 - 附替換文件

手動修改7zip圖標理論知識制作ico圖標文件替換資源重建圖標緩存效果圖替換文件7-Zip的自帶圖標是公認的丑&#xff0c;所以網上有很多7-Zip的圖標美化工具&#xff0c;用的最多的就是 7-Zip Theme Manager&#xff0c;自帶很多主題&#xff0c;但是最近我再使用7zTM修改圖標是卻…

.NET性能優化-復用StringBuilder

在之前的文章中&#xff0c;我們介紹了 dotnet 在字符串拼接時可以使用的一些性能優化技巧。比如&#xff1a;為StringBuilder設置 Buffer 初始大小使用ValueStringBuilder等等 不過這些都多多少少有一些局限性&#xff0c;比如StringBuilder還是會存在new StringBuilder()這樣…

如何使用vue組件搭建網頁并打包發布

vue組件化項目搭建及編譯打包發布引言開發環境開發環境介紹開發環境安裝使用模板創建項目編譯及打包發布引言 最近開始學習Vue&#xff0c;Vue 是一個前端框架&#xff0c;特點是數據綁定和組件化。網上很多教程&#xff0c;數據綁定和組件學習起來也都不困難&#xff0c;但是…

MyBatis 分頁插件 PageHelper

插件官網 簡介&#xff1a; 支持常見的 12 種數據庫。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等&#xff1b; 支持常見的RowBounds(PageRowBounds)&#xff0c;PageHelper.startPage 方法調用&#xff0c;Mapper 接口參數調用&#xff1b; 獲取maven配置 示例&…

Facebook揭秘其應用測試平臺,并開源核心技術

本周&#xff0c;Facebook讓一群記者參觀了它位于俄勒岡州普賴恩維爾市的數據中心&#xff0c;在這個過程中也展示了他們的一個移動應用測試實驗室&#xff0c;用來測試Facebook app、 Messenger 和Instagram。 目前 這個實驗室總共含有60個機架&#xff0c;每個機架上放置32臺…

責任鏈模式 職責鏈模式 Chain of Responsibility Pattern 行為型 設計模式(十七)

責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;職責鏈模式意圖 使多個對象都有機會處理請求&#xff0c;從而避免請求的發送者和接受者之間的耦合關系將這些對象連接成一條鏈&#xff0c;并沿著這條鏈傳遞請求&#xff0c;直到有一個對象處理它為止。責任…