stf設備集群管理


移動設備多了之后不易管理, 如下需求: 1、手機綜合控制, 2、實時交互, 3、遠程控制; 

一、安裝過程:

1、首先確認安裝基礎:

node -v
npm -v
java -version
adb version

安裝db:   brew uninstall rethinkdb graphicsmagick zeromq protobuf yasm pkg-config

安裝stf:   npm install -g stf

報錯1:提示權限問題,

使用sudo安裝后還是報錯:

 

解決辦法: 安裝stf過程中  遇到node權限問題, 后經查詢 將系統的node管理改成.nvm管理  

安裝nvm  :  curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

  501  nvm ls-remote       # 查看目前node版本

  502  nvm install v12.9.1  #安裝一個版本

  503  nvm install v11.0.0

  504  nvm ls              #查看本地安裝的node版本

  505  nvm alias default v11.0.0  #切換node版本

 

問題2: 使用nvm安裝還是報錯:

后經查詢,使用node版本不能過高,改成v8.14.0 后,安裝成功

 

二、使用stf:

啟動stf:  

rethinkdb
stf local

輸入本地瀏覽器:localhost:7100

 

練習: 1、使用一台本地機作為遠程機部署stf    (本地鏈接局域網主機命令 open vnc 192.168.x.x)

       2、遠程機通過hub鏈接移動設備群  

       3、本地機通過遠程鏈接腳本鏈接stf獲取到移動設備list ,獲取遠程adb,啟動本地appium 根據申請的多設備給本地appium傳多組caps;   (遠程機部署stf  adb)

       4、遠程部署jenkins,把本地機作為節點配置;通過adb在申請的多個移動設備上順序或並行執行自動化測試  執行本地機appium appcrawler等自動化測試

1、遠程機啟動stf  本地啟動appium  獲取StfToken

 

2、復制stf的api控制腳本

```

#!/usr/bin/env bash

#STF_TOKEN=9d06d1b4dae94c88863138bac8bf50369be151b812a44215b19e0b4f137b13fb
STF_TOKEN=fa46cb5aff944731a5cf88491b5b02a54125c9711d3741c2b160e3ceaea3928d
#STF_URL=http://localhost:7100
STF_URL=http://192.168.1.50:7100
DEVICE_SERIAL="demo"

function add_device
{
response=$(curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $STF_TOKEN" \
--data "{\"serial\": \"$DEVICE_SERIAL\"}" $STF_URL/api/v1/user/devices)

success=$(echo "$response" | jq .success | tr -d '"')
description=$(echo "$response" | jq .description | tr -d '"')

if [ "$success" != "true" ]; then
echo "Failed because $description"
echo exit 1
fi

echo "Device $DEVICE_SERIAL added successfully"
}

function remote_connect
{
response=$(curl -X POST \
-H "Authorization: Bearer $STF_TOKEN" \
$STF_URL/api/v1/user/devices/$DEVICE_SERIAL/remoteConnect)

success=$(echo "$response" | jq .success | tr -d '"')
#增加一個拉取的設備名字的變量,方便后面並行執行
remote_device=$(echo "$response" | jq .remoteConnectUrl | tr -d '"')
description=$(echo "$response" | jq .description | tr -d '"')

if [ "$success" != "true" ]; then
echo "Failed because $description"
echo exit 1
fi
remote_connect_url=$(echo "$response" | jq .remoteConnectUrl | tr -d '"')

adb connect $remote_connect_url

echo "Device $DEVICE_SERIAL remote connected successfully"
}

function remove_device
{
response=$(curl -X DELETE \
-H "Authorization: Bearer $STF_TOKEN" \
$STF_URL/api/v1/user/devices/$DEVICE_SERIAL)

success=$(echo "$response" | jq .success | tr -d '"')
description=$(echo "$response" | jq .description | tr -d '"')

if [ "$success" != "true" ]; then
echo "Failed because $description"
echo exit 1
fi

echo "Device $DEVICE_SERIAL removed successfully"
}

every_device(){
#獲得可用設備列表
devices=$(curl -H "Authorization: Bearer $STF_TOKEN" $STF_URL/api/v1/devices | jq -r '.devices[] | select(.present==true)|.serial ')
for DEVICE_SERIAL in $devices
do
add_device
remote_connect
sleep 2
device=$(adb devices | grep : | awk '{print $1}' | head -1)
adb devices
eval $1
adb disconnect $device
sleep 2
adb devices
remove_device
done
}

```

3、配置jenkins;  在腳本目錄控制stf執行自動化測試

docker run -d --name jenkins_9 -p 8080:8080 -p 50000:50000 -v /Users/wangjianqing/jenkins/9:/var/jenkins_home jenkins/jenkins

 

 

. stf.sh           #加載shell腳本
DEVICE_SERIAL=$device  #stf頁面 設備info中顯示的
add_device                     #從stf系統中申請一台設備  stf系統中被申請的設備會被至成StopAutomation狀態
remote_connect     #會彈出提示是否把key添加到本地,添加完成后本地執行adb devices  會有一台遠程的設備  此時本地機可以使用遠程機的adb控制移動設備

adb disconnect     #釋放鏈接的設備

sleep 2
adb devices
echo remote_device=$remote_device  #打印一下鏈接的設備
adb -s $remote_device install -r ~/Downloads/xueqiu_wxdialog.apk  #stf申請的設備在釋放后會自動卸載安裝app  因此需要重新安裝
java -jar appcrawler-2.4.0-jar-with-dependencies.jar -c demo_1.yml --capability "udid=$remote_device,systemPort=1${remote_device#*:}" 啟動appium時支持多設備並發 需要獨立udid 獨立端口
adb disconnect $remote_device  #斷開設備鏈接
remove_device         #移除設備

 

4、appium支持多設備並發執行測試,Android需要udid systemPort  chromDriverPort 保持獨立

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM