開發與維運

接口測試框架實戰(四) | 通用 API 封裝實戰

本文節選自霍格沃玆測試學院內部教材,文末鏈接進階學習。

在 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 庫。從而發起各種各樣的請求,實現了通用接口協議的定義與封裝。
更多接口測試框架實戰進階內容,我們在後續文章分享。

更多技術文章分享及測試資料

Leave a Reply

Your email address will not be published. Required fields are marked *