開源介面自動化測試專案--時默

tianfuzhiguo發表於2020-08-11

原始碼地址:https://github.com/tianfuzhiguo/shimo
由於github不支援大檔案上傳,打包好的客戶端放在百度網盤上,客戶端所需要的配置檔案和用例模板在demo資料夾中
連結: https://pan.baidu.com/s/1iAcIexEl1HXwryPm9OMIfQ 提取碼: npbe

一、概述
這是一個基於python的介面自動化測試專案,使用excel管理測試用例,客戶端操作,使用過程中不需要關注程式碼。設計中主要遵循兩點原則:簡單易用、覆蓋常用場景。
二、基本結構
專案包含3個部分,配置檔案、用例檔案、客戶端。

三、頁面展示
1、配置檔案

2、用例檔案
用例檔案使用excel,支援兩種格式的excel,但不建議使用.xlsx格式,因為程式中處理.xlsx格式用的是openpyxl庫,效能比較差。支援固定值、資料庫、表示式等多種校驗方式,式;支援資料初始化,資料恢復、介面依賴等常見需求。

section101~section301是預期結果
這部分分為3種不同的校驗方式:
Part101~section101:固定值校驗
Part101填寫JSONPATH如['sites'][0]['name']
Section101填寫一個固定的預期結果如:helloworld

Part201~section201:資料庫校驗
Part101也是JSONPATH,如['sites'][0]['name']
Section201這時候填寫的不再是一個固定的值,而是從資料庫中查詢出的資料,可以這麼寫:select 'helloworld'
需要注意的時候,如果用例中需要寫sql語句(不僅此處),那麼首先需要選擇資料庫

Part301~section301:校驗資料是否入庫
有時候在介面請求之後要校驗資料是不是真的入庫了就可以使用這部分校驗
Part301填寫sql語句
Section301填寫預期結果

JSON解析:
如果介面響應層次比較深,可以使用“JSON解析”功能把介面響應解析為key-value形式,然後直接想用到的jsonpath即可。

以上part101~section301部分為精確校驗

模糊校驗:
如果不想進行精確校驗,只想看某些值是不是包含在介面響應中或響應頭中,則可以使用響應斷言resText或resHeader。

表示式:
以上校驗通常可以滿足大多數場景,但有些場景不能很好的滿足,如,我可能想校驗響應中的某個列表的長度,或者某個欄位是不是手機號,這時候需要使用表示式進行校驗,這裡的表示式其實就是一句python程式碼,如我想校驗介面響應中的列表長度則可以這麼寫:eval("r.json()['sites']")==3,此處需注意:程式中的介面響應物件是“r”。

資料庫初始化、資料恢復、動態引數:
這三部分都是sql語句
顧名思義,資料初始化是在介面請求之前對資料庫進行的初始化操作,資料恢復是在介面請求之後對資料庫進行的恢復操作。
動態引數最初則是基於這樣的考慮,有些介面的請求引數不是固定的,那麼我們就需要從資料庫中實時獲取,假如引數ID是自增的,我們實時從資料庫中查詢出最新的ID賦給引數列表,可以這麼寫:select ID from XX where XX,引數列表中使用這個查詢出的ID需要這麼寫:{“ID”:”${ dyparam001 }”},當然動態引數不僅僅用於自增引數,任何從資料庫中取出的資料都可以用作動態引數,如使用sql隨機一個手機號或者呼叫md5函式對某個值進行加密。

${變數名},這個是本專案中變數的引用格式,專案中存在3種變數,使用者變數,動態引數和介面變數,都使用相同的引用格式。

介面變數:
很多情況下介面之間會存在依賴關係,如其他介面依賴於登入介面,這時候就要設定介面變數。如B介面依賴A介面中的某個[‘token’]欄位,則可以在A介面的key001填寫[‘token’]在value001中填寫token,key001是依賴的欄位,value001是給這個欄位設定的變數名,在B介面中就可以用${token}的形式來呼叫這個變數。

資訊頭管理器:
資訊頭管理器可供後續介面隱式呼叫,還是以AB兩個介面為例,如果B介面請求時需要帶請求頭,當然可以在B的header中直接填寫,但如果B之後的介面CDEF……都需要使用相同的請求頭,那麼這時候就可以用到資訊頭管理器了,可以在A的資訊頭管理器中填寫{“token”:”${token}”},如果B中沒有填寫header,那麼B就會引用A的資訊頭管理器,如果B中填寫了請求頭,那麼資訊頭管理器在B介面中就不起作用了。

資料庫:
資料庫資訊是在配置檔案中配置的,支援3種資料庫,oracle,sqlserver.mysql
專案中預期了3個資料庫:DB1,DB2,DB3,也可以在配置檔案中自定義資料庫,使用${}形式呼叫即可。

迭代次數:
需要注意的是迭代次數為0即該條用例不執行。

模板中的很多列都可以根據實際需要增加或刪除,如,我想校驗5個欄位,那麼在part101後面加幾列就可以了,同時在對應的section101後面也加相同的列數;如果用到兩個動態引數,就在dyparam001就在後面加一列,使用${dyparam002}引用。

3、客戶端
點選選擇按鈕可以選擇用例檔案,然後先擇用例檔案中相應的介面模組,可以批量或單個除錯,也可全量執行。支援普通和簡潔兩種模式,普通模式會把介面響應異常出錯等全部資訊輸出到客戶端;如果只想檢視出錯資訊等主要內容可選擇簡潔模式。

解析JSON按鈕實現介面響應解析成JSON格式,可以將解析出的jsonpath複製填寫到excel中。

介面用例執行完成後,點選excel報告和html報告,可檢視此次介面執行的報告,便於後期介面測試的分析。
excel結果檔案會把出錯的資訊標示在單元格中,青色表示異常(資料格式等),紅色表示失敗。

html測試報告採用開源的BeautifulReport報告。

執行介面報錯後,我們可以點選檢視日誌按鈕,檢視執行的介面的請求,響應 的資訊進而分析介面出錯原因。

相關文章