写点什么

如何用 Sonic 云真机打王者

  • 2022 年 8 月 31 日
    北京
  • 本文字数:2958 字

    阅读完需:约 10 分钟

使用 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 50c

d 1 20 20 50c

u 0c

u 1c
复制代码

过去,我们调试设备 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 交互,大家可以参考这篇文章(Chrome 远程调试协议分析与实战 - 灰信网(软件开发博客聚合)) 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: falseUSB powered: trueWireless powered: falseMax charging current: 500000Max charging voltage: 5000000Charge counter: 4230000status: 5health: 2present: truelevel: 100scale: 100voltage: 4303temperature: 270technology: Li-ionmUsbStatus: 0PhoneTemp: 300
复制代码

其中 temperature 字段就是我们需要的,单位是 0.1 摄氏度。

随着用户量的增多,我们也有车载设备、视频测试的用户在其中,他们一个共同的需求是投屏远远满足不了,他们更希望可以音频也远程传输过来,同时希望兼容更多安卓设备。 目前 sonic 的安卓投屏解决方案是 minicap,我也做过对比 8.Minicap 将部分压力放在 agent 处理,对手机负荷不高,兼容性不太好,小米尤其严重 9.Scrcpy 将投屏处理集中在手机端,渲染压力放在了前端上,兼容性较好,不支持安卓 5.0 以下,比较适合车载、智能手表等等。

各有优缺点,sonic 如何选择呢?Sonic:我全都要

在不久的版本中,很快迎来 scrcpy 与 minicap 都可以使用,将选择权交给了用户,用户对自己的设备性能、兼容性等等自己选择投屏方案,并且远程音频传输方案已经本地开启分支,相信很快也面世~

更多资料点击下方

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=juejin&timestamp=1661940023&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
如何用Sonic云真机打王者_测试_霍格沃兹-测试_InfoQ写作社区