XXX接口自動化測試方案
1、引言
1.1 文檔版本
版本 | 作者 | 審批 | 備注 |
V1.0 | XXXX | 建立測試方案文檔 | |
1.2 項目情況
項目名稱 | XXX |
項目版本 | V1.0 |
項目經理 | XX |
測試人員 | XXXXX,XXX |
所屬部門 | XX |
備注 |
1.3 文檔目的
本文檔主要用于指導XXX-YY項目常用接口自動化測試工作的開展。本文檔的主要目的在于提供項目接口自動化測試的技術方案、實施方案和計劃方案等。
2、接口自動化實施目标
2.1 實施原則
XXX-YY項目采用接口自動化測試,主要目的是為了應對疊代版本測試過程中的重複工作任務,以期達到效果如下:
- 降低測試成本
- 提高測試效率
- 更頻繁地執行覆寫重要接口
- 提供更高的準确性和一緻性
- 節約時間成本
雖然能達到上述預期效果,但實際實施過程中需要注意的是,接口自動化的高效應用,對于被測系統有着更高的要求,也需要遵循合理的方法流程,現總結如下:
- 接口自動化的實施應該被用于解決測試過程中高重複性的工作,很大一部分是用于回歸測試老的功能接口,否則其本身工作量投入會大于其收益,是以不能盲目對所有接口或功能追求自動化。
- 對于提測版本,自身穩定性需要有一定程度的保障。過于頻繁的接口變動,會加大後續接口自動化的實施難度,增加自動化腳本維護地成本。
- 接口自動化的整體實作應采用分布進行,測試過程中優先覆寫功能穩定且比較重要的接口,進而逐漸擴充到整體項目的接口回歸。
- 接口自動化測試是一個長期的過程,随着項目版本的不停疊代優化,項目本身的接口也會不斷優化或新開發,是以後續自動化測試腳本的代碼維護和調優也具有可觀的工作量。
2.2 接口自動化測試範圍
系統範圍:
自動化實施階段 | 被測子產品 | 功能接口範圍 |
第一階段 | 登入擷取token,YY标簽頁 | |
第二階段 | ||
階段範圍:
這裡我們優先測試一下登入的接口和一些插入XXX功能的接口。
2.3 接口自動化測試任務
- 制定測試方案
腳本編碼前,需要對項目有一個整體把握,合理預估接口數量與複雜度。結合版本疊代時間,預估自動化腳本開發時間,并制定出相應的接口自動化測試方案。
- 提取分析測試點
根據前面寫好的接口自動化測試範圍,分析每個接口的測試點,包含請求方式,傳入參數,請求頭,傳回狀态,傳回資料等。這個過程中,需要和相對應的開發對接清楚在測試範圍内的接口的相關資訊,并提前在postman中逐一确認調通,必要時生成相應的測試文檔或編寫進入測試用例中。
- 搭建測試架構
此次接口自動化測試架構采用的是以Python語言為腳本開發語言,選用unittest接口測試架構。目的希望達成可配置,能自動運作腳本,自動生成測試報告并将生成的測試報告發送到指定郵件。
- 編寫腳本代碼
腳本首次實作不需要覆寫到每個接口。先預計挑選幾個重要接口進行覆寫測試,等整體測試架構搭建好後,整體流程确認調通無誤後,再後續維護完善腳本,覆寫更多的功能接口。
- 持續內建
同上,初次腳本代碼完成後,需要對現有自動化腳本進行更新持續內建開發,不斷完成尚未覆寫到的接口,将這些接口加入到自動化測試的範圍内,使得整體自動化程度進一步加深,更大程度上節約人力和時間成本。
- 腳本維護
腳本維護是在整體自動化腳本階段性完成後,将現有生成的傳遞物歸檔整理好給相應的負責人管理,并進行階段性的更新整理維護。包含項目日常版本疊代維護過程中對接口有改動的部分,和後續新加入接口得自動化覆寫等。
3、接口自動化技術選型
3.1 整體體系
結合測試金字塔(從下到上依次是:單元測試,服務測試,使用者界面測試)以及XXX-YY項目本身的流程特性考量,本次自動化實作主要是以接口自動化的形式來開展。整個自動化腳本以 Python3.X 中 requests 庫為核心機制,以 unittest 為測試組織,以 HTMLTestRunner 生成最終測試報告,Jenkins 實作持續內建,并選取 Python3.X 作為程式設計語言實作。
3.2 核心技術
3.2.1 接口自動化執行庫--Requests
首先,Requests 是使用 Python 語言編寫,基于 urllib,采用 Apache2 licensed 許可證的 HTTP 庫。它比一般的 urllib 等庫更加友善、簡潔,可以節約我們大量的工作,完全滿足HTTP 測試需求,總結為一句話:Requests 是 Python 實作的簡單易用的 HTTP 庫。其次,Requests 庫安裝和導入非常友善。
pip3 install requests ## 安裝 Requests 庫
import requests ## 導入 Requests 庫到項目中
我們可以使用該庫實作以下各種方法:
requests.get("https://url.cn") # GET請求
requests.post("http://url.cn") # POST請求
requests.put("http://url.cn") # PUT請求
requests.delete("http://url.cn") # DELETE請求
requests.head("http://url.cn") # HEAD請求
requests.options("http://url.cn") # OPTIONS請求
3.2.2 測試組織和斷言機制--unittest
unittest 子產品是 Python 中自帶的一個單元測試子產品,我們可以用來做接口自動化代碼級别的測試組織和斷言機制。其中比較重要的小元件子產品有:TestCase,TestSuit,TestLoader,TextTestRunner,TextTestResult等。
TestCase:用來編寫逐條的測試用例,是所有測試用例的基類,他是 unittest 子產品中最基本的組成單元。一個 testcase 就是一個測試用例,是一個完整的測試流程,包括測試前的環境搭建準備 setUp,執行測試代碼和斷言機制,以及測試一條用例完成後的環境還原 tearDown 等。
TestSuit:多個TestCase就組成了一個TestSuit(測試用例集),這是用來存放一條一條測試用例的集合。
TestLoader:是用來将逐條的測試用例 TestCase 加載到用例集合 TestSuit 中,其中加載的方式有多種,就是從腳本項目中尋找到單獨的用例,建立他們的執行個體,然後加載到一起,組成TestSuit,再傳回一個TestSuit的執行個體。
TextTestRunner:是用來執行用例集 TestSuit 中的測試用例。
TextTestResult:用來儲存測試結果,包含執行了多少條測試用例,成功與失敗用例的條數等資訊。
示意圖如下(網絡來源圖):
3.2.3 測試報告生成--HTMLTestRunner
當我們批量執行完用例集 TestSuit 中的接口用例後,生成的測試報告是dos端文本格式展示的,不是很直覺,這裡我們引入一個第三方庫--HTMLTestRunner,使用這個第三方庫我們可以生産成 HTML 網頁格式的測試報告。
3.2.4 持續內建機制--Jenkins
這裡我們腳本持續內建選擇 Jenkins 來實作,通過使用 Jenkins,我們能夠實作腳本自動化執行,包含定時執行自動化測試腳本,和自動化腳本運作後的測試報告發送到指定的郵箱中。
3.3 架構思想
3.3.1 封裝思想
整個接口自動化測試腳本采用面向對象的封裝思想,盡量将一些可配置的子產品單獨提取出來,便于後續操作配置,使得整體項目更加靈活多變,便于後續地疊代維護和二次開發。封裝思想主要展現在測試環境可配置,測試用例可導入,測試資料和腳本分離,檔案路徑采用相對路徑表示等,具體我們會在實際編碼分層中得到展現。
3.3.2 資料驅動實作
資料驅動這裡我們采用的是 Python 中的裝飾器--DDT(Data Driven Tests)來展現。通過他我們可以複用我們的腳本代碼,達到資料驅動測試的目的。官方對DDT的描述是:DDT(資料驅動測試)允許您通過使用不同的測試資料運作一個測試用例,并使其顯示為多個測試用例。
這裡官方網站中對DDT的介紹做一個簡單描述。首先,DDT主要是由一個類裝飾器 @ddt(用于我們腳本中的TestCase子類)和兩個方法裝飾器(用于我們想要批量處理的測試資料)分别是 @data(這裡需要保持提供參數和被測參數個數一緻)和 @file_data(将從JSON 或者 YAML 檔案中加載測試資料)。其次,關于data修飾的方法傳入的參數,會被當做一個整體傳入,如果這些參數像是元組一類的參數,那麼你必須将他們分解開傳入到你的測試中。另外,你可以使用另一個裝飾器 @unpack,來解壓縮分解你的參數為多個參數。(附:DDT官方文檔:https://ddt.readthedocs.io/en/latest/index.html)
4、測試環境需求
4.1 硬體環境
目前暫未涉及到性能相關或者需要分布式執行的内容,是以對硬體要求不是很高,日常辦公硬體即可。如果後續有涉及性能相關内容,硬體環境需要再另外的性能測試方案中展現。
4.2 軟體環境
軟體相關 | 版本号 | 備注 |
Python | v3.7 | 腳本編碼語言為 Python3.x |
PyCharm | v2016.3.3 | |
5、人員進度安排
5.1 職責配置設定
組别/人員 | 職責 | 備注 |
5.2 進度安排
測試任務 | 負責人 | 開始時間 | 備注 |
自動化測試方案制定 | |||
接口用例編寫 | |||
自動化測試環境搭建 | |||
自動化測試架構搭建 | |||
自動化腳本代碼編寫 | |||
持續內建實作 | |||
測試報告輸出 | |||
腳本二次維護開發 |
5.3 傳遞物管理
傳遞物 | 負責人 | 備注 |
《自動化測試方案》 | ||
自動化架構 | ||
自動化腳本代碼 | ||
測試執行報告 |
轉載于:https://www.cnblogs.com/saixuyu/p/10901429.html