本文節選自霍格沃玆測試學院内部教材,文末連結進階學習。
在 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 庫。進而發起各種各樣的請求,實作了通用接口協定的定義與封裝。
更多接口測試架構實戰進階内容,我們在後續文章分享。