測試平台系列 11 封裝Request類

2021-10-21 18:07:43 字數 4521 閱讀 9670

上次我們完善了登入註冊相關頁面,還有後端介面,算是從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

defget(self)

:return self.request(

"get"

)@staticmethod

defget_elapsed

(timer: datetime.timedelta)

:if timer.seconds >0:

returnf".

s" return

f"ms"

defrequest

(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)

defpost

(self)

:return self.request(

"post"

)@staticmethod

defresponse

(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

"請求方式不能為空"))

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時,無疑隱式地開放了集合可寫的許可權。此時,我們無...