2021-06-15 好用的STF-Git项目

2023-11-03

1. 基于openstf二次开发的群控管理平台

GitHub:https://github.com/EasilyTest/stf

| 本项目根据openstf以及openstf-ios二次开发。同时支持Android/iOS单体
控制以及群体控制。
| 本项目可以兼容Linux/Mac,利用最新开源的tidevice实现wda快速编译运行,不一定需要Mac设备的支持,体验不一样的openstf.

  • 单控: 基于原生的openstf,操作便捷可使用文件安装,shell、剪贴板、日志等功能;
  • 群控: 批量支持机器同屏展示,一键home/移除等功能;

示例图

快速开始

Mac

仅需两步快速安装 (Mac):

  1. 准备一台 Mac 主机;

  2. 安装 brew 以及nodejs,运行以下命令

    	pip3 install -U tidevice  
    	brew uninstall --ignore-dependencies libimobiledevice  
    	brew uninstall --ignore-dependencies usbmuxd  
    	brew install --HEAD usbmuxd  
    	brew unlink usbmuxd  
    	brew link usbmuxd  
    	brew install --HEAD libimobiledevice  
    	brew install --HEAD ideviceinstaller  
    	brew install carthage  
    	brew install socat  
    	brew install graphicsmagick zeromq protobuf yasm pkg-config  
    	brew cask install android-platform-tools  
    
  3. 进入本项目目录,执行 cnpm install 或者 npm install

  4. 如需使用ios接入,配置WebDriverAgent,clone代码,clone完毕后进入目录,执行./Scripts/bootstrap.sh 下载 wda所需依赖库
    安装xcode(版本< 10.3),运行WebDriverAgent

  5. 如运行错误,检查stf doctor

Linux(centos):

  1. 基础环境准备

    	pip3 install -U tidevice  
    	sudo -s  
    	yum update  
    	yum install git  
    	yum install yum  
    	yum -y install gcc patch 
    	yum install gcc-c++  
    	yum install gcc-gfortran  
    	yum install zeromq-devel  
    
  2. 安装 rethinkdb、GraphicsMagick、zeromq pkg-config、yasm、libsodium、protobuf、libimobiledevice、ideviceinstaller
    2.1 安装rethinkdb

    	git clone https://github.com/rethinkdb/rethinkdb.git
    	cd rethinkdb
    	./configure --allow-fetch
    	make -j4
    	make install
    

    2.2 安装GraphicsMagick

    	wget https://iweb.dl.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.36/GraphicsMagick-1.3.36.tar.gz  
    	tar -zxvf GraphicsMagick-1.3.36.tar.gz  
    	cd GraphicsMagick-1.3.36  
    	./configure --prefix=/usr/local/gm  
    	make  
    	make install  
    

    2.3 安装zeromq

    	wget https://github.com/zeromq/libzmq/releases/download/v4.2.2/zeromq-4.2.2.tar.gz  
    	tar zxvf zeromq-4.2.2.tar.gz  
    	cd zeromq-4.2.2  
    	./configure --prefix=/usr/local/zeromq  
    	make  
    	make install  
    

    2.4 安装pkg-config

    	wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz  
    	tar -zxvf pkg-config-0.29.2.tar.gz  
    	cd pkg-config-0.29.2  
    	./configure --prefix=/usr/local/pkg-config --with-internal-glib  
    	make  
    	make intall  
    

    2.5 安装yasm

    	wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz  
    	tar -zxvf yasm-1.3.0.tar.gz  
    	cd yasm-1.3.0  
    	./configure --prefix=/usr/local/yasm  
    	make  
    	make install  
    

    2.6 安装libsodium

    	wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz  
    	tar -zxvf libsodium-1.0.18.tar.gz 
    	 cd libsodium-1.0.18
    	./autogen.sh  
    	./configure --prefix=/usr/local/libsodium  
    	make  
    	make install  
    

    2.7 安装protobuf

    	wget https://github.com/google/protobuf/releases/download/v3.5.0/protobuf-cpp-3.5.0.tar.gz  
    	tar -zxvf protobuf-cpp-3.5.0.tar.gz  
    	cd protobuf-3.5.0  
    	./configure --prefix=/usr/local/protobuf  
    	make  
    	make intall 
    

    2.8 软链接

    	ln -s /usr/local/gm/bin/* /usr/local/bin/  
    	ln -s /usr/local/yasm/bin/* /usr/local/bin/  
    	ln -s /usr/local/libsodium/bin/* /usr/local/bin/  
    	ln -s /usr/local/protobuf/bin/* /usr/local/bin/  
    

    2.9 更新/etc/profile

    	export PKG_CONFIG_PATH=/usr/local/pkg-config
    	export PATH=$PKG_CONFIG_PATH:$PATH  
    

    2.10安装libimobiledevice、ideviceinstaller

    	git clone https://github.com/libimobiledevice/libimobiledevice.git  
    	cd libimobiledevice  
    	./autogen.sh --prefix=/opt/local --enable-debug  
    	make  
    	sudo make install  
    	git clone https://github.com/libimobiledevice/ideviceinstaller.git  
    	cd ideviceinstaller  
    	./autogen.sh  
    	make  
    	sudo make install  
    
  3. cd到目录执行cnpm install或者npm install + glup build

相关工具

测试使用版本

  • macOS Catalina 10.15.6
  • CentOS Linux release 7.8.2003 (Core)
  • xcode (10.0)
  • nodejs (8.9.0)
  • python (3.7.6)

2. deploy-stf-docker 在Ubuntu上使用一键操作部署STF主服务器的脚本

deploy-stf-docker
 ├─ adbd.service.template
 ├─nginx.conf.template
 └─deploy_stf.sh

  • deploy-stf-docker/adbd.service.template

    [Unit]
    Description=Android Debug Bridge daemon
    
    [Service]
    #TimeoutStartSec=1min
    Restart=always
    RestartSec=2s
    Type=forking
    User=root
    ExecStartPre=/usr/bin/adb kill-server
    ExecStart=/usr/bin/adb start-server
    ExecStop=/usr/bin/adb kill-server
    
    [Install]
    WantedBy=multi-user.target
    
  • deploy-stf-docker/nginx.conf.template

    daemon off;
    worker_processes 4;
    
    events {
      worker_connections 1024;
    }
    
    http {
      upstream stf_app {
        server __IP_ADDRESS__:3100 max_fails=0;
      }
    
      upstream stf_auth {
        server __IP_ADDRESS__:3200 max_fails=0;
      }
    
      upstream stf_storage_apk {
        server __IP_ADDRESS__:3300 max_fails=0;
      }
    
      upstream stf_storage_image {
        server __IP_ADDRESS__:3400 max_fails=0;
      }
    
      upstream stf_storage {
        server __IP_ADDRESS__:3500 max_fails=0;
      }
    
      upstream stf_websocket {
        server __IP_ADDRESS__:3600 max_fails=0;
      }
    
      upstream stf_api {
        server __IP_ADDRESS__:3700 max_fails=0;
      }
    
      types {
        application/javascript  js;
        image/gif               gif;
        image/jpeg              jpg;
        text/css                css;
        text/html               html;
      }
    
      map $http_upgrade $connection_upgrade {
        default  upgrade;
        ''       close;
      }
    
      server {
        listen 80;
        server_name stf.test;
        keepalive_timeout 70;
        root /dev/null;
    
        resolver 127.0.0.1 valid=300s;
        resolver_timeout 10s;
    
        # Handle stf-provider@floor4.service
        location ~ "^/d/floor4/([^/]+)/(?<port>[0-9]{5})/$" {
          proxy_pass http://__IP_ADDRESS__:$port/;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection $connection_upgrade;
          proxy_set_header X-Forwarded-For $remote_addr;
          proxy_set_header X-Real-IP $remote_addr;
        }
    
        location /auth/ {
          proxy_pass http://stf_auth/auth/;
        }
    
        location /s/image/ {
          proxy_pass http://stf_storage_image;
        }
    
        location /s/apk/ {
          proxy_pass http://stf_storage_apk;
        }
    
        location /s/ {
          client_max_body_size 10240m;
          client_body_buffer_size 128k;
          proxy_pass http://stf_storage;
        }
    
        location /socket.io/ {
          proxy_pass http://stf_websocket;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection $connection_upgrade;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Real-IP $http_x_real_ip;
        }
    
        location /api/ {
          proxy_pass http://stf_api/api/;
        }
    
    
        location / {
          proxy_pass http://stf_app;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Real-IP $http_x_real_ip;
        }
      }
    }
    
  • deploy-stf-docker/deploy_stf.sh

    NETNAME=""
    NETWORK_INTERFACES=$(ls /sys/class/net)
    
    DNS_A
    DDRESS=$(nmcli device show ${NETNAME}|grep "IP4\.DNS\[1\]"|awk '{print $2}')
    echo "DNS Address: ${DNS_ADDRESS}"
    
    # Get exported IP Adreess 
    [ ! -z "$(echo ${NETWORK_INTERFACES} | grep "wlo1")" ]&&NETNAME="wlo1"
    [ ! -z "$(echo ${NETWORK_INTERFACES} | grep "eno1")" ]&&NETNAME="eno1"
    IP_ADDRESS=$(ifconfig ${NETNAME}|grep "inet "|awk -F: '{print $2}'|awk '{print $1}')
    [ $# -gt 0 ]&&IP_ADDRESS=$1
    echo "IP ADDRESS: ${IP_ADDRESS}"
    
    check_return_code() {
      if [ $? -ne 0 ]; then
        echo "Failed to run last step!"     
        return 1
      fi
       
      return 0
    }
    
    assert_run_ok() {
      if [ $? -ne 0 ]; then
        echo "Failed to run last step!"     
        exit 1
      fi
       
      return 0
    }
    
    prepare() {
      echo "setup environment ..."
    
      # Given advantages of performance and stability, we run adb server and rethinkdb 
      # on host(physical) machine rather than on docker containers, so need to
      #  install package of android-tools-adb first [ thinkhy 2017-05-04 ]
    
      # install adb
      apt-get install -y android-tools-adb
    
      apt-get install -y docker.io
      assert_run_ok
    
      docker pull openstf/stf 
      assert_run_ok
    
      #docker pull sorccu/adb 
      #assert_run_ok
    
      docker pull rethinkdb 
      assert_run_ok
    
      docker pull openstf/ambassador 
      assert_run_ok
    
      docker pull nginx
      assert_run_ok
    
      cp -rf adbd.service.template /etc/systemd/system/adbd.service  
      assert_run_ok
    
      sed -e "s/__IP_ADDRESS__/${IP_ADDRESS}/g"                     \
          -e "s/__DNS_ADDRESS__/${DNS_ADDRESS}/g"	                \
        nginx.conf.template |tee nginx.conf 
      echo 1>"env.ok"
    
    }
    
    if [ ! -e env.ok ]; then
      prepare
    fi
    
    # start local adb server
    echo "start adb server"
    systemctl start adbd 
    
    # start rethinkdb
    echo "start docker container: rethinkdb"
    docker rm -f rethinkdb
    docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
    check_return_code
    
    # start nginx, note: generate nginx.conf first
    echo "start docker container: nginx"
    docker rm -f nginx
    docker run -d -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro --name nginx --net host nginx nginx
    check_return_code
    
    # create tables 
    echo "start docker container: stf-migrate"
    docker rm -f stf-migrate
    docker run -d --name stf-migrate --net host openstf/stf stf migrate
    check_return_code
    
    # create storage components 
    echo "start docker container: storage-plugin-apk-3300"
    docker rm -f storage-plugin-apk-3300
    docker run -d --name storage-plugin-apk-3300 -p 3300:3000 --dns ${DNS_ADDRESS}  openstf/stf stf storage-plugin-apk  --port 3000 --storage-url http://${IP_ADDRESS}/
    check_return_code
    
    echo "start docker container: storage-plugin-image-3400"
    docker rm -f storage-plugin-image-3400
    docker run -d --name storage-plugin-image-3400 -p 3400:3000 --dns ${DNS_ADDRESS}  openstf/stf stf storage-plugin-image  --port 3000 --storage-url http://${IP_ADDRESS}/
    check_return_code  
    
    echo "start docker container: storage-temp-3500"
    docker rm -f storage-temp-3500
    docker run -d --name storage-temp-3500 -v /mnt/storage:/data -p 3500:3000 --dns ${DNS_ADDRESS}  openstf/stf stf storage-temp  --port 3000 --save-dir /home/stf
    check_return_code
    
    # tri-proxy
    echo "start docker container: triproxy-app"
    docker rm -f triproxy-app
    docker run -d --name triproxy-app --net host openstf/stf stf triproxy app --bind-pub "tcp://*:7150" --bind-dealer "tcp://*:7160" --bind-pull "tcp://*:7170"
    check_return_code
    
    echo "start docker container: triproxy-dev"
    docker rm -f triproxy-dev
    docker run -d --name triproxy-dev --net host openstf/stf stf triproxy dev --bind-pub "tcp://*:7250" --bind-dealer "tcp://*:7260" --bind-pull "tcp://*:7270"
    check_return_code
    
    # auth
    echo "start docker container: stf-auth-3200"
    docker rm -f stf-auth-3200
    docker run -d --name stf-auth-3200 -e "SECRET=YOUR_SESSION_SECRET_HERE" -p 3200:3000 --dns ${DNS_ADDRESS} openstf/stf stf auth-mock --port 3000 --app-url http://${IP_ADDRESS}/
    check_return_code
    
    # api 
    echo "start docker container: stf-api"
    docker rm -f stf-api
    docker run -d --name stf-api --net host -e "SECRET=YOUR_SESSION_SECRET_HERE"  openstf/stf stf api --port 3700 --connect-sub tcp://${IP_ADDRESS}:7150  --connect-push tcp://${IP_ADDRESS}:7170
    check_return_code
    
    # stf APP
    echo "start docker container: stf-app-3100"
    docker rm -f stf-app-3100
    docker run -d --name stf-app-3100 --net host -e "SECRET=YOUR_SESSION_SECRET_HERE" -p 3100:3000 openstf/stf stf app --port 3100 --auth-url http://${IP_ADDRESS}/auth/mock/ --websocket-url http://${IP_ADDRESS}/
    check_return_code
    
    
    # processor
    echo "start docker container: stf-processor"
    docker rm -f stf-processor
    docker run -d --name stf-processor --net host openstf/stf stf processor stf-processor.service --connect-app-dealer tcp://${IP_ADDRESS}:7160 --connect-dev-dealer tcp://${IP_ADDRESS}:7260
    check_return_code
    
    # websocket
    echo "start docker container: websocket"
    docker rm -f websocket
    docker run -d --name websocket -e "SECRET=YOUR_SESSION_SECRET_HERE" --net host openstf/stf stf websocket --port 3600 --storage-url http://${IP_ADDRESS}/ --connect-sub tcp://${IP_ADDRESS}:7150 --connect-push tcp://${IP_ADDRESS}:7170
    check_return_code
    
    # reaper
    echo "start docker container: reaper"
    docker rm -f reaper
    docker run -d --name reaper --net host openstf/stf stf reaper dev --connect-push tcp://${IP_ADDRESS}:7270 --connect-sub tcp://${IP_ADDRESS}:7150 --heartbeat-timeout 30000
    check_return_code
    
    # provider
    echo "start docker container: provider-${HOSTNAME}"
    docker rm -f provider1
    docker run -d --name provider1 --net host openstf/stf stf provider --name "provider-${HOSTNAME}" --connect-sub tcp://${IP_ADDRESS}:7250 --connect-push tcp://${IP_ADDRESS}:7270 --storage-url http://${IP_ADDRESS} --public-ip ${IP_ADDRESS} --min-port=15000 --max-port=25000 --heartbeat-interval 20000 --screen-ws-url-pattern "ws://${IP_ADDRESS}/d/floor4/<%= serial %>/<%= publicPort %>/"
    check_return_code
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021-06-15 好用的STF-Git项目 的相关文章

随机推荐

  • OLED拼接屏生产流程全解析:关键步骤、注意事项和技术趋势

    OLED拼接屏作为现代商业展示 会议室和指导系统中的重要组成部分 其高亮度 高对比度和逼真的色彩效果备受推崇 然而 要实现一块完美无缝的OLED拼接屏并非易事 本文将深入探讨OLED拼接屏的生产过程 包括关键步骤 注意事项以及当前的技术趋势
  • Spring Cloud Gateway 远程代码执行漏洞(CVE-2022-22947)

    一 漏洞描述 Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的网关 它旨在为微服务架构提供一种简单 有效 统一的 API 路由管理方式 3月1日 VMware发布安全公告
  • Linux三剑客(grep、sed、awk)

    Linux三剑客指的是grep sed awk 其中grep擅长查找功能 sed擅长取行和替换 awk擅长取列 一 grep grep作用是筛选 查询 文本搜索工具 根据用户指定的 模式 pattern 对目标文本进行过滤 显示被模式匹配到
  • bp神经网络算法matlab程序,bp神经网络的matlab实现

    MATLAB中BP神经网络的训练算法具体是怎么样的 先用newff函数建立网络 再用train函数训练即可 1 正向传播 输入样本 gt 输入层 gt 各隐层 处理 gt 输出层注1 若输出层实际输出与期望输出 教师信号 不符 则转入2 误
  • MATLAB批量重命名存储数据

    目录 文件查找 文件移动和改名 所调用函数功能 文件查找 首先确定数据存储的文件夹地址 记为folder dir 如果该文件夹不存在需要访问的子文件夹 则直接复制文件地址 如果存在需要访问的子文件夹 则要利用dir函数进行寻找 将子文件夹信
  • Content-Type

    要学习content type 必须事先知道它到底是什么 是干什么用的 HTTP协议 RFC2616 采用了请求 响应模型 客户端向服务器发送一个请求 请求头包含请求的方法 URI 协议版本 以及包含请求修饰符 客户 信息和内容的类似于MI
  • SQL综合案例之电商漏斗转化分析,pv,uv及

    漏斗模型示例 不同的业务场景有不同的业务路径 有先后顺序 事件可以出现多次 注册转化漏斗 启动APP gt APP注册页面 gt 注册结果 gt 提交订单 gt 支付成功 搜购转化漏斗 搜索商品 gt 点击商品 gt 加入购物车 gt 提交
  • 什么是UTXO

    比特币UTXO是比特币网络中的一个重要概念 它是比特币交易的基础 也是比特币的账户系统 本文将从UTXO的定义 使用方式 优点和缺点等多个方面详细介绍比特币UTXO 一 UTXO的定义 UTXO Unspent Transaction Ou
  • 超详细用profile工具分析sql语句执行及status说明

    超详细用profile工具分析sql语句执行及status说明 介绍 sql执行慢的原因有可能很多种 怎么定位呢 可以用Query Profile人工具 通过该工具可以获取一条Query 在整个执行过程中多种资源的消耗情况 如 CPU IO
  • 如何防止服务器数据轻易泄露

    如今 对于中小企业和个人用户来说 在考虑到服务器的性能与安全成本的基础上 应该如何保护自己的服务器数据呢 1 提高服务器的容错能力 容错能力指的是 当服务器出现磁盘阵列错误 发现其中一组数据出错 服务器可以自动通过其他磁盘来纠正错误 恢复到
  • deep learning编程作业总结3---一步步搭建多层神经网络及应用

    本周的主要学习了如何搭建一个多层神经网络 涉及较多的理论知识 因此本编博客将对自己所学的有关神经的知识做一个总结 图1展示的是具有4个隐藏层的神经网络结构 它的输入由x1 x2 x3构成 表示样本X具有三个特征 随后进入第一个隐藏层 该层分
  • python财务报表预测股票价格_建模股票价格数据并进行预测(统计信号模型):随机信号AR模型+Yule-Walker方程_Python...

    1 背景 针对股票市场中AR 模型的识别 建立和估计问题 利用AR 模型算法对股票价格进行预测 2 模型选取 股票的价格可视为随机信号 将此随机信号建模为 一个白噪声通过LTI系统的输出 通过原始数据求解 所建模型参数 得到模型 即可预测近
  • 华为od业务主管面试问题-我的回答

    目录 1 怎么处理项目上的需求 2 业余会不会学什么东西 3 你对加班的看法 4 你对OD的看法 5 哪里人 6 后续的发展 7 你对华为的认识 对当前岗位的了解 1 怎么处理项目上的需求 gt 项目经理和产品经理进行需求对接 gt 项目经
  • vant-list + toast分页加载,数据加载后会滚动至顶部

    vant list toast分页加载 数据加载后会滚动至顶部 主要原因是 toast组件在全局添加了 pointer event none 解决办法 在对应的van list的属性值添加 pointer event volunteer l
  • QT控件之(TableView)的居中效果

    T将tableView中的表头以及文本内容都进行居中处理 1 需要在构造函数中增加一句 以下增加的是表头的效果 ui gt tableView gt horizontalHeader gt setSectionResizeMode QHea
  • SQL注入之布尔盲注

    布尔盲注 如果确定页面注入点存在 如果页面没有回显并且没有报错信息可以考虑使用布尔盲注 布尔盲注的判断条件是页面布尔类型状态 当传递参数 id 1 and 1 1 这里以sqlilab的闯关为例 当传递参数 id 1 and 1 2 比较两
  • MyBatis学习(三):解析MyBatis的SQL映射XML文件写法和使用原理

    上面的两篇文章 分别是MyBatis的入门小程序和MyBatis的配置XML解析 有需要的可以先去看看这两篇文章 本篇文章 会来讲解SQL映射XML文件的写法以及如何使用 MyBatis真正的力量在于其映射语句 这里应该是奇迹发生的地方 S
  • Vue传参出现 Required String parameter 'username' is not present

    场景描述 在 使用axios 发送HTTP请求时 传递了后端指定的请求参数 但是后端报错 描述信息为 Required String parameter username is not present 分析问题 开始找原因 确定前端传递的参
  • jsp页面整合ECharts绘制图表(以折线图为例)

    文章目录 jsp页面整合ECharts绘制折线图 先看效果图 前端代码 后端测试代码 jsp页面整合ECharts绘制折线图 官网 https echarts apache org zh index html 官网上有demo可以直接调试样
  • 2021-06-15 好用的STF-Git项目

    好用的STF Git项目 1 基于openstf二次开发的群控管理平台 快速开始 Mac Linux centos 相关工具 测试使用版本 2 deploy stf docker 在Ubuntu上使用一键操作部署STF主服务器的脚本 1 基