測試平台系列(81) 編寫在線執行Redis功能

大家好~我是米洛

我正在從0到1打造一個開源的介面測試平台, 也在編寫一套與之對應的完整教程,希望大家多多支援。

歡迎關注我的公眾號測試開發坑貨,獲取最新文章教程!

回顧

上一節我們牛刀小試,編寫了redisManager,並且成功執行了redis命令。

那這一節,就讓我們來折騰下在線執行Redis命令。

由於某些特定的原因,在使用aredis的時候有了一些不好的體驗,主要是以下幾個方面, 所以我打算棄坑了。

  • get和set操作沒有支援中文,非常難受
  • 對於報錯資訊不是那麼友好,因為我這邊出現了一個連接出錯的問題,發現對方的error是ConnectionError,裡面毫無內容
  • 之前也說了,遷移成本巨低,所以我們可以完美切回用戶最多的同步庫(如果踩坑也有人一起想辦法)

安裝redis和redis-py-cluster

pip3 install redis redis-py-cluster

改寫Manager類

其實要改變的並不多,看下git的改動就知道了:

  • 修改引入路徑

  • 修復之前的bug

之前的獲取單實例從集群中拿數據了,大錯特錯了

  • 改寫cluster

換個名字而已,從StrictCluster改為Cluster

完善在線執行命令的方法

做一個判斷,如果是cluster則獲取集群客戶端,否則獲取實例客戶端

這樣我們的後端介面就編寫完畢了,因為我們想做的是類似redis-cli的功能。

  • 尋找前端組件

    我們需要一個web版本的終端,所以我在github尋找了很久,找到了這樣一款品質還不錯的:

到時候我們的頁面上,就讓用戶輸入這個了

  • 最終效果

最終顯示效果

還是比較丑,左側是現有的redis連接配置,右側是類似redis-cli的客戶端頁面。

在右側執行語句以後,就會調用我們剛才編寫的redis在線執行介面

湊合能用就行。給大家看看使用gif:

目前只支援基礎的操作,包括常見的:

get set hget hset hgetall等等

自動更新Redis

每當配置有變更的時候,我們都需要變更RedisManager中的數據,所以我們之前為之編寫了Refresh方法。

我們修改update/delete方法:

刪除client也編寫了一個方法

這裡的background_tasks是來自fastapi的後台任務,如果大家了解go的話,這裡就等於:

func test() {
    // 業務邏輯
    result := xxx
    go RedisManager.delete()
    return result
}

其實就是一個後台任務,咱們的主體方法可以直接return了。

刪除客戶端的方法,如果是集群則pop集群字典

今天的內容就到這了,下期我們解決APScheduler重複執行的問題。