如何用Sonic云真机打王者

news2024/11/22 19:25:42

使用Sonic进行跨网段部署,助力海外业务的公司进行专项检测。提供定时任务充分利用无人值守时间回归UI测试,省时省力。自研随机事件测试与UI遍历测试,支持打通Jenkins的DevOps流程,Sonic提供图像识别,后续还会添加poco控件,助力游戏公司测试效率。趣味交互让用户不再感到繁琐。丰富图表展示,用户实时洞察用例执行情况,把控产品质量。

感谢各大公司对Sonic的支持,感谢霍格沃兹的大力赞助~今后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(图像算法)

SONIC如何支持安卓10以上触控

众所周知,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

过去,我们调试设备 webview 确实麻烦,adb 连接手机后,需要在谷歌进入 chrome://inspect 页面,然后找到对应的 webview,点击【inspect】按钮即可进行调试。

调试常见问题

1、远程的设备怎么办?并不能连接到我的 inspect 页面

2、webview 调试工具首次使用需要能访问 developer.chrome 官网(搭梯子),不然调试页面会报 404,这无疑是个门槛。如果直接使用上述文章的 devtoolsFrontendUrl 的话更是需要每次都搭梯子。

3、adb forward 只能 127.0.0.1 或 localhost 访问,不能暴露给 ipv4

SONIC的突破

  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远控的面世,我本着测试用户反馈的效果。获得的反馈基本是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中加入:

  1. iOS自动化与在线调试

  2. siri命令

  3. 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摄氏度。

关于远程音频与scrcpy

随着用户量的增多,我们也有车载设备、视频测试的用户在其中,他们一个共同的需求是投屏远远满足不了,他们更希望可以音频也远程传输过来,同时希望兼容更多安卓设备。

目前sonic的安卓投屏解决方案是minicap,我也做过对比

  1. Minicap将部分压力放在agent处理,对手机负荷不高,兼容性不太好,小米尤其严重

  2. Scrcpy将投屏处理集中在手机端,渲染压力放在了前端上,兼容性较好,不支持安卓5.0以下,比较适合车载、智能手表等等。

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

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

Sonic一站式免费开源云真机测试平台 v1.3.0已经发布啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ECS-弹性容器服务 - Part 2

68-ECS-弹性容器服务 - Part 2 Hello大家好,我们今天继续ECS的内容。 Service load balancing 之前的课时讨论过,在ECS集群上创建的ECS服务支持AWS负载均衡器,而应用程序负载均衡器和ECS服务通常是一个很好的搭配,因为应用程序负…

Docker 基础概念介绍

一 什么是 docker ? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,…

【nowcoder】笔试强训Day13

目录 一、选择题 二、编程题 2.1参数解析 2.2跳石板 一、选择题 1.一个关系数据库文件中的各条记录 () 。 A. 前后顺序不能任意颠倒,一定要按照输入的顺序排列 B. 前后顺序可以任意颠倒,不影响库中的数据关系 C. 前后顺序…

前端面试题之计算机网络篇--HTTP协议

HTTP协议 1. GET和POST的请求的区别 GET和POST方法 GET和POST方法都是HTTP中的方法 什么是 HTTP? 超文本传输协议(Hypertext Transfer Protocol,缩写 HTTP)旨在启用客户端和服务器之间的通信。 HTTP 充当客户端和服务器之间的…

Android进阶——Javac编译解析

Javac编译器 1.Javac的源码与调试 Javac的源码下载地址:Javac的源码下载地址,在Myeclipse中新建项目Compiler_javac,把源码复制到项目中。 Javac的源码目录: 从Sun Javac的代码来看,编译过程大致可以分为3个过程&…

测试工程师正遭「革命」 AI将改写测试模式

文章目录❤️‍🔥 软件测试的现状❣️ 功能测试的短板❣️ 过于的依赖工具❤️‍🔥 测试行业的两极分化❤️‍🔥 纯功能测试人员应该如何破局❣️ 龙测 AI TestOps 云平台❣️ AI TestOps 亮相 TICA❣️ AI TestOps 所实现的混合模型解决方案…

相关系数(皮尔逊pearson相关系数和斯皮尔曼spearman等级相关系数)

目录 总体皮尔逊Person相关系数: 样本皮尔逊Person相关系数: 两点总结: 假设检验:(可结合概率论课本假设检验部分) 皮尔逊相关系数假设检验: 更好的方法:p值判断方法 皮尔逊相…

lua调用c动态库实例

简介 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 特点 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K&a…

STM32/51单片机实训day4——RFID数据读取|RC522|串口数据收发、可模拟RFID (三) 仿真

目录 1 任务指导 2 实验步骤 3 串口调试 4 USART配置 5 fputs函数重写 内 容:能够读取RFID卡S50的ID——编程实现串口数据收发 学 时:3学时 知识点:电路图设计、USART配置 重点: USART配置 难点:USART配置 时…

赶快升级吧!PHP8比PHP5快41倍,比PHP7快3倍

本文得出的结论,归结于仅运行纯CPU任务的脚本的基准测试结果,不需要I/O操作的任务,例如访问文件、网络或数据库连接。 这些是纯 CPU 基准测试。它们并未涵盖 PHP 性能的所有方面,并且它们可能无法代表实际情况。然而,结…

用Python标准库统计CSDN阅读量

urllib基础 一般做爬虫其实很少有推荐urllib的,但urllib乃是Python标准库成员,在要求比较简单的情况下,采用urllib还是比较方便的。 作为爬虫入门必学包,urllib最常用的函数一定是urllib.request中的urlopen。其返回对象是HTTPR…

ES学习路程(二)

关于ES第一篇是在Linux安装,为了方便我在windows搭建一套ES和kibana版本(7.15.0) 第一步:下载安装ES在windows 官网下载相应版本的es和kibana: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7…

《图解TCP/IP》阅读笔记(第八章 8.6、8.7)—— 网络管理与其他应用层协议

前言 本篇是第八章的最后一篇 8.6 网络管理 从前,网络管理凭借管理员的记忆和直觉进行,但是网络规模越大,人的力量就越不足,所以需要一个严密的管理工具或方法。 在TCP/IP的网络管理中,可以使用SNMP(Si…

uni-app——小程序实现本地图片的上传以及身份证的智能识别

文章目录 前言一、示例图二、实现过程 1.完成提交图片的api地址2.获取本地图片3.将本地图片上传至开发者服务器三、具体实现代码四、身份证的智能识别总结前言 上传本地图片的功能很常见,那么具体该如何实现呢? 一、示例图 二、实现过程 1.完成提交图…

操作系统接口系统调用的实现

接口 连接两个东西,信号转换,屏蔽细节… 操作系统接口 连接上层用户和操作系统软件,方便了使用,屏蔽了细节。 操作系统接口的形式 为应用层提供一些重要的函数,如printf,write,read等。接口…

Windows Active Directory —— 常见的远程控制对比

在windows环境中,需要远程访问的时候很多,使用的工具和命令也各式各样,我把自己常用的命令和工具总结一下 远程访问方式: 1)对服务器而言,RDP这个绝对是最常见的方式,mstsc /v:remoteserver 即可打开 2)winrs和winrm,这个可以允许我们通过命令行来远程访问,远程服务…

TypeScript基础类型

目录 数字 number 字符串 string 布尔 boolean 数组 Array 元组 枚举 enum 任意值 any void Null 和 Undefined null undefined Never 数字 number let age: number 24; 虽然爆红,但是依然能改 字符串 string let name:string"张三" 布尔 bo…

ef参数设置说明(faiss)

1、模型参数:1000代表聚类中心个数 随着聚类个数的增加,模型索引的构建时间近似指数增加但搜索精度也线性增加,不影响内存占用,几乎不影响搜索耗时 结论:在 Faiss 引擎的聚类情况下,对于百万级别的数据大概…

B/S结构和C/S结构详细介绍

什么是c/s结构、b/s结构 1、C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,充分利用两端硬件环境的优势。早期的软件系统…

Haploview做单倍型教程1--软件安装

大家好,我是邓飞,这里介绍一下如何使用Haploview进行单倍型的分析。 计划分为三篇文章: 第一篇:Haploview做单倍型教程1–软件安装第二篇:Haploview做单倍型教程2-分析教程第三篇:Haploview做单倍型教程3…