1. 程式人生 > >《Web介面開發與自動化測試基於Python語言》--第7章

《Web介面開發與自動化測試基於Python語言》--第7章

《Web介面開發與自動化測試基於Python語言》–讀書筆記

第7章 介面相關概念

7.1 分層的自動化測試

  • 測試金字塔模型:

敏捷大師Mike Cohn《Succeeding with Agile》

  • 分層自動化測試模型:

這裡寫圖片描述

傳統自動化測試: 基於產品UI層的自動化測試,它是將黑盒功能測試轉化為由程式或工具執行的一種自動化測試。

分層自動化測試: 從黑盒(UI)單層到黑白盒多層的自動化測試體系,從全面黑盒自動化測試到對系統的不同層次進行自動化測試。

7.2 單元測試與模組測試

  1. 單元測試(Unit Testing)

    • 單元測試是英語程式的最小可測試部分;

    • 在面向物件程式設計中,單元也可以是整個模組,但場景的是單個函式或過程;

    • 在面向物件程式設計中,單元通過是整個介面,例如類,但可以是單獨的方法;

    • 單元測試多少情況下是由程式設計師自己完成的。

  2. 模組測試(Module Testing)

    • 模組測試與單元測試有細微的區別;

    • 模組測試是針對具有明顯功能特徵的程式碼塊進行的測試;

    • 單元測試智商設計測試一小部分的功能;

    • 模組測試多數情況下由其他程式設計師或測試人員進行。

單元測試強調的是程式的最小可測試單元

模組測試更強調被測試程式功能的完整性

模組介面測試: 模組測試+介面測試,強調了被測試的模組有規範的輸入和輸出。

7.3 介面測試

程式介面: 程式是提供了輸入輸出的類、方法、函式。程式介面測試使用相同程式語言,通過對類、方法、函式的呼叫,驗證其返回結果是否正確來進行測試。

協議介面: 系統通過不同的協議提供的介面,例如使用HTTP/SOAP協議,這種型別的介面對底層程式碼做了封裝,通過協議的方式對外提供呼叫。因為不涉及底層程式不受程式語言的限制,多由測試人員完成。

7.3.1 介面的分類

  • 系統與系統之間的介面

    • 公司內部不同系統之間呼叫的介面,eg:活動報名、活動投票;

    • 公司內部與外部系統之間呼叫的介面,eg:微信、微博提供的第三方登入介面;

  • 下層服務對上層服務的介面

    • 應用層:系統提供的UI層功能,eg:瀏覽器頁面上的登入、註冊、查詢等。

    • Service層:可以理解為伺服器所提供資料的處理。

    • DB層:資料庫主要用來存放資料。

舉例說明各層之間的呼叫順序:

一個使用者查詢功能,使用者輸入查詢的關鍵字,並顯示查詢結果。

首先,底層呼叫Service層所提供的查詢介面,查詢介面得到應用層呼叫的查詢資料;

然後,再通過DAO(Data Access Object)訪問資料庫,根據使用者輸入的查詢資料,查詢資料庫中的資料;

最後,將查詢到的資料庫資料返回給應用層,使用者在應用層檢視查詢結果。

應用層與Service層: 通過HTTP介面進行訪問

Service層與DB層: 通過DAO資料庫訪問介面訪問

  • 系統內部,服務與服務之間的呼叫

這種介面,多指程式之間的呼叫。eg:使用者資訊介面、使用者抽獎介面。

使用者查詢介面,輸入使用者名稱,返回使用者資訊,如果使用者不存在則返回null;

使用者抽獎介面,該介面需要使用者名稱和抽獎活動id,抽獎介面得到使用者名稱後可以呼叫使用者查詢介面,如果使用者查詢介面返回null,那麼抽獎介面就可以直接返回使用者不存在了。

使用者抽獎介面呼叫的就是使用者查詢介面。

7.3.2 介面測試的意義

  • 更早的發現問題

單元測試和介面測試是更早介入測試的兩個方面,介面測試可以在功能介面未開發出來之前對系統的介面進行測試,從而可以更早地發現問題並以更低的成本修復問題。

  • 縮短產品研發週期

更早介入測試帶來的另一個好處就是可以縮短產品週期,介面測是介入可以更早地發現並解決bug,使得留到功能測試階段被修復的bug減少,從而縮短整個專案的上線時間。

  • 發現更底層的問題

通過介面測試可以更簡單更全面地覆蓋到底層的程式碼邏輯,從而可以發現一些隱藏的BUG。

7.4 程式語言中的Interface

7.4.1 Java中的Interface

介面在Java中是指一個抽象型別,是抽象方法的集合,通常以interface來宣告,一個類通過繼承介面的方式,從而來繼承介面的抽象方法。

類描述物件的屬性和方法。
介面則包含類要實現的方法。

介面無法被例項化,但是可以被實現。

一個實現介面的類,必須實現介面內所描述的所有方法,否則就必須宣告為抽象類。

7.4.2 Python中的Zope.interface

在Python語言中也有Interface的概念,雖然Python本身並不提供Interface的建立和使用,但是我們可以通過第三方擴充套件庫來使用類似Interface的概念,這裡選用Zope.interface庫。

root@TEST:~# python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from zope.interface import Interface
>>> from zope.interface.declarations import implementer
>>> 
>>> class IHost(Interface):
...     def goodmorning(self, host):
...         """Say good morning to host"""
... 
>>> @implementer(IHost)
... class Host:
...     def goodmorning(self, guest):
...         """Say good morning to guest"""
...         return "Good morning, %s!" % guest
... 
>>> if __name__ == '__main__':
...     p = Host()
...     hi = p.goodmorning('Tom')
...     print (hi)
... 
Good morning, Tom!
>>> 

7.5 總結

本章主要是講解了介面測試的相關理論知識,什麼是介面,什麼是介面測試,主要是理論,沒有實操,注意區分上述概念即可。