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

tianfuzhiguo發表於2020-08-11

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

用例檔案和配置檔案需要在同一目錄下,配置檔名稱不可更改,如果使用客戶端載入用例檔案時報初始化conf.ini錯誤,且之前開啟或修改過配置檔案,可能是由於文字編輯器的編碼格式引起的,建議使用UE編輯配置檔案。
三、頁面展示
1、配置檔案
配置檔案中可以進行資料庫,收發郵件,使用者變數的配置。
資料庫資訊的配置目前支援3種資料庫,oracle、sqlserver、mysql。專案中預期了3個資料庫:DB1,DB2,DB3,也可以在配置檔案中自定義資料庫,使用${}形式呼叫即可。
收發郵件的配置:
發件郵箱用於定時傳送郵件,不配置則無法傳送郵件。
收件郵箱用於接收定時任務結束後產生的報告。
資料庫和郵件的配置屬於必填內容,值可為空。

同時支援使用者變數的自定義設定,使用${}格式進行呼叫。

2、用例檔案
用例檔案是excel格式,支援兩種格式的excel,但不建議使用.xlsx格式,因為程式中處理.xlsx格式用的是openpyxl庫,效能比較差。簡單直觀,包含介面資訊,需要校驗的欄位,查詢資料是否入庫(用sql語句實現),固定值,校驗資料是否入庫,響應內容,響應頭,狀態碼,資料初始化,資料恢復等等

2.1介面資訊模組包含介面名稱,url,請求方式,請求引數,資訊頭的設定。目前請求方式設定了常見的GET,POST,PUT,DELETE。請求引數以{“”:””}格式填寫。

2.2下面以一個示例說明資料校驗模組:
假設有一個介面,請求引數是:
{“username”:”name”} #此處要用雙引號

介面響應是:
[
{
"name": "菜鳥教程",
"url": "www.runoob.com"
},
{
"name": "google",
"url": "www.google.com"
},
{
"name": "微博",
"url": "www.weibo.com"
}
]
首先需要填寫介面資訊,
然後填寫需要校驗的資料及相應的預期結果,part101~part301是要校驗的資料,section101~section301是預期結果
這部分分為3種不同的校驗方式,詳情如下:
Part101~section101:固定值校驗
Part101填寫['sites'][0]['name']
Section101填寫”菜鳥教程”

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

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

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

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

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

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

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

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

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

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

2.6此外,用例檔案可以根據介面的不同功能模組分頁進行介面用例的編寫,這樣使得結構更加清晰簡明,便於介面用例的管理。

3、客戶端
點選選擇按鈕可以選擇用例檔案,然後先擇用例檔案中相應的介面模組,點選開始,就可以進行介面用力的測試,視窗中出現介面成功或報錯的結果。右側顯示介面成功、失敗、異常的資料分析。

解析JSON按鈕實現介面響應解析成JSON格式,便於用例檔案中資料校驗的填寫。

介面用例執行完成後,點選excel報告和html報告,可檢視此次介面執行的報告,便於後期介面測試的分析。

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

當我們用例檔案中增加了分頁,可以點選重新整理按鈕,進行檔案的重新整理。另外我們可以通過定時任務,設定定時傳送郵件,方便定時查收測試報告,及時發現問題,便於介面測試的管理。
收件郵箱需要在配置檔案中進行發件人和收件人郵箱資訊的設定。
傳送郵件分為兩種形式:
1、定時任務傳送郵件
定時任務傳送郵件,選擇好需要傳送郵件的時間後點選執行,那麼系統會在約定時間進行郵件的傳送,此時傳送的郵件報告中是所有用例檔案中待執行的用例,我們可以在用例檔案中進行用例執行的配置,迭代次數為0即該條用例不執行。

2、某個模組中個別介面進行傳送郵件
選擇需要生成報告的某個模組中的介面用例,選擇傳送郵件,點選開始即可。
此圖為收到的郵箱報告:

原始碼地址:https://github.com/tianfuzhiguo/shimo
由於github不支援大檔案上傳,打包好的客戶端放在百度網盤上
連結: https://pan.baidu.com/s/10TCV1ZwkneGKLimVaxZGPw 提取碼: wkh4

相關文章