前言

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 继续努力做得更好,希望大家能保持关注~


↙↙↙阅读原文可查看相关链接,并与作者交流