框架的設計思路
首先要明確進行接口自動化需要的步驟,如下圖所示:
然后逐步拆解需要完成的工作:
1)了解分析需求:了解接口要實現的功能
2)數據準備:根據開發文檔確定接口的基本情況,知曉接口的url、請求方式、入參等信息,然后根據業務邏輯以及入參來預期接口的輸出
- 需要有一個配置文件來存儲接口的一些基本信息;
- 需要有一個方法能讀取配置文件;
- 需要有一個excel或者yaml格式文件來存儲測試數據;
- 需要有一個方法能讀取測試數據;
- 需要有一個方法來把讀取到的配置文件和測試數據組裝成測試執行時需要的參數化數據;
如果預期結果是需要根據入參查數據庫來得到的時候還需要一個能執行sql的方法
3)設計&執行測試:生成一個測試文件,可以來根據入參調用接口獲得接口輸出然后驗證
- 根據pytest的特性可以把準備參數化的數據的工作放到conftest.py下;
- 需要有一個調用接口以及斷言驗證的測試文件,命名規則為xxx_test.py或者test_xxx.py;
- 為了更好的對輸出和預期輸出做驗證準備封裝一下系統自帶的斷言;
- 為了能更好執行測試封裝一下requests模塊,制定統一的輸入輸出標準;
- 記錄執行錯誤信息引入日志記錄模塊;
4)查看結果:根據斷言結果來判定接口是否滿足需求框架最終的執行順序如下圖所示
框架的基本結構
然后介紹一個每個目錄下都有什么,分別完成什么工作
1、這里每一個文件對應一個接口所需要的測試數據,命名規則為nameA.xlsx或者nameA.yaml(nameA泛指待測接口名稱),文件里面可以存放調用接口所需的參數name、參數value、所需cookie、預期輸出結果
2、assertion.py
--封裝的斷言方法,用于驗證接口返回值和預期結果是否一致
config.py
--封裝讀取配置文件的方法
get_caseparams.py
--把測試數據加工成接口所需要的格式
log.py
--封裝的記錄日志的方法
request.py
--封裝的https請求方法,主要是post和get
selectDB.py
--查詢sql并把結果加工成[dic1,dic2,dic3....]這種格式,每個dic是一條數據
testcasetemplate.py
--這個是根據caseparams文件夾下的測試數據自動在testcase文件夾下生成測試文件的腳本
3、里面存放兩個配置文件,base.ini存放數據庫連接的配置interface.ini是所有測試接口需要的配置。
4、記錄測試的日志文件,沒啥可說的,log.log是當天文件,其他的是對應日期下的歷史日志。
5、conftest.py固定名稱的一個文件,放在被測接口腳本同一個文件夾下,此處的作用是為每個被測腳本提供參數化支持 test_XXX.py這種文件是接口的測試文件,XXX為被測接口的名稱。
6、run.py ---測試執行的主入口,如果把該接口自動化測試框架放到jenkins上做持續集成的時候,可以通過配置jenkins來代替這個入口。
使用說明
當我們需要有一個接口(假定名稱為abc)需要用本框架進行自動化測試的時候,操作步驟如下:
1、interface.ini文件下添加名稱為abc的節點,然后在該節點下配置好接口的參數文件格式、http請求方式、接口url、接口wiki。
2、casefparams文件夾下創建名稱為abc.xlsx的用例數據文件。
3、執行common文件夾下的testcasetemplate.py,執行的結果是會自動根據前兩步配置的內容在casefile文件夾下生成test_abc.py的腳本文件。
4、編輯test_abc.py添加所需要的斷言,來驗證接口的準確性。
5、執行run.py完成測試。
測試執行詳情為run.py指定要執行測試的測試文件的路徑testcase目錄,根據pytest的運行機制這之前會先調用testcase目錄下的conftest.py,這個文件在此處的作用就是通過遍歷testcase目錄下以test_為開頭的測試文件,然后調用讀取配置文件config.py、讀取并組裝參數的get_caseparams.py將測試用例數據參數化傳遞給test_開頭的測試文件,test_開頭的測試文件執行的時候會把之前步驟傳遞過來的參數拆分,然后調用request.py發送http請求,獲得接口的json格式的返回結果,然后通過以下方式對接口返回結果做驗證。
1)根據產品業務邏輯知道入參的情況下很簡單就能得出預期結果的時候,可以直接把預期結果放到和入參一起的excel或者yaml測試數據文件中,在執行測試的時候這些參數也會一并傳遞給測試文件,直接取出來和接口輸出做驗證即可。
2)需要查庫驗證的情況需要把需要把接口的入參作為sql的條件寫好sql后調用selectDB.py得到查詢結果再拿sql返回的結果和接口輸出做驗證3)還有一些復雜的場景可能會根據接口入參,根據業務邏輯自己寫腳本去獲得預期結果,然后和接口輸出做驗證。