軟件測試是一種用來促進鑑定軟件的正確性、完整性、安全性和品質的過程,也就是在規定的條件下對程序進行操作以發現程序中的錯誤,衡量軟件的品質並對其是否能滿足設計要求進行評估的過程。
黑盒測試:測試應用程序的功能,而不是其內部結構或運作。測試者不需具備應用程序的代碼、內部結構和編程語言的專門知識。測試者只需知道什麼是系統應該做的事,即當鍵入一個特定的輸入,可得到一定的輸出。測試案例是依應用系統應該做的功能,照規範、規格或要求等設計。測試者選擇有效輸入和無效輸入來驗證是否正確的輸出。此測試方法可適合大部分的軟件測試,例如集成測試和系統測試。
白盒測試:測試應用程序的內部結構或運作,而不是測試應用程序的功能(即黑箱測試)。在白箱測試時,以編程語言的角度來設計測試案例。測試者輸入數據驗證數據流在程序中的流動路徑,並確定適當的輸出,類似測試電路中的節點。
由於時間和成本的約束,軟件測試中一個最爲關鍵的問題就是:“在所有可能的測試用例中,哪個子集能發現最多的錯誤?”。所以在設計測試用例時,白盒測試看重程序邏輯覆蓋的程度(語句覆蓋、條件覆蓋、分支覆蓋),黑盒測試可以使用等價類劃分、邊界值分析、因果圖分析、錯誤猜測等方法來設計測試用例。
單元測試:對軟件組成單元進行測試,其目的是檢驗軟件基本組成單位的正確性,測試的對象是軟件設計的最小單位 - 函數。
集成測試:將程序模塊採用適當的集成策略組裝起來,對系統的接口及集成後的功能進行正確性檢測的測試工作。其主要目的是檢查軟件單位之間的接口是否正確,集成測試的對象是已經經過單元測試的模塊。
系統測試:系統測試主要包括功能測試、界面測試、可靠性測試、易用性測試、性能測試。
迴歸測試:爲了檢測代碼修改而引入的錯誤所進行的測試活動。迴歸測試是軟件維護階段的重要工作,有研究表明,迴歸測試帶來的耗費佔軟件生命週期的1/3總費用以上。
測試驅動開發包括以下三個步驟:
- 爲未實現的新功能或者改進編寫自動化測試。
- 提供通過所有定義的測試的最小代碼量。
- 重構代碼以滿足所需的質量標準。
測試驅動開發的好處在於可以有效的防止軟件迴歸以及提供更有質量的代碼。還有就是驗收測試應該由客戶來進行,客戶通過對使用場景來設計驗收測試,對應用程序是否滿足他們的要求進行客觀、公正的確認。能夠通過單元測試、甚至是系統測試的功能未必能夠通過客戶的驗收測試。
互聯網應用的測試策略:
- 表示層測試(內容測試、站點結構測試、用戶環境(瀏覽器、操作系統等))
- 業務層測試(性能、數據驗證、事務、外部服務)
- 持久層測試(響應時間、數據完整性、容錯性)
移動應用的測試策略:
- 真機測試
- 基於模擬器的測試
Python的標準庫裏有爲編寫單元測試而準備的unittest模塊,執行測試時建議使用pytest或nose2。pytest是一款能夠自動搜索並執行測試的測試執行工具,並且會輸出詳細的錯誤報告。關於單元測試可以看看《Python必會的單元測試框架 - unittest》。
可以安裝testfixtures庫來輔助單元測試,它整合了多種典型配置器,提供了生成目錄、更改系統日期、生成mock對象的功能模塊,這些模塊能夠幫助我們將單元測試與單元測試所依賴的環境分離開。mock 是將測試對象所依賴的對象替換爲虛擬對象的庫,在測試的時候,我們可以爲虛擬對象指定其在被調用時的返回值以及是否發生異常等。
tox能便捷地爲我們準備好執行測試所需的環境。tox會在多個virtualenv環境中搭建測試 環境,然後在這些環境中執行測試並顯示結果。它能夠把測試工具的選項及環境變量等內容統 一起來,所以我們只需執行tox命令即能輕鬆完成所需的測試。
桌面端 - PyAutoGui
移動端 - Appnium
Web端 - Selenium
Selenium是實現Web應用程序的功能測試以及集成測試自動化的瀏覽器驅動測試工具羣。和使用瀏覽器的用戶相同,Selenium可以在瀏覽器進行的鼠標操作、在表單中輸入文字、驗證表單的值等,利用這一點就可以將手動操作變成自動化操作。
- Selenium優點
- 自動化測試用例製作簡單。Selenium提供了Selenium IDE工具,該工具可以捕獲鼠標、鍵盤的操作,然後通過重放功能來重複這些操作,這樣就可以簡單的製作測試用例。
- 支持多種瀏覽器和操作系統。
- Selenium的組件
-
與持續集成工具協作
持續集成指的是頻繁的將代碼集成到主幹。它的好處主要有兩個:
- 快速發現錯誤。每完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易。
- 防止分支大幅偏離主幹。如果不是經常集成,主幹又在不斷更新,會導致以後集成的難度變大,甚至難以集成。
持續集成的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是代碼集成到主幹之前,必須通過自動化測試,只要有一個測試用例失敗,就不能集成。編程大師Martin Fowler曾經說過:“持續集成並不能消除Bug,而是讓它們非常容易發現和改正。”
可以在Jenkins中安裝“Seleniumhq Plugin”插件,這樣就可以將Selenium IDE製作的測試用例保存爲HTML格式並提供給Jenkins來使用,基本步驟是:
-
在執行測試的機器上,從版本控制系統中下載測試套件和測試用例。
-
在執行測試的機器上下載Selenium Server。
-
從Jenkins的“系統管理”中選擇“插件管理”來安裝“Seleniumhq Plugin”。
-
在Jenkins的“系統管理”中選擇“系統設置”並配置“Selenium Remote Control”下的“HTMLSuite Runner”。
-
新建測試用的Jenkins任務並進行配置,配置的內容包括:瀏覽器、起始URL、測試套件和測試結果輸出文件。
配置完成後,就可以執行Jenkins的“立即構建”了。
除了Selenium之外,WebTest、Splinter和RobotFramework也是Web端測試的選擇,其中WebTest可以對WSGI應用執行模擬請求並獲取結果,基本上所有WSGI應用的測試都可以用它;Splinter是對Selenium的二次封裝,使用上更加方便簡單。
- PostMan
- AB
- JMeter
- LoadRunner
- Benchmark Factory
- WAS