如何用Sonic云真機打王者
使用Sonic進行跨網段部署,助力海外業務的公司進行專項檢測。提供定時任務充分利用無人值守時間回歸UI測試,省時省力。自研隨機事件測試與UI遍歷測試,支持打通Jenkins的DevOps流程,Sonic提供圖像識別,后續還會添加poco控件,助力游戲公司測試效率。趣味交互讓用戶不再感到繁瑣。豐富圖表展示,用戶實時洞察用例執行情況,把控產品質量。

感謝各大公司對Sonic的支持,感謝霍格沃茲的大力贊助~今后sonic必將繼續努力!
通過架構圖可以看到,用戶可以通過 Sonic 平臺,輕松訪問跨網段的 Agent 下的設備,執行遠控或測試,如果公司資金充足的情況下,全球分布多個機房是 ok 的,這樣可以滿足部分公司有海外業務測試的需求。
Agent 通過圖中的方式與設備進行交互,同時自身加入了圖像算法與 webSocket 服務。
Springboot WebSocket(WebSocket 基礎)
ddmlib(ADB 通信)
appium java client(Appium 交互)
thumbnailator(圖片壓縮)
testNG(測試框架與斷言)
jsoup(解析 xml)
javacv(圖像算法基礎)
opencv(圖像算法核心)
tesseract(圖片文字識別)
leptonica(圖像算法)
openblas(圖像算法)
眾所周知,minitouch 已經不兼容安卓 10 以上了,gif 圖中那種流暢的觸控交互是怎么實現的呢?在這里十分感謝 STF,給我提供了思路。
具體做法如下:
1、調用安卓內部的 android.hardware.input.InputManager
2、因為安卓 10 以上是 minitouch 被禁用了/dev/device/input 權限,思路就是把 minitouch 的調用方式,改造成用 apk 調用第一步的內部 api
3、在 apk 暴露 socket 服務,當然這里參考了 STF 的做法,但是去除了一些不必要的服務與二開優化。
4、剩下的兼容 minitouch 的數據格式即可,STF 在這里限定了多點觸控只能兩個點,其實可以根據自己的需求二開,增加更多
MotionEvent.PointerProperties pointerProps0 = new MotionEvent.PointerProperties(); pointerProps0.id = 0; pointerProps0.toolType = MotionEvent.TOOL_TYPE_FINGER; MotionEvent.PointerProperties pointerProps1 = new MotionEvent.PointerProperties(); pointerProps1.id = 1; pointerProps1.toolType = MotionEvent.TOOL_TYPE_FINGER; pointerProperties[0] = pointerProps0; pointerProperties[1] = pointerProps1;
5、因為支持多點觸控,前端將鍵盤 wasd 按鍵關聯到搖桿坐標就可以了,當然是自定義區域與按鍵的多點觸控指令
d 0 10 10 50 c d 1 20 20 50 c u 0 c u 1 c
過去,我們調試設備 webview 確實麻煩,adb 連接手機后,需要在谷歌進入 chrome://inspect 頁面,然后找到對應的 webview,點擊【inspect】按鈕即可進行調試。
1、遠程的設備怎么辦?并不能連接到我的 inspect 頁面
2、webview 調試工具首次使用需要能訪問 developer.chrome 官網(搭梯子),不然調試頁面會報 404,這無疑是個門檻。如果直接使用上述文章的 devtoolsFrontendUrl 的話更是需要每次都搭梯子。
3、adb forward 只能 127.0.0.1 或 localhost 訪問,不能暴露給 ipv4
1.主要使用 chrome 去連接遠程 webview 的 ws,達到遠程 ws 交互,大家可以參考這篇文章(https://www.freesion.com/article/30471319113/)
2.將 adb forward 之后,本地再起一個 websocket 進行轉發請求,相當于自己實現內網穿透
3.自己將谷歌協議加一層代理轉發,類似 nginx 功能。來實現 ip 訪問
4.這種方式就不需要訪問外網,直接用 agent 本地瀏覽器的 devtools 去請求,所以缺點是不能很好地兼容谷歌協議(會造成有時候調試大約15分鐘~30分鐘左右過程會斷開),而巖鼠是如何兼容的,還得繼續深究下去…
隨著iOS遠控的面世,我本著測試用戶反饋的效果。獲得的反饋基本是iOS的投屏清晰度高,FPS能達到30,但是觸控延遲也比較高
這是因為跟安卓觸控原理不一致。
iOS的觸控體驗我是監聽鼠標點擊與松開完成一次滑動事件,才發送一個滑動指令給Agent執行,里面包含兩次移動的坐標信息。但是安卓的觸控經過調用API的方式,實時監聽鼠標移動軌跡來發送指令給手機,所以觸控體驗會更佳、更流暢。
但是iOS的話,這種方式在webdriveragent里面很不好實現,目前也在探索之中。
TouchAction ta = new TouchAction(iosStepHandler.getDriver()); String xy1 = msg.getString("pointA"); String xy2 = msg.getString("pointB"); int x1 = Integer.parseInt(xy1.substring(0, xy1.indexOf(","))); int y1 = Integer.parseInt(xy1.substring(xy1.indexOf(",") + 1)); int x2 = Integer.parseInt(xy2.substring(0, xy2.indexOf(","))); int y2 = Integer.parseInt(xy2.substring(xy2.indexOf(",") + 1)); ta.press(PointOption.point(x1, y1)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(300))).moveTo(PointOption.point(x2, y2)).release().perform();
滑動觸控有個坑,兩個坐標滑動動作之間,要預留大約300毫秒的停頓,不然很容易造成滑動失效或者設備不動的情況。
在本版本,iOS的支持只有投屏跟控件獲取,這是我的一次嘗試,看看Sonic在用戶里面的兼容性達到什么水平,最后在用戶的反饋中,我決定v1.3.0-beta1中加入:
5.iOS自動化與在線調試
6.siri命令
7.iOS遠程裝包
功能逐漸往安卓模塊靠齊,后面也會將iOS版的在線webview一起做了。
至于調整FPS和清晰度,后面也會開放給用戶自定義,目前是通過Appium Setting對wda內置的mjpegserver做調整。
iosDriver.setSetting(Setting.MJPEG_SERVER_FRAMERATE, 30);
所以說,用iOS打王者,體驗就沒安卓那么好咯~
在某些用戶反饋,機器長時間插著usb充電容易造成鼓包等等安全問題,經過我一番研究后發現,改善這類問題只能從硬件級別入手,或搭配專門定制的usbhub來控制,但是這成本對于中小企業無疑是巨大的,因此在v1.3.0中,我會加入電池溫度監控,當溫度過高時,我們的維護人員就要進行物理干涉啦!
電池溫度的監控,主要使用adb的方式去獲取。輸入
adb shell dumpsys battery
我們獲取的信息應該有以下幾項
Current Battery Service state: AC powered: false USB powered: true Wireless powered: false Max charging current: 500000 Max charging voltage: 5000000 Charge counter: 4230000 status: 5 health: 2 present: true level: 100 scale: 100 voltage: 4303 temperature: 270 technology: Li-ion mUsbStatus: 0 PhoneTemp: 300
其中temperature 字段就是我們需要的,單位是0.1攝氏度。
隨著用戶量的增多,我們也有車載設備、視頻測試的用戶在其中,他們一個共同的需求是投屏遠遠滿足不了,他們更希望可以音頻也遠程傳輸過來,同時希望兼容更多安卓設備。
目前sonic的安卓投屏解決方案是minicap,我也做過對比
8.Minicap將部分壓力放在agent處理,對手機負荷不高,兼容性不太好,小米尤其嚴重
9.Scrcpy將投屏處理集中在手機端,渲染壓力放在了前端上,兼容性較好,不支持安卓5.0以下,比較適合車載、智能手表等等。
各有優缺點,sonic如何選擇呢?Sonic:我全都要
在不久的版本中,很快迎來scrcpy與minicap都可以使用,將選擇權交給了用戶,用戶對自己的設備性能、兼容性等等自己選擇投屏方案,并且遠程音頻傳輸方案已經本地開啟分支,相信很快也面世~
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。