Sonic 开源一年多了,我们迎来了 2.0.0 版本。一路以来感谢各位 Sonic 用户的支持,开源不易。
除了前阵子介绍的 iOS 在线 webview 调试外、支持游戏 POCO 控件操作外,2.0.0 还有一个新功能就是运行自定义脚本。
自定义脚本的诞生让 Sonic 自动化的自由度再增加了一个新的空间。
Sonic 支持使用 Groovy、Python 脚本,但是官方更加推荐使用 Groovy 脚本。原因如下:
更多内容可以查看使用文档,我们先马上进入主题
Fastbot 稳定性测试工具 Fastbot 是字节跳动的 QualityLab 团队开发的一款融合了机器学习与强化学习的基于模型测试的工具。
那例如我们想在 Sonic 上跑 fastbot,要怎么使用呢?
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 执行完毕再开启,都在脚本里体现了。
2.0.0-beta 开始,支持游戏 POCO 控件了,当然您的游戏要先接入 POCO-SDK。
使用 POCO 相关步骤时,需确保:
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 继续努力做得更好,希望大家能保持关注~