工作專案經驗總結(1)-- 投影儀自動化測試 (Android)
在極米主要負責顯示及影像方向:(AK 自動梯形校正、AF 自動對焦、AL 環境光自適應、光機、3D 等模組)
從這幾個業務維度,開始思考如何去完成自動化測試及自動化測試架構實現:
通訊方式
由於是投影儀基於安卓,所以一般情況的通訊方式:adb:Android Debug Bridge(安卓除錯橋);但是考慮到其穩定性影響較大,我們引用了串列埠通訊,當時沒有具體瞭解其通訊協議。
軟體基本架構
自己本身也不太專業,所以按照自己的想法來做的,沒有所謂的設計模式。
由於需要底層通訊:
通訊層(comm_layer)
- comm_serial.py:基於串列埠通訊
- __init__:初始化串列埠連線,傳入引數埠(獲取當前電腦串列埠,一個就預設傳入,多個就傳參,上層UI選擇)
- getSerialStatus:獲取當前開機狀態,串列埠是否可輸入(此介面主要用於重啟後的檢測,判斷是否已經可以開始執行自動化);while透過不斷地去下發root指令,判斷回顯回覆包含來判斷可輸入狀態。
- getRoot:獲取root許可權(不同平臺許可權命令不一致,有點需要輸入密碼):while迴圈根據串列埠返回值判斷是否已經su成功
- getControlNum:獲取當前匹配遙控器event值,根據模擬傳送keyevent鍵值,然後透過dumpsys input去grep和awk獲得響應的keyevent,即為當前配對的遙控器鍵值。(為什麼需要這個?不用全input keyevent指令呢?因為我們有時候需要模擬使用者手動調焦距,需要壓測一直點按遙控器,試過keyevent的當時不行,用的是sendevent方式)
- getCmd:下發指令到串列埠,此處有個預設引數cmd_type="down",是為了判別只是下發指令還是需要檢索回顯,有的命令不需要看到回顯去判斷是否下發成功
- checkLogs:判斷回顯中是否包含對應tag,透過下發指令後,不斷地readlines,來判斷每一行中是否有對應的tag,找到就退出,模擬下發ctrl+c終止檢索(主要是檢視logcat是否有對應tag;也可以傳送其他指令)
- comm_adb.py:基於adb通訊(主要使用的是串列埠),這裡不詳細介紹
底層介面層:(interface_layer)
- basic_camera.py:主要封裝一些常用的攝像頭操作的函式:
- __init__:初始化usb攝像頭,傳入攝像頭的num(會檢索當前連線的攝像頭裝置)
- cameraCheck:除錯攝像頭,會開啟一個攝像頭視窗,然後透過手動調節曝光和焦距將攝像頭畫面調節至清晰狀態,關閉視窗即退出
- screenCap:拍照存圖,此介面呼叫一次則存一張圖,可傳入flag代表重複使用,可以節省初始化和開啟攝像頭的時間操作
- getImageVar:獲取當前幀/圖片清晰度,使用了cv2.Laplacian 拉普拉斯運算元,傳入灰度圖,和影像深度,即可獲得當前幀/圖片清晰度值
- basic_env.py:主要是為了獲取當前系統的環境變數值(不同晶片平臺的系統採用了不同的儲存方式)
- platformDict:儲存了當前所有平臺代號
- get_platform:獲取當前系統平臺cat /proc/cpuinfo| grep Hardware,透過呼叫getCmd,獲取回顯,然後用於platformDict字典
- getAllCri:線上查詢當前環境變數,某些平臺用到了自己開發的環境變數,沒有用安卓原生的env
- getAllEnv:線上查詢當前環境變數。(這裡正常環境變數只能進入recovery查詢,但是調研發現環境變數是掛載到了某個分割槽,透過查詢找到其掛載分割槽,然後去cat讀取分割槽檔案,實時訪問)
- logger.py:主要用於日誌儲存,進行了分段和時間戳儲存
封裝層(package_layer):主要根據當時模組進行分類。
- action_ak.py:主要根據業務測試來封裝相應介面功能(開機AK(重啟實現)、位移AK(暫時未做)、快捷選單AK、setting觸發AK等),基本都是業務流程,某些涉密,就不方便說,也沒什麼難點;有兩個自己覺得的量亮點吧
- 所有流程均會去判斷校驗:app -> system -> 驅動(攝像頭、tof、步進電機)-> 顯示(光機) - > 演算法
- 使用了一些裝飾器去做:比如每次開始自動花錢為了避免其他裝置影響,會先遮蔽藍芽遙控器配對等
- action_3d.py:主要就是在不同格式影片場景下去做3D切換,透過拍照和日誌tag及拍照來多重確認是否切換成功
- action_af.py:和AK類似,不同業務場景下的介面
使用者層(user_layer)
- 使用tkinter寫了一個介面,用pyinstaller打包成可執行檔案,讓業務人員可以無成本使用
- 基本流程就是選擇對應的模組、檢測串列埠、連線串列埠、選擇對應的串列埠號、選擇對應指令碼、選擇壓測次數、選擇攝像頭、選擇日誌和圖片儲存路徑、除錯攝像頭、開始測試、右側會有對應的日誌實時列印
總結
單獨講一下清晰度判斷是如何使用的:首先先找到當前環境下最清晰的影像:首先透過 sendevent 將步進電機調節至最左側 PI 位置 --> 開始迴圈調節步進電機(最小步進)--> 呼叫清晰度函式,獲取當前清晰度並存圖 --> 記錄當前步進電機所處位置 --> 依次迴圈,直到步進電機到最大步數;此時再用 matplotlib 繪製影像,基本可以獲得一個類似於正弦曲線的影像,然後再給定一個判斷區間(最優清晰度左右 5% 閾值作為清晰的判斷依據)--> 再進行業務場景壓測 --> 每次壓測對焦完成傳入當前幀,獲取清晰度和清晰閾值進行比較,大於清晰閾值代表此次對焦清晰,小於代表不清晰,拍照並記錄當前步進電機馬達位置
1、從業務角度出發,開發能力其實不那麼重要,最核心是要能解決問題即可
2、溝通能力是非常必要的,寫這個工具過程中有很多需要給對應模組的研發人員請教(日誌 TAG、命令如何調起某些功能、使用研發內嵌到系統的某些功能元件(顯示組大佬寫了一個 lua 指令碼,可以實時檢視很多日誌上或者命令上無法看到的內容))
3、其實現在回過頭來看,覺得當時的框架太 low 了,還有很多很多需要完善的地方,這其實就是成長的過程。
這個專案基本就是這樣了,有很多不足的地方希望各位大佬指出!
相關文章
- 在我有限的軟體測試經歷裡,一段專職的自動化測試經驗總結
- Android 下的自動化測試工具總結Android
- 自動化測試總結(二)
- 自動化測試經驗的悖論
- 自動化測試實踐總結
- 一位測試大神的軟體測試工作經驗總結
- 工作5年,一位來自廣西測試妹子學習《自動化測試》經驗分享
- 專案測試經驗交流
- APP UI自動化測試思路總結APPUI
- 介面自動化測試框架搭建總結框架
- 測試經驗總結:測試員的角色
- 兩年測試經驗總結
- AutoRunner 功能自動化測試專案實訓之自動化測試原理(一)
- 日常專案經驗總結
- BPR專案經驗總結
- 面經-自動化測試
- 工作經驗總結
- Junit測試Android自動化測試Android
- 《軟體自動化測試成功之道》節選1 - 選擇合適的專案實施自動化測試
- 深入解析:Android卡頓檢測及優化專案實戰經驗總結,任君白嫖Android優化
- JMeter測試WebSocket的經驗總結JMeterWeb
- [android]android自動化測試Android
- 《軟體專案經驗總結》
- 自動化測試是什麼?什麼軟體專案適合自動化測試?
- 自動化測試專案為何失敗
- 一個專案經理的切身經驗總結:測試用例可以被替代嗎?
- python自動化測試(一)--uiautomator總結PythonUI
- Web前端自動化測試Cypress實踐總結Web前端
- 自動化測試 RobotFramework自定義靜態測試類庫總結Framework
- Mask RCNN測試過程經驗總結CNN
- 相容性專案經驗總結
- 投影儀哪款好用?十年發燒友總結口碑投影儀推薦
- 微軟測試工作經驗談微軟
- 開源介面自動化測試專案--時默
- 一個專案經理的經驗總結
- 自動化測試工具分析和總結-實時更新
- 關於介面測試自動化的總結與思考
- 自動化測試系列 —— UI自動化測試UI