測試平臺-記一次不成功的 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 問題的解決過程!!
- 一次線上問題的排查解決過程
- 公司測試平臺安裝問題記錄
- 記一次記憶體溢位問題的排查、分析過程及解決思路記憶體溢位
- 記一次專案中解決 -- 併發減庫存超賣問題過程(Java)Java
- 測試平臺系列(82) 解決APScheduler重複執行的問題
- 基於 RF 的 WEB 版自動管理測試平臺Web
- 記一次wordpress安裝過程中遇到的問題及解決辦法
- 記一次OOM問題排查過程OOM
- rsync同步檔案到遠端機器,卡住10多秒--問題解決過程
- discuz雲平臺報呼叫遠端介面失敗的問題分析和解決
- 教育直播平臺開發過程中,這些技術問題需要解決
- 一次使用duplicate建立測試資料庫的過程資料庫
- 電商APP測試過程中遇到的問題APP
- 解決mysql不能遠端連線的問題MySql
- 比較好用的遠端軟體 及時解決遠端問題
- 記一次實現遠端控制電腦開機過程
- 移動全平臺效能測試工具PerfDog常見問題與解決方案
- 記一次線上崩潰問題的排查過程
- 分享一次分析/解決支付應用效能問題的全過程
- 覆盤 PHP 經典面試問題解決過程:上臺階問題PHP面試
- 000 上傳本地庫到Github遠端庫過程全記錄Github
- 一次線上問題處理過程記錄
- 記一次expdp匯出任務中某張大表報錯問題的解決過程
- 一個lua問題解決過程
- HBase一次慢查詢請求的問題排查與解決過程
- 記一次記憶體佔用問題的調查過程記憶體
- Git解決pull操作不成功問題Git
- 解決Ubuntu下MySQL遠端登入問題UbuntuMySql
- 遠端桌面不能全屏問題解決辦法
- 資料庫效能問題解決過程1例子資料庫
- 測試平臺後端優化後端優化
- 記一次SQLServer2019安裝和解除安裝問題的解決過程SQLServer
- RPC(遠端過程呼叫)詳解RPC
- 遠端服務不能啟動問題的解決方法
- 遠端協助解決重建索引的危機問題索引
- 記一次跨域問題的解決方案跨域
- 記一次透過Memory Analyzer分析記憶體洩漏的解決過程記憶體