开源云真机平台——Sonic应用实践

news2024/11/18 5:45:12

前言

Sonic是一款开源、支持分布式部署、在线自动化测试的私有云真机平台。想着写一篇总结分享。

一、云真机平台

1.云真机平台对比

目前市面上常见的云真机平台有两种,一种是各大服务商如阿里、腾讯、百度推出的公共云真机平台,如:WeTest、EMAS,除了收费高点其他好像没什么缺点;一种是网上各种开源云真机平台,支持私有化部署,如:Sonic、STF,这类平台的特点是免费、支持二次开发,缺点是功能支持相对薄弱(如自动化、性能)、真机采购成本高(当然,这并不是平台的缺点,如果你司有足够的测试机资源的话,而且也不是每个企业都有全面的兼容性测试需求,你也可以选择接入少量真机)。

2.云真机平台能够解决的问题

  • 兼容性测试:需接入一定数量、具有代表性的测试机资源;
  • 自动化测试:平台本身自带自动化测试能力,也可以自己写代码、连接真机运行测试;
  • 测试机资源紧张:云真机平台都秉承着用完即走的设计理念,因此使用完退出后,下一个登录用户可以接着使用,一定程度上能够解决研发团队内测试机资源紧张的问题;
  • 远程演示:如验收测试或是客户演示过程中,手机和电脑无法实时投屏在同一个显示器或电视等外接设备,这是只需要在已投屏的电脑上登录远程真机地址即可实时访问,方便同步观看;
  • 测试数据共享不便问题:测试过程中,有时需要在一个历史版本上验证回溯问题,云真机可以安装历史版本的APP,并提前预置好测试数据,以便共享使用;

二、sonic介绍

1.关于Sonic

Sonic,一站式开源分布式集群云真机测试平台,致力服务于中小企业的客户端UI测试。 Sonic当前的愿景是能帮助中小型企业解决在客户端自动化或远控方面缺少工具和测试手段的问题。

  • 官网:https://sonic-cloud.gitee.io/#/Home

  • github: https://github.com/SonicCloudOrg

  • Testhome:https://testerhome.com/opensource_projects/sonic

2.功能特性

3.Sonic架构

  • 架构介绍:http://testerhome.com/opensource_projects/sonic

三、Sonic环境搭建(docker-compose)

1.前置环境准备

硬件环境主要就是手机和Linux服务器一台(CentOS或Ubuntu均可,以下部署以CentOS系统为例),这个没什么好说的,主要说一下软件环境,Linux需安装:

  • Docker、docker-compose:网上有很多教程,可以自行搜索安装,在此不过多赘述;
  • MySQL:可以接入现有的同一内网环境下的MySQL,也可以使用Docker快速安装部署:
docker run -it -d -e MYSQL_ROOT_PASSWORD=123456 --name=mymysql -p 3307:3306 mysql

  • ADB环境:ADB即Android调试桥,是接入Android设备的前提,搭建步骤可以参照《如何在Linux快速搭建一套ADB环境》;
  • Python环境:可选,主要为了方便自动化测试代码也可以运行在Linux本地,搭建步骤可以参照《Linux下一键安装Python3&更改镜像源&虚拟环境管理技巧》;

2.下载依赖文件

  • 部署文档:https://sonic-cloud.gitee.io/#/Deploy
wget https://github.com/SonicCloudOrg/sonic-server-simple/archive/refs/tags/v1.3.2-release.tar.gz    # 下载压缩包
tar -zxvf v1.3.2-release.tar.gz   # 解压后会得到docker-compose.yml  LICENSE  pom.xml  README_CN.md  README.md  src

3.编辑配置文件

vi docker-compose.yml,可以对照如下内容进行修改:

version: '3'
services:
  sonic-server-simple:
    image: "sonicorg/sonic-server-simple:v1.3.2-release"
    environment:
      # 以下为MySql配置,localhost请替换为自己MySql服务的ipv4地址
      - MYSQL_HOST=192.168.1.122  # MySQL主机地址
      - MYSQL_PORT=3308  # MySQL端口号
      - MYSQL_DATABASE=sonic  # MySQL为sonic单独创建一个数据库-sonic
      - MYSQL_USERNAME=root  # MySQL登录用户名
      - MYSQL_PASSWORD=123456  # MySQL登录密码
      # 在服务器部署的话,localhost改为服务器ip
      # port更改为sonic-server-simple暴露的port(一般不变)
      - SONIC_API_HOST=192.168.1.122
      - SONIC_API_PORT=8094
      - SONIC_NETTY_PORT=8095
      # token加密的key值
      - SECRET_KEY=sonic
      # 身份验证token有效天数
      - EXPIRE_DAY=150
      # 前端页面访问地址,不填默认为http://localhost:3000
      - CLIENT_HOST=http://192.168.1.122:3000
      # 文件保留天数(指测试过程产生的文件,包括图片、录像等等)
      - FILE_KEEP_DAY=60
      # 测试结果保留天数
      - RESULT_KEEP_DAY=60
      # 以下均为Cron表达式
      # 清理文件定时任务
      - FILE_CRON=0 0 12 * * ?
      # 清理测试结果定时任务
      - RESULT_CRON=0 0 12 * * ?
      # 发送日报定时任务
      - DAY_CRON=0 0 10 * * ?
      # 发送周报定时任务
      - WEEK_CRON=0 0 10 ? * Mon
    networks:
      - sonic-network
    # 数据卷
    volumes:
      - files:/keepFiles/
      - files:/imageFiles/
      - files:/recordFiles/
      - files:/packageFiles/
      - files:/logs/
    # 端口映射
    ports:
      - "8094:8094"
      - "8095:8095"
  sonic-client-web:
    image: "sonicorg/sonic-client-web:v1.3.2-release"
    environment:
      #192.168.1.1改为你的ipv4,port更改为sonic-server-simple暴露的port(一般不变)
      - SONIC_API_HOST=192.168.1.122
      - SONIC_API_PORT=8094
    networks:
      - sonic-network
    # 端口映射
    ports:
      - "3000:80"

volumes:
  files:

networks:
  sonic-network:
    driver: bridge

4.启动容器

docker-compose up -d

执行上述命令会按照先后顺序自动执行以下过程:

  1. 先拉取镜像
  2. 创建容器
  3. 启动容器


通过上图可以看出sonic自动创建了两个容器:

  • sonic-server-simple-132-release_sonic-client-web_1:前端相关容器
  • sonic-server-simple-132-release_sonic-server-simple_1:服务端相关容器

四、创建Sonic项目

1.注册账号

  • 前台访问地址:http://192.168.1.122:3000/

2.创建项目

填写项目信息

3.创建agent

填写agent名称即可自动创建agent,下图为agent详情,记住AgentKey,后续部署sonic agent的时候会用到

五、部署Agent

1.下载agent相关资源

wget https://github.com/SonicCloudOrg/sonic-agent/releases/download/v1.3.2-release/docker-compose.yml

2.修改配置文件

编译sonic-agent的配置文件docker-compose.yml

version: '3'
services:
  sonic-agent:
    #下方为Docker Hub镜像,推荐海外用户使用,默认使用国内加速镜像
#    image: "sonicorg/sonic-agent-linux:v1.3.2-release"
    image: "registry.cn-hangzhou.aliyuncs.com/sonic-cloud/sonic-agent-linux:v1.3.2-release"
    environment:
      # 替换为部署Agent机器的ipv4
      - AGENT_HOST=192.168.1.122
      # 替换为Agent服务的端口,可以自行更改
      - AGENT_PORT=7777
      # 替换为前面新增Agent生成的key
      - AGENT_KEY=828aa5a4-ce30-4ebb-9f9b-5a01bbe5ea5e
      # 后端的host
      - SERVER_HOST=192.168.1.122
      # 这个port改成后端文件中心的port(一般不变)
      - SERVER_FOLDER_PORT=8094
      # 这个port改成后端传输中心的port(一般不变)
      - SERVER_TRANSPORT_PORT=8095
      # 是否使用安卓模块
      - ANDROID_ENABLE=true
      # 是否开启远程adb调试功能
      - USE_ADBKIT=true
      # 是否使用iOS模块
      - IOS_ENABLE=true
      # 替换为你自己使用的wda的bundleId,如果没有.xctrunner后缀会自动补全,建议使用公司的开发者证书
      - WDA_BUNDLE_ID=com.facebook.WebDriverAgentRunner.xctrunner
      # 是否启用Appium
      - APPIUM_ENABLE=true
      # 默认为0会自动寻找随机端口启动,如果需要指定appium server端口,请在这里设置
      - APPIUM_PORT=0
      # 是否启用webview调试功能
      - WEBVIEW_ENABLE=true
      # 谷歌调试端口,一般不需要修改(默认0使用随机端口,如果需要开启防火墙给外部使用,请设置固定端口如7778)
      - CHROME_DRIVER_PORT=0
    network_mode: "host"
    privileged: true
    # 数据卷
    volumes:
      - /dev/bus/usb:/dev/bus/usb
      - /var/run/usbmuxd:/var/run/usbmuxd

3.启动容器

docker-compose up -d

同前面部署sonic一样,执行上述命令部署agent,会按照先后顺序自动执行以下过程:

  1. 先拉取镜像
  2. 创建容器
  3. 启动容器

4.查看容器相关信息

docker ps -a | grep sonic


通过上图可以看出:

  • sonic一共3个相关容器,分别为agent相关容器、前端相关容器、服务端相关容器;
  • 前端访问的80端口被映射到了3000端口,与docker-compose.yml中配置的一致;
  • 后端服务相关的8094、8095分别映射8094、8095,与docker-compose.yml中配置的一致;

六、Sonic使用

1.接入设备

以Android设备为例,Android设备需开启USB调试权限,并在插入服务器主机后、手机页面弹出的“是否允许USB调试本台设备”的选项中选择“是”。

接入设备后的页面:

2.使用设备

首次进入设备系统会初始化设备连接,可能需要等待几秒。

在这里插入图片描述

3.连接adb

同Windows电脑本地连接Android一样,Windows也可以通过adb远程连接sonic上的设备(进入设备页面,远程ADB窗口会显示一串连接命令“adb connect 192.168.1.122:37345”)。连接完adb后,就可以当做本地设备进行自动化测试等操作了。

adb connect 192.168.1.122:37345

4.自动化测试效果

小结

1.部署感受

总体来说,部署过程比较流畅,除了sib工具、 iOS配置WebDrierAgent由于资源限制,暂未尝试外,其他没有遇到什么卡住的点,对于初学者来说,需要:

  • 熟练使用Linux常用操作命令;
  • docker相关知识、docker-compose文件定义规范等;
  • MySQL相关技能,如创建用户、创建数据库、用户赋予数据库权限等,当然也可以借助工具实现;

2.使用感受

无论是界面体验、流畅度、还是UI自动化测试功能,都非常不错,粉丝群内对于反馈的问题也能及时指导解决,唯一美中不足之处就是:

  • 手机屏幕展示框首次未自适应显示,需要左右拖动屏幕右侧框条才能看到整个屏幕,也可以通过放大浏览器页面比例来达到查看整个手机屏幕的目的,但此时,其他区域也同样会被放大;


3.避坑指南

  • 推荐使用Chrome浏览器,切勿使用火狐浏览器;
  • 需在手机系统设置-输入法设置中,关闭安全键盘,否则会在调起键盘、输入字符时黑屏或无法输入;
  • 如果进入手机页面,显示准备图像中,但手机端没安装sonic助手之类的APP,可以尝- 试重启agent容器、再重新插拔手机;
  • 如果是小米手机连接,需要关闭MIUI优化;
  • 目前在远程连接鸿蒙系统设备、执行uiautomator2自动化脚本过程中会报错“GatewayError”(刚开始初始化设备连接、启动APP时有反应,随后报错,关闭纯净模式仍存在);

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

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

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

相关文章

2月18日绿健简报,星期六,农历正月廿八

2月18日绿健简报,星期六,农历正月廿八坚持阅读,静待花开1. 中国证监会发布全面实行股票发行注册制相关制度规则,即日起施行。2. 返回地面75天后神舟十四号乘组航天员首次与媒体和公众正式见面。3. 银保监会查处5家金融机构违法违规…

C语言结构体复习总结

目录 一、结构体引入 1.1 为什么要用结构体: 1.2 定义一个结构体: 1.3 结构体在声明的时候不要定义变量: 1.4 根据业务需求定义不同的结构体: 二、定义结构体和使用变量 2.1 最好不要在声明结构体时定义变量: …

找工作必看,用Python爬取数据分析岗位信息并可视化分析

导读: 最近经常收到人事小姐姐和猎头小哥哥的面试邀请,想想最近也不是招聘旺季呀。但又想到许多小伙伴们有找工作这方面的需求,今天就来分享一篇简单的爬虫案例,旨在跟大家一起分析一下部分招聘市场。以"数据分析"为例。…

Linux之Xshell工具使用

shell简介Xshell是一个远程工具,可以远程连接linux系统 ,SSH,远程管理 Xshell来远程访问Linux系统的终端 。shell的英文含义是“壳”;它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表…

Eclipse下Maven的集成

Eclipse下Maven的集成 2.1指定本地maven环境 参考:Eclipse的Maven创建_叶书文的博客-CSDN博客_eclipse创建maven项目 指定用本地maven指定maven仓库设置和地址2.2创建maven项目 1.新建 2.目录设置 3.坐标设置(随便写就行) 4.目录结构 2.3配置…

事件驱动型架构

事件驱动型架构是一种软件设计模式,其中微服务会对状态变化(称为“事件”)作出反应。事件可以携带状态(例如商品价格或收货地址),或者事件也可以是标识符(例如,订单送达或发货通知&a…

【看表情包学Linux】进程地址空间 | 区域和页表 | 虚拟地址空间 | 初识写时拷贝

🤣 爆笑教程 👉 《看表情包学Linux》👈 猛戳订阅 🔥 💭 写在前面:本章核心主题为 "进程地址空间",会通过验证 Linux 进程的地址空间来开头,抛出 "同一个值能有不同内…

【IOS逆向】dumpdecrypted砸壳

【IOS逆向】dumpdecrypted砸壳 前面简单尝试了下frida-trace,发现可以追踪对应pid动态运行时的各种函数,但是对于一个完整APP应用,我们如何得到关键的运行函数,这里就需要对IPA进行一个逆向拆解,找代码逻辑,然后结合f…

idea同时编辑多行-winmac都支持

1背景介绍 idea编辑器非常强大,其中一个功能非常优秀,很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后,可以直接多行编辑。 优点&a…

C++ STL 学习之【string】

✨个人主页: Yohifo 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 The key is to keep company only with people who uplift you, whose presence calls forth your best. 关键是只与那些提升你的人在一起&#xff0c…

前端开发常用案例(二)

这里写目录标题1.loding加载动画2.全屏加载动画效果3.吃豆豆4.鼠标悬停3D翻转效果5.3D旋转木马效果6.flex弹性布局-酷狗音乐播放列表flex弹性布局-今日头条首页热门视频栏grid网格布局-360图片展示小米商城左侧二级菜单1.loding加载动画 代码如下&#xff1a; <!DOCTYPE h…

干货 | PCB电路板短路了!试试这六种检查方法

首先&#xff0c;了解一下常见的电路板短路的种类&#xff1a;短路按照功能性可分为&#xff1a;焊接短路&#xff08;如&#xff1a;连锡&#xff09;、PCB短路&#xff08;如&#xff1a;残铜、孔偏等&#xff09;、器件短路、组装短路、ESD/EOS击穿、电路板内层微短路、电化…

九龙证券|房企纷纷驶入代建赛道 抢占千亿新蓝海

跟着房地产职业进入深度调整期&#xff0c;代建形式日益受到房企青睐&#xff0c;不少房企纷繁入局或加快布局&#xff0c;成为了近期商场关注的焦点。 2月11日&#xff0c;上坤集团宣告将布局共建办理事务&#xff0c;这也意味着其正式入局代建商场。实际上&#xff0c;上一年…

谷歌seo快排技术怎么做?Google排名霸屏推广原理

本文主要分享关于谷歌快速排名的方法和所需要的条件。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 首先提出一个问题&#xff1a;谷歌seo快排技术怎么做&#xff1f;如何达到谷歌霸屏的效果&#xff1f; 答案是&#xff1a;利用谷…

Java 基础面试题——常见类

目录1.String 为什么是不可变的&#xff1f;2.字符串拼接用“” 和 StringBuilder 有什么区别?3.String、StringBuffer 和 StringBuilder 的区别是什么?4.String 中的 equals() 和 Object 中的 equals() 有何区别&#xff1f;5.Object 类有哪些常用的方法&#xff1f;6.如何获…

【C语言进阶】你听说过柔性数组吗?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…

ChatGPT入门案例|商务智能对话客服(三)

本篇介绍智能客服的基本功能架构和基本概念&#xff0c;并利用对话流技术构建商务智能应用。 01、商务智能客服功能结构 互联网的发展已经深入到社会的各个方面&#xff0c;智能化发展已经成为社会发展的大趋势。在大数据和互联网时代&#xff0c;企业和组织愈加重视客户沟通…

波奇学数据结构:时间复杂度和空间复杂度

数据结构&#xff1a;计算机存储&#xff0c;组织数据方式。数据之间存在多种特定关系。时间复杂度&#xff1a;程序基本操作&#xff08;循环等&#xff09;执行的次数大O渐进法表示法用最高阶的项来表示&#xff0c;且常数变为1。F&#xff08;n&#xff09;3*n^22n1//F(n)为…

git基础使用

Git安装 去安装>> 正式开始 进入要管理的目录&#xff0c;执行命令 git init 查看管理目录下的状态 git status 注&#xff1a;新增文件和修改过后的文件都是红色 管理指定文件&#xff08;红变绿&#xff09; 指定文件&#xff1a;git add 文件名 当前目录下所有&…

【Python入门第十二天】Python 列表

Python 集合&#xff08;数组&#xff09; Python 编程语言中有四种集合数据类型&#xff1a; 列表&#xff08;List&#xff09;是一种有序和可更改的集合。允许重复的成员。元组&#xff08;Tuple&#xff09;是一种有序且不可更改的集合。允许重复的成员。集合&#xff08…