介面依賴
面試的時候經常會被問到在介面自動化測驗程序中怎么處理介面依賴?
首先我們要搞清楚什么是介面依賴,
1. 什么是介面依賴
介面依賴指的是,在介面測驗的程序中一個介面的測驗經常需要依賴另一個或多個介面成功請求后的回傳資料,
那怎么處理呢?不同場景的處理方式有所不同,
2. 介面依賴的多種場景
2.1 單介面測驗
在單介面測驗時介面依賴有兩種場景,
-
在整個介面用例測驗前的依賴
例如:需要登錄后的介面,需要在測驗前先訪問登錄介面獲取對應的鑒權憑證,例如 token,
-
在介面的每一個用例測驗前的依賴
例如:專案審核介面,需要在每次測驗前都創建一個專案
2.2 業務流測驗
多介面測驗業務流時,下一個介面依賴上一個介面的執行結果,
點擊有驚喜
3. 解決方案
不同場景下的解決方案不同,我們在做介面自動化時不管是 python 語言還是 Java 語言,都會使用單元測驗框架,這里我們主要以 python 的 unittest 框架為主,不同框架只是實作方式有所不同,但是思想架構都大同小異,
不管是那種場景的介面依賴都可以通過單元測驗框架的前置條件/腳手架代碼進行處理,不同的是如何傳遞依賴的資料,幾乎是所有的單元測驗框架中用例都被設計成隔離的,也即是用例物件和用例物件間是隔離的,獨立的,所以傳遞依賴資料需要一個第三方容器,一般有兩種方案:
- 定義一個全域變數來共享
- 通過當前測驗用例類的類屬性共享
3.1 單介面測驗場景 1 解決方案
在整個介面用例測驗前的依賴,我們放在 unittest 框架的類級前置方法 setUpClass 中進行處理,資料傳遞通過全域變數和類屬性進行共享都可以,代碼示例如下:
import unittest def do_something(): """ 模擬表示前置介面 """ return 3.14 # 定義一個全域變數類 class EnvData: pass class SomeTestCase(unittest.TestCase): @classmethod def setUpClass(cls) -> None: # 執行前置操作 data = do_something() # 將data系結到全域變數類的類屬性上 EnvData.data = data # 將data系結到當前類的類屬性上 cls.data = data def test_something(self): print('執行測驗') # 獲取前置方法中產生的資料 # 從全域變數中獲取 print(EnvData.data) # 從當前用例的類屬性中獲取 print(self.__class__.data) # 如果當前用例物件沒有同名物件屬性,也可以直接從物件屬性中獲取 print(self.data) if __name__ == '__main__': unittest.main()
推薦使用類屬性進行傳遞,
3.2 單介面測驗場景 2 解決方案
在介面的每一個用例測驗前的依賴,放到 unittest 框架的方法級前置方法 setUp 中進行處理,資料可以通過全域變數,類屬性,物件屬性進行傳遞,推薦使用物件屬性,代碼示例如下:
import unittest def do_something(): """ 模擬表示前置介面 """ return 3.14 class SomeTestCase(unittest.TestCase): def setUp(self) -> None: # 執行前置操作 data = do_something() # 將data系結到當前物件的屬性上 self.data = data def test_something(self): print('執行測驗') # 獲取前置方法中產生的資料 # 從物件屬性中獲取 print(self.data) if __name__ == '__main__': unittest.main()
3.3 業務流測驗場景解決方案
業務流測驗時,需要將前一個用例的結果傳遞給后面的用例,因為用例間是隔離的,所以可以通過全域變數和類屬性進行傳遞,代碼示例如下:
import unittest # 定義一個全域變數類 class EnvData: pass class SomeTestCase(unittest.TestCase): def test_01case(self): # 模擬介面回傳需要傳遞的資料 res1 = 1 # 將需要傳遞的資料保存到全域變數類的屬性中 EnvData.res1 = res1 # 也可以系結到當前用例類中進行傳遞 self.__class__.res1 = res1 def test_02case(self): # 獲取上一個介面傳遞的資料 # 通過全域變數類獲取 res1 = EnvData.res1 # 通過類屬性獲取 res1 = self.__class__.res1 # 如果沒有同名的物件屬性也可以直接通過物件屬性獲取 res1 = self.res1
4. 總結
了解了上面的類容,我們來總結一下,介面自動化時怎么處理介面依賴 這個問題的回答如下:
對于單介面測驗如果依賴介面只需要在測驗開始執行一次,那么可以將依賴介面的請求放在類級前置方法中,然后通過全域變數或者當前用例類屬性來傳遞依賴資料,
對于單介面測驗如果依賴介面需要在每個用例前執行,那么可以將依賴介面的請求放在方法級前置方法中,然后通過用例物件屬性來傳遞依賴資料
對于多介面的業務流測驗,可以將下一個介面需要依賴的資料通過當前用例類屬性來傳遞依賴資料,介面測驗寶典
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/384041.html
標籤:其他
下一篇:大學物理實驗有效數字與測量值小記
