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

news/2024/7/10 18:52: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.niftyadmin.cn/n/76474.html

相关文章

华为OD机试 - 异常的打卡记录 | 备考思路,刷题要点,答疑 【新解法】

最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…

简单的组合拳

前言:在最近的wxb举行hw中,同事让我帮他看看一些后台登录站点。尝试了未授权,弱口令皆无果,要么不存在弱口令,要么有验证码,没办法绕过。本文章仅提供一个思路,在hw中更多时候并不推荐尝试这种思…

STC单片机 VS/HX1838红外接收和发送实验

STC单片机 VS/HX1838红外接收和发送实验 📌相关篇《STC单片机获取红外解码从串口输出》🔨所使用的红外接收头VS1838 📋VS1838引脚定义🌿5MM发射头,940nm红外发射二极管 红外遥控发射头。(外观看起来和普通的发光二极管没有什么差异,购买时需要注意确认)。 🔰采用的…

华为OD机试 - 快递业务站(Python)

快递业务站 题目 快递业务范围有 N 个站点,A 站点与 B 站点可以中转快递,则认为 A-B 站可达, 如果 A-B 可达,B-C 可达,则 A-C 可达。 现在给 N 个站点编号 0、1、…n-1,用 s[i][j]表示 i-j 是否可达, s[i][j] = 1表示 i-j可达,s[i][j] = 0表示 i-j 不可达。 现用二维…

计算机导论期末知识点及试题总结 [近三万字总结 · 全]

计算机导论期末知识点总结计算机导论知识点总结(一)计算机导论基础知识总结试题及答案(二)计算机导论期末详细知识点总结(三)计算机导论知识点总结(一) 建议点赞收藏起来&#xff0…

代码随想录算法训练营第六十三天| 503.下一个更大元素II、42. 接雨水

Leetcode - 503这题其实和下一个更大元素那题一样,只是说可以找自己前面的元素,那我索性就把遍历范围从本序列延长到两个相同序列。这样某个元素寻找下一个更大元素到本序列末尾后还可以继续往下,也就是从序列头开始找。这里依旧是可以用单调…

影响AFE采样精度的因素有哪些?

**AFE(Analog Front End)**是模拟前端电路的缩写,它是模拟信号传感器和数字信号处理器之间的连接点。AFE采样精度是指模拟信号被数字化后的准确度,对于很多电子设备来说,这是一个至关重要的性能指标。本文将介绍影响AF…

物联网传感器市场的六个特点分析

什么是传感器 传感器:传感器是一种检测装置,能感受到被测量的信息,并能将感受到信息变换信号或者其他所需形式进行输入去,以满足信息的收集、传输、存储、控制等要求。当然这都是官方的话语,看起来比较难理解。相比较…