測試平臺-記一次不成功的 RF 遠端庫問題解決過程
該文原創為新潮質量保障技術團隊中的 “上進的中年軟體測試從業者”,用於技術交流分享
又到了週五的晚上,下班的時候看到了了企業微信推送的一條很尬的訊息。
不自覺的第一時間就想到了天下無賊的一句臺詞 - 你 TM 才沒腦子呢,純屬戲言。
又要開啟愉快的週末生活了,雖然已經差不多都安排滿了事情,但是沒有工作日那種壓迫感,還是不錯的。這也是為什麼加班最好在公司的主要原因,身心會不自覺就投入其中。
渾渾噩噩的過了兩週,感覺沒什麼可值得寫的,幸好今天解決了一個測試平臺架構上面的問題,可以拿出來給大家嘮叨嘮叨。
## 開篇
昨天有同事發來一個問題,想要在測試平臺架構提供的 RF Remote 服務返回的 http 請求以 Response 物件的形式呈現,然後透過預先檢查 status_code 來避免因為開發亂寫返回而導致漏測 (這邏輯真的很值得學習,自愧不如)。後面想了想,其實從自動化業務用例的場景來說,即使這個地方斷言有誤而導致本應失敗的用例判定承擔,後續的業務也同樣會失敗。舉個例子來說:建立使用者失敗,後端返回 500 的 code 和{"msg": "建立使用者成功"}的誤導訊息,但是後續的檢視使用者列表業務場景,同樣會因為使用者建立失敗而導致查詢失敗。
當然,這也比較考驗自動化用例設計者的嚴謹性。對於合理的使用者需求,我們通常都是儘可能的去滿足,至少我會要求以這種態度來處理測試平臺在推廣過程中任何反饋。
## 背景
接到這個需求之後,就去同事那裡檢視具體的情況,然後看到了如下的資訊:
初步分析得到的結論是反序列化過程後的問題,熟悉我們平臺的同學都知道我們有公共工具服務以 RPC 的形式呈現,傳輸過程中更多的時候我們會把資料序列化。附上簡單的服務呼叫圖,方便後續問題解決過程中理解。
## 調研
然後沒有多想就把 reuqests 請求後的 Response 物件沒有經過序列化過程直接返回給了 RF Remote Server, 然後 Remote Server 再透傳給使用者。然後同事那邊又反饋了新的問題(這就是過度自信,不自測的下場):
這個問題在透過 google,嘗試各種關鍵字排列組合,都沒有找到合適的。今天早上到了辦公室繼續調研這個問題(再次強烈建議早上寶貴的時間一定要給最棘手的事情),突然靈光乍現想到了原理就是為什麼 Python 的物件無法透過 RF Remote Server 傳給使用者,然後就在本地打了斷點,開始探究根源:
熟悉的身影再次出現,至此問題的根源找到。(具體的原因就不說了,前面已經介紹很多次了)
## 解決過程
找到了問題的根源就很好辦了。先嚐試用在 RF Remote Server 用直接用 requests 來生成 Response 物件返回
然後發現了一個奇怪的現象:
Response 物件被在呼叫過程中,返回給客戶端的是被解析的 byte 集合。然後在官網上找到了正解:
也就是說 Python 物件在傳輸過程中會自動轉換為 string, 具體到測試平臺這邊現有的架構,是沒有辦法來滿足同事的需求。
但是,只要思想不滑坡,辦法總比困難多。和同事商量後,決定在 RF Remote Server 這邊對需要 status_code 的需求,把 status_code 強制加到 response 的 content 裡面。當然,這是一種變通的方式,不是最優的解決方案。也請有解決方案的同學不吝賜教。
## 思考
後面的一次嘗試,發現了一個驚喜。當呼叫一次 RF Remote Server 自己透過 requests 生成的 Response,再次呼叫工具服務拿到 Response 後,透過 RF Remote Server 透傳後,居然不會報錯!!!大膽猜測一下如果 RPC 客戶端引入服務端傳送過來的物件對應的包,也就是說如果工具服務返回了 requests 的 Response 物件,並且 RF Remote Server 端引入了 requests 包,遠端呼叫將不是真正意義的遠端呼叫。當然,這本身也不符合 RPC 服務的宗旨。
大膽推測,小心求證。這裡就不去求證了,感興趣的小夥伴可以去試一下。
## 結語
之前一直聽開發同學說 websocket, 前段時間有幸接觸到了一個新專案有這樣的介面形式,有種撥開雲天的感覺。後續爭取能夠引入到測試平臺裡面,讓平臺的的服務形式更豐富。感謝大家的耐心閱讀,我們兩週後見!另外感謝在 tester home 指正 MD5 的那位小夥伴。
相關文章
- 記一次 Composer 問題的解決過程!!
- 一次線上問題的排查解決過程
- 覆盤 PHP 經典面試問題解決過程:上臺階問題PHP面試
- 記一次專案中解決 -- 併發減庫存超賣問題過程(Java)Java
- 記一次記憶體溢位問題的排查、分析過程及解決思路記憶體溢位
- 測試平臺系列(82) 解決APScheduler重複執行的問題
- 記一次OOM問題排查過程OOM
- rsync同步檔案到遠端機器,卡住10多秒--問題解決過程
- 記一次SQLServer2019安裝和解除安裝問題的解決過程SQLServer
- 教育直播平臺開發過程中,這些技術問題需要解決
- 基於 RF 的 WEB 版自動管理測試平臺Web
- 比較好用的遠端軟體 及時解決遠端問題
- 記一次實現遠端控制電腦開機過程
- 記一次expdp匯出任務中某張大表報錯問題的解決過程
- 000 上傳本地庫到Github遠端庫過程全記錄Github
- Git解決pull操作不成功問題Git
- 記一次線上崩潰問題的排查過程
- 移動全平臺效能測試工具PerfDog常見問題與解決方案
- RPC(遠端過程呼叫)詳解RPC
- MGR測試過程中出現的問題彙總
- 電商APP測試過程中遇到的問題APP
- 一次線上問題處理過程記錄
- 解決Ubuntu下MySQL遠端登入問題UbuntuMySql
- 記一次測試環境壓測問題深究
- munium學習過程中問題解決
- 遠端服務不能啟動問題的解決方法
- 記一次透過Memory Analyzer分析記憶體洩漏的解決過程記憶體
- 記錄一次解決App崩潰問題的解決方案APP
- 記一次Python指令碼實現記憶體洩漏測試的方法及解決過程,經驗分享篇Python指令碼記憶體
- 在效能測試的過程中會遇到哪些問題?
- 記錄一次排查解決伺服器卡死的過程伺服器
- 記一次前端面試的全過程前端面試
- 記一次使用gdb診斷gc問題全過程GC
- .記一次使用gdb診斷gc問題全過程GC
- 記錄一次無法很好解決的問題
- 解決Windows遠端桌面連線每次都提示輸入密碼的問題,遠端桌面記不住密碼Windows密碼
- 初識遠端開發,使用Jetbrains IDE進行遠端開發解決筆記本記憶體不夠的問題AIIDE筆記記憶體
- 記一次bug解決過程(數字轉化成中文)