最近要開展介面測驗,起初打算使用公司已有的Fitnesse測驗工具來進行介面測驗,程序中發現,構造介面欄位資料、測驗資料都比較困難,介面引數多的時候,用例量就會很多,關鍵執行速度還慢,所以放棄了,
找了一些其它工具,都不太能解決資料構造困難的問題,找不到工具,就直接使用代碼來實作,考慮到代碼量,結合網上的一些推薦,決定使用python+pytest來撰寫介面自動化用例,
決定了語言和框架,接下來要考慮一下實作需求,

需求一:一套用例可以測驗多套環境
公司的測驗環境不止一套,希望在使用介面自動化用例時,可以隨意的切換被測環境,
為了滿足這個需求,首先要完成介面地址等資訊的獨立配置,而且是要按照一套環境的維度去管理資訊,
我的做法如上圖,首先我給每套環境設定了一個別名,比如上圖中的lion環境,然后設計了一個服務去持久化變數值資訊(變數名稱所有環境保存一致)
接著將環境名稱和變數名稱,組合起來,保存到redis中(如上圖),供后續介面自動化用例讀取并使用,
環境資訊搞定之后,接下來的任務就是,設計一種方法讓介面自動化用例使用環境資訊,
這里采用的方法是,在執行時,指定環境別名,
pytest的用例有多種執行方式,這里使用pytest.main()來啟動,通過將pytest.main()寫入一個py檔案中,如下面代碼,
啟動時,接受一個引數env,并將env作為屬性添加到Context中,供用例使用,

呼叫命令:

以上就實作了多環境測驗的需求,后續只要維護好環境別名、變數名稱和變數值就可以了,
需求二: 可以被jenkins調度執行
這個比較簡單,通過引數化構建就可以,

不過為了不影響Jenkins所在服務器,我使用了docker去執行用例
下面是Dockerfile的配置

下面是jenkins中的Execute shell

需求三 擁有測驗報告
測驗報告使用的是Allure,主要是美觀且配置簡單,(參考:https://docs.qameta.io/allure/#_pytest)
step1:配置報告路徑

step2:撰寫用例時,添加注釋

step3:在jenkins中安裝插件

step4:在job中配置報告路徑

step5:在另一個job中添加執行計劃


step6:查看報告

需求四:介面中某些欄位值在每次請求中不重復
這里通過python的一個庫factory-boy來實作該需求,
大概的原理就是將每個介面當做一個物件來處理,通過factory-boy給每個欄位添加值,可以是固定值,也可以是隨機值,然后將物件轉成dict,并發送請求,
如下圖中的紅框部分欄位,每次請求都將是不同的值,


需求五: 可以多介面關聯測驗
針對這個需求,實作的主要思路是,可以在一條Pytest用例中,拿到所有介面的請求和回應引數,
這里利用了pytest中fixture,將每個介面的http請求方法封裝成fixture,后續傳遞給pytest用例使用,同理實作了 加載用例資料的Fixture
下面是用例資料,可以看到request中傳遞的是一個函式,函式執行后,可以拿到兩個請求的請求引數,

下面的是pytest用例,可以看到用例中可以同時維護兩個請求介面的請求引數和回應內容
這里例子比較簡單,更新請求中,需要使用到添加回應中的data欄位值,
需求六 構造的表資料可以和介面欄位資料關聯
有時候沒有辦法,通過其它介面的呼叫得到的資訊,來為當前測驗介面做資料入參,可偏偏需要在資料庫中存在資料,才可以呼叫當前測驗介面,
可以利用Factory-boy和sqlalchemy來實作這個需求,利用Factory-boy生成隨機資料,利用sqlalchemy將資料入庫,
例如下面pytest用例的紅框部分,就是在插入資料,并使用資料中black_index,作為當前測驗介面的請求入參
下面是CreateMBL函式的實作

下面是Factory-boy生成資料的代碼

需求八 針對多樣的回應內容,具備多樣的斷言方式
起初在用例的response中,只存放了一個dict,如下圖,但是有時候回應內容(json格式)是多樣的,需要斷言的欄位不一定都在json的頂層結構中,可能還會出現嵌套dict以及list的情況,

下面是我的實作,主要的思想就是根據不同的斷言需求,傳遞給不同的斷言方法,

用例中呼叫下面的函式,可以生成一批斷言集合,

當斷言需求型別是dict的時候,會呼叫下面的函式,

用例response撰寫,指定不同的斷言需求

pytest 用例使用,如紅框部分,結合上面的用例的斷言需求,在用例執行時,實時傳入實際回應內容,再遍歷執行斷言函式集合,就完成了多樣的斷言需求

**
免費領取代碼+海量學習資料+面試資料+學習測驗視頻加群:646294456
**
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293843.html
標籤:其他
上一篇:Kubernetes單Master節點集群二進制部署
下一篇:2021-08-12虛擬機堆疊
