測試平台系列 11 封裝Request類

2022-06-26 11:54:09 字數 4029 閱讀 7602

上次我們完善了登入註冊相關頁面,還有後端介面,算是從0到1完成了乙個功能的編碼工作。可能前端部分會講的比較粗糙,因為第一可能是筆者造詣不夠,第二也跟我們直接從現有的框架進行改造有關,很多東西不是從0寫到1,而是從11.1,但是後面不一樣:

後面的頁面都是咱們自己寫,自己用,從0寫到1

終端輸入pip3 install requests並執行。

要知道,咱們這是乙個介面測試平台(後續可能會整合ui自動化,但是這個筆者也還沒有想好)。乙個介面自動化平台,最核心的當然是對api的請求操作,所以咱們刻不容緩,加快進度,趁熱打鐵,來點乾貨吧。用requests來協助我們完成介面自動化請求。

我們新建乙個檔案:middleware/httpclient.py

import datetime

import requests

class request(object):

def __init__(self, url, session=false, **kwargs):

self.url = url

self.session = session

self.kwargs = kwargs

if self.session:

self.client = requests.session()

return

self.client = requests

def get(self):

return self.request("get")

@staticmethod

def get_elapsed(timer: datetime.timedelta):

if timer.seconds > 0:

return f".s"

return f"ms"

def request(self, method: str):

status_code = 0

elapsed = "-1ms"

try:

if method.upper() == "get":

response = self.client.get(self.url, **self.kwargs)

elif method.upper() == 'post':

response = self.client.post(self.url, **self.kwargs)

else:

response = self.client.request(method, self.url, **self.kwargs)

status_code = response.status_code

if status_code != 200:

return request.response(false, status_code)

elapsed = request.get_elapsed(response.elapsed)

data = response.json()

return request.response(true, 200, data, response.headers, response.request.headers, elapsed=elapsed)

except exception as e:

return request.response(false, status_code, msg=str(e), elapsed=elapsed)

def post(self):

return self.request("post")

@staticmethod

def response(status, status_code=200, response=none, response_header=none,

request_header=none, elapsed=none, msg="success"):

request_header =

response_header =

return

如果我是產品經理的話,那麼postman就是我的原型圖:

講解一下各個方法,首先這是乙個request請求類,他擁有核心方法:request,目前咱們暫時先只做到支援json類的請求,後續補全form,file等型別的請求。

其實這個類做的事情很簡單,就是把requests相關的方法剝離了出來,封裝了一層。

其中建構函式提供了一些選項,包括請求的資訊,url,是否以session的方式請求等等,kwargs涵蓋了requests原生的引數,只要你想傳,你都可以傳進來。

get_elapsed是根據postman為參照,對請求時間做的乙個處理,如果大於1s的請求響應時間,那我們以為單位顯示,否則以毫秒為單位顯示。

response是構造返回結構物件,對本次請求的資料進行整理。

request就封裝了requests庫的核心操作,基本上屬於原生處理,並且判斷了http狀態碼。

新建controllers/request/http.py

return jsonify(dict(code=101, msg="請求方式不能為空"))

url = data.get("url")

if not url:

return jsonify(dict(code=101, msg="請求位址不能為空"))

body = data.get("body")

headers = data.get("headers")

r = request(url, data=body, headers=headers)

response = r.request(method)

return jsonify(dict(code=0, data=response, msg="操作成功"))

其實和登入/註冊介面都很相似,基本上就是創立了乙個blueprint,字首是/request,後續就是引入剛才的request類,進行http請求,最後返回response。

我們新建了乙個藍圖,需要去run.py進行註冊:

本節內容就到這裡了,下一節咱們編寫屬於自己的第乙個元件:postman。又是前端內容了,咱們做乙個接近postman的頁面即可,不需要多高大上,做東西要抓住使用者的使用習慣。畢竟咱們不是

測試平台系列 11 封裝Request類

上次我們完善了登入註冊相關頁面,還有後端介面,算是從0到1完成了乙個功能的編碼工作。可能前端部分會講的比較粗糙,因為第一可能是筆者造詣不夠,第二也跟我們直接從現有的框架進行改造有關,很多東西不是從0寫到1,而是從1到1.1,但是後面不一樣 後面的頁面都是咱們自己寫,自己用,從0寫到1 終端輸入pip...

物件導向系列二(封裝)

僅僅須要最簡單的操作就能實現一系列複雜的功能。是做乙個個技術攻克的目的。一台精密儀器,一架家用電器,乙個小公尺手機,這些可能我們都在用,或者用過。它們的內部都無比的複雜。使用了各種各樣的配件,運用了極多的原理和知識。我們在使用的時候都具有同樣的感受 簡單 方便 太好了!面對原本複雜的東西,我們卻能通...

小酌重構系列 24 封裝集合

當方法返回型別或屬性型別為集合時,有些開發者會千篇一律地使用ilist集合。然而ilist具有集合的所有操作,這意味著呼叫者不僅可以讀取集合資訊,還能夠修改集合。業務需求本來只是為呼叫者提供乙個可讀的集合,例如資料的查詢和展示,但當方法返回ilist時,無疑隱式地開放了集合可寫的許可權。此時,我們無...