开源测试工具 什么?Sonic 2.0.0 版本还能这么玩?

Eason for Sonic云真机系列 · October 30, 2022 · Last by replied at November 08, 2022 · 8272 hits

前言

Sonic 开源一年多了,我们迎来了 2.0.0 版本。一路以来感谢各位 Sonic 用户的支持,开源不易。

除了前阵子介绍的 iOS 在线 webview 调试外、支持游戏 POCO 控件操作外,2.0.0 还有一个新功能就是运行自定义脚本。

自定义脚本使用文档
POCO 控件使用文档

自定义脚本

自定义脚本的诞生让 Sonic 自动化的自由度再增加了一个新的空间。

Sonic 支持使用 Groovy、Python 脚本,但是官方更加推荐使用 Groovy 脚本。原因如下:

  1. 可以直接使用 Agent 所有内置函数与变量。
  2. Groovy 引擎可以兼容 Java 语言,能与 Java 很好的结合,可以直接运行 Java 代码或者 Groovy 与 Java 混用。
  3. Groovy 语法简单,容易扩展,学习门槛低。
  4. 直接运行在 JVM 上,无需配置额外环境。
  5. 等等…

更多内容可以查看使用文档,我们先马上进入主题

应用场景

关于 fastbot

Fastbot 稳定性测试工具 Fastbot 是字节跳动的 QualityLab 团队开发的一款融合了机器学习与强化学习的基于模型测试的工具。

示例

那例如我们想在 Sonic 上跑 fastbot,要怎么使用呢?

  1. 先把 fastbot 需要的 jar 推送到手机上,准备好环境
  2. 使用自定义脚本功能
import org.cloud.sonic.agent.bridge.android.AndroidDeviceBridgeTool;
import org.cloud.sonic.agent.tests.LogUtil;
import org.cloud.sonic.agent.common.interfaces.StepType;
import com.android.ddmlib.IShellOutputReceiver;
import java.util.concurrent.TimeUnit;

def testFastbot(){
        LogUtil log = androidStepHandler.log
        androidStepHandler.getAndroidDriver().closeDriver()
        androidStepHandler.iDevice.executeShellCommand("CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p package_name --agent reuseq --running-minutes duration(min) --throttle delay(ms) -v -v",
                        new IShellOutputReceiver() {
                            @Override
                            public void addOutput(byte[] bytes, int i, int i1) {
                                String res = new String(bytes, i, i1);
                                log.sendStepLog(StepType.INFO,"FastBot log",res)
                            }

                            @Override
                            public void flush() {
                            }

                            @Override
                            public boolean isCancelled() {
                                return false;
                            }
                        }, 0, TimeUnit.MILLISECONDS);
        int port = AndroidDeviceBridgeTool.startUiaServer(androidStepHandler.iDevice);
        androidStepHandler.startAndroidDriver(androidStepHandler.iDevice, port)
}

testFastbot()

这里有个坑,Sonic 安卓默认自动化框架是 UIAutomator2Server,但是底层与 fastbot 有冲突,所以两者同时启动时会有阻塞的情况出现,因此先临时 close 掉 uia2 服务,等 fastbot 执行完毕再开启,都在脚本里体现了。

POCO 控件遍历

2.0.0-beta 开始,支持游戏 POCO 控件了,当然您的游戏要先接入 POCO-SDK。
使用 POCO 相关步骤时,需确保:

  1. 被测控件类型为游戏控件
  2. 对应游戏包已经接入 POCO-SDK。 👉POCO 官方接入指南
  3. 已经打开接入 SDK 的对应引擎页面。
  4. 注:接入 POCO-SDK 时,如果有更改默认的 socket 启动端口,可以在【启动 PocoDriver】步骤中指定连接端口的值。
import org.cloud.sonic.agent.common.models.HandleDes;
import org.cloud.sonic.agent.tests.LogUtil;
import org.cloud.sonic.agent.common.interfaces.StepType;

def testPoco(){
      LogUtil log =  androidStepHandler.log
      HandleDes handleDes = new HandleDes()
      log.sendStepLog(StepType.INFO,"Global",androidStepHandler.globalParams.getString("xxxx"))
      androidStepHandler.startPocoDriver(handleDes,"UNITY_3D",5001)
      for(int i=0;i<5;i++){
        androidStepHandler
          .pocoSwipe(handleDes,"Star"+[i],"poco(\"playDragAndDrop\").child(\"star\")["+i+"]",
                    "Shell","poco(\"shell\")")
        log.sendStepLog(StepType.INFO,"Poco Swipe","Move Done.")
      }
      androidStepHandler.closePocoDriver(handleDes)
}

testPoco()

效果图:

结语

Sonic 继续努力做得更好,希望大家能保持关注~

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞

搞起来

太赞了,从 1.0 就开始使用的,支持 sonic

Eason #3 · October 31, 2022 Author
tester1.0 回复

😆 哈哈哈来

Eason #4 · October 31, 2022 Author

哇塞,老粉丝啊

跑 fastbot 的报告分析最好也有哈

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up