亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Python 領域運用之:自動化測試

1. 自動化測試簡介

1.1 手工測試

手工測試是由人逐個的輸入測試用例,然后觀察程序運行結果,和預期結果進行比對。人工測試是一種低效的測試方法,對程序進行修改后,都需要人工重新執行測試用例,屬于典型的重復勞動。

根據 51testing 的《中國軟件測試從業人員調查報告》,在軟件項目的測試環節,手工測試占到 89%,相對開發來說,測試的門檻底,薪資普遍較底,所要求的知識面雖然有一定廣度,但缺乏深度。

因為手工測試人門檻不高,使大量的畢業生、甚至是非專業人員涌入這個行業,從而加劇了這個行業的激烈競爭。對于工作幾年仍處于手工測試的人員來說,都會有強烈的危機感。由于工作的技術含量不高,薪資的漲幅遇到瓶頸,另一方面受到新進入者的威脅,公司花 5K 招來的人能夠勝任測試工作,那么就不會花 8K 招聘人做同樣的工作。

因此,從自身的發展來說,測試人員非常需要通過自動化技術來增加自己有競爭力。

1.2 自動化測試

自動化測試是通過編寫腳本的方式模擬手工測試的過程。通過運行腳本來執行測試用例,代替人工對系統的功能進行驗證,從而節省了大量的人力。

一切通過工具的方式來代替或輔助手工測試的行為都可以看做自動化,包括性能測試、接口測試等,但凡用到測試工具的測試都稱為自動化測試。

自動化測試得到廣泛的應用,在招聘測試職位時,都需要自動化測試經驗。在計算機專業招聘網站,以 “自動化測試” 作為關鍵字進行搜索,能夠搜索到大量的職位,如下圖所示:

圖片描述

1.3 自動化測試的優點和缺點

自動測試的優點:

  • 避免測試人員因重復勞動產生厭倦
  • 提高測試效率
  • 保證每次測試地一致性和可重復性
  • 更好的利用無人值守時間
  • 能夠進行一些手工無法進行的測試

自動測試的缺點:

  • 編寫和維護自動化測試程序需要花費成本
  • 部分測試工作還是依賴手工測試

2. 自動化測試的前提條件

2.1 適合采用自動化測試

考慮否采用自動化測試,需要從三個方面進行權衡:

  1. 軟件需求變動不頻繁

測試腳本的穩定性決定了自動化測試的維護成本。如果軟件需求變動過于頻繁,測試人員需要根據變動的需求來更新測試用例以及相關的測試腳本,而腳本的維護本身就是一個代碼開發的過程,需要修改、調試,必要的時候還要修改自動化測試的框架。如果開發、維護測試腳本的成本高于利用其節省的測試成本,即投入產出比太高,那么自動化測試就失去了意義。

項目中的某些模塊相對穩定,而某些模塊需求變動性很大。我們便可對相對穩定的模塊進行自動化測試,而變動較大的仍是用手工測試。

  1. 項目周期足夠長

軟件測試包含有如下環節:

  • 自動化測試需求的確定
  • 自動化測試框架的設計
  • 自動測試腳本的編寫與調試

這樣的過程本身就是一個測試軟件的開發過程,需要較長的時間來完成。如果項目的周期比較短,沒有足夠的時間去支持這樣一個過程,則無法實施自動化測試。

  1. 自動化測試腳本可重復使用

通常情況下,專職的測試人員對多個產品進行測試,需要考慮自動化測試腳本能否重復使用:

  • 所測試的項目之間是否很大的差異性
  • 所選擇的測試工具是否適應這種差異

如果測試腳本的重復使用率很低,致使其間所耗費的成本大于所創造的價值,自動化測試就失去了意義。

  1. 敏捷開發、頻繁的版本迭代

敏捷開發,增量式開發,持續集成項目由于這種開發模式是頻繁的發布新版本,需要頻繁的回歸測試,自動化能把能從回歸測試中解脫出來測試新的功能。

2.2 不適合采用自動化測試

如果項目具備如下特征,則不適合做自動化測試:

  1. 被測系統或需求不穩定

在自動化測試用例的更新、維護、調試的頻率太高,自動化測試完全得不償失。

  1. 項目時間非常緊張

建自動化測試框架,開發測試腳本需要時間,對時間比較緊張的項目可以先不考慮自動化。

  1. 項目周期很短

測試腳本不能得到重復的利用,不值得花精力去進行自動化測試。

  1. 涉及人的感觀、物理交互等方面的測試

易用性測試、需要人的主觀判斷,涉及物理交互,自動化工具無法完成與物理設備的交互,例如打印、攝像等操作,不適合采用自動化測試。

4. 主流自動化測試框架

4.1 PyUnit 單元測試框架

PyUnit 是 Python 內置的 Python 單元測試框架(The Python unit testing framework),可對程序中的最小可測試單元進行檢查和驗證。它的主要特點如下:

  • 內置的標準模塊,在 Python 3 中,PyUnit 是標準模塊,安裝 Python 后引入 unittest 模塊即可使用
  • PyUnit 是 JUnit 的衍生產品,其工作原理與其他 JUnit 框架十分類似,熟悉 JUnit 的開發者可以很快上手
  • 能夠以簡單的方式運行單個測試用例
  • 能夠快速的生成各種測試報告

PyUnit 是 Kent Beck 和 Erich Gamma 設計的 JUnit 的 Python 版本,是 JUnit 的衍生產品,在工作原理、命名規則上保留了很多 Java 語言的特征。例如,PyUnit 要求所有的測試用例都必須繼承于 TestCast,示例如下:

#!/usr/bin/python3
import unittest

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

class MathTest(unittest.TestCase):
    def testAdd(self):
        self.assertEqual(add(1, 1), 2)

    def testSub(self):
        self.assertEqual(sub(2, 1), 1)

unittest.main()
  • 定義了類 MathTest,繼承于 unittest.TestCase
  • 定義了測試用例 testAdd,測試函數 add
  • 定義了測試用例 testSub,測試函數 sub

4.2 PyTest 測試框架

Pytest 是一個第三方單元測試框架,比內置的 PyUnit 更簡潔和高效,Pytest 主要特點有以下幾點:

  • 簡單靈活,容易上手,測試的可讀性強
  • 支持參數化,可以細粒度地控制要測試的測試用例
  • 能夠支持單元測試、集成測試、功能測試、接口測試多種類型
  • Pytest 具有豐富的第三方插件,并且可以自定義擴展,例如如 pytest-selenium(集成selenium)、pytest-html(完美html測試報告生成)等
  • 可以很好的和 CI 工具結合,例如 jenkins

與其它測試框架相比 Pytest 簡單易學,舉例如下:

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

def test_add():
    assert add(1, 1) == 2

def test_sub():
    assert sub(2, 1) == 1
  • 定義了函數 test_add,它測試函數 add 的功能
  • 定義了函數 test_sub,它測試函數 sub 的功能
  • 運行 pytest ,發現所有名稱以 test_ 為前綴的函數、并運行

憑借著其開源和易學的特點,該工具被質量分析團隊、開發團隊、個人團隊、以及各種開源項目廣泛使用。許多大型互聯網應用,如 Dropbox 和 Mozilla,均采用 Pytest。

4.3 Robot 測試框架

Robot Framework 是一個基于 Python 的,可擴展的關鍵字驅動的測試自動化框架,主要被用在測試驅動 (test-driven)類型的開發與驗收中。

Robot Framework 具有高度模塊化的架構,用戶通過編寫 Python 腳本擴展功能,如下圖所示:

圖片描述

  • 測試數據 (Test Data) 是簡單、易于編輯表格格式
  • 啟動 Robot Framework 時,它會處理測試數據,執行測試用例并生成日志和報告
  • 測試庫 (Test library) 可以直接使用應用程序接口

Robot Framework 具有如下優點:

  • 通過使用關鍵字驅動測試的方法,幫助測試人員創建具有可讀性的測試用例,進而簡化了整個自動化的過程。

  • 啟用易于使用的表格語法,以統一的方式創建測試用例。

  • 提供易于閱讀的結果報告和 HTML 格式的日志。

  • 提供一個簡單的庫 API,可以使用 Python 創建自定義測試庫。

4.4 Selenium Web 應用程序測試

Selenium 是一個用于 Web 應用程序測試的工具,它使用 JavaScript 模擬真實用戶對瀏覽器進行操作。Selenium 支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。

Selenium 支持使用 Python 語言編寫動作測試腳本,測試腳本執行時,瀏覽器自動按照腳本代碼做出點擊、輸入、打開、驗證等操作,就像真實用戶所做的一樣,從終端用戶的角度測試應用程序。

用戶使用 Python 編寫測試腳本:

  • 測試應用程序的瀏覽器兼容性,驗證應用程序是否能夠工作在不同瀏覽器和操作系統之上
  • 創建回歸測試檢驗軟件功能和用戶需求

Selenium 主要用于測試 Web 應用程序,學習 web 自動化測試前,需要補充 Web 相關的知識,包括:

  • HTTP 協議
  • HTML 的基礎知識,如何使用 Javascript 操縱 DOM
  • Firebug 或者 Chrome 開發者工具的使用,用于抓取元素