本文節選自霍格沃玆測試學院內部教材,文末鏈接進階學習。
在 APIObject 設計模式中,需要一個 base_api 作為其他 API 步驟的父類,把通用功能放在這個父類中,供其他的 API 直接繼承調用。這樣做的優點在於,減少重複代碼,提高代碼的複用性。
通用 API 封裝實戰
在上一章節在演示使用 API-Object 設計模式對腳本進行改造時提到了 base_api
。不過在上一章,僅僅只是封裝了一個 utils
中的一個簡單方法。並沒有完全體現出 base_api
的實際作用。
接下來,我們通過通用接口協議的定義與封裝實戰,來實際體會一下 base_api
的巧妙之處。
- base_api.py
在代碼內,對 request 進行一層封裝,當然在這裡還看不出來具體的優勢:
import requests
class BaseApi:
def request(self, method, url, **kwargs):
self.json_data = requests.request(method=method, url=url, **kwargs)
return self.json_data
- wework.py
繼承於類 BaseApi
,可以直接調用父類中的 request
方法(不需要導入 requests 庫),從而發起一個 get 請求:
from test_interface.test_wework.api.base_api import BaseApi
class WeWork(BaseApi):
corpid = "ww93348658d7c66ef4"
contact_secret = "T0TFrXmGYel167lnkzEydsjl6bcDDeXVmkUnEYugKIw"
token = dict()
token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
def get_access_token(self):
r = self.request(method="get", url=self.token_url,
params={"corpid": self.corpid, "corpsecret": self.contact_secret})
return r.json()
- test_wework.py
繼承於類WeWork
,主要目的只是為了檢查上面的get_access_token(self)
是否成功:
from test_interface.test_wework.api.wework import WeWork
class TestWeWork(WeWork):
def test_get_access_token(self):
r = self.get_access_token()
assert r["errcode"]==0
以上,在上面的案例中,在 base_api.py 中對 requests 進行了多一層的封裝,這樣只要是屬於 BaseApi
這個類的子類,都可以無需引用而直接調用 requests 庫。從而發起各種各樣的請求,實現了通用接口協議的定義與封裝。
更多接口測試框架實戰進階內容,我們在後續文章分享。