云测服务 Tcloud 远程真机 iOS+Android 搭建记

环境搭一半就放弃 · 2019年11月04日 · 最后由 Liu0330 回复于 2020年06月01日 · 3834 次阅读

为什么搭建 Tcloud

首先想声明,本人比较菜,可能文章中有很多错误之处,请大家指出错误。
本人在去年年初就搭建过 stf,并且做出过一定的二次开发,以下两篇文章是本人发表。
https://testerhome.com/topics/14330
https://testerhome.com/topics/14654
但是stf 对我们公司而言,最大痛点在于不能支持苹果远程真机,因为只有同时支持苹果和安卓两款系统的远程真机,才能满足项目组的使用需求,9 月我看到 Tcloud 开源出来,并且界面上支持了 iOS 真机,这燃起来我一丝对 iOS 远程真机支持的希望!并且 Tcloud 平台还做到了测试系统里需要做到 的很多功能!
花了 3 天就把 Tcloud 安装好了,我在这里只提供一些安装思路,避免大家踩坑!
云测的 TesterHome 介绍链接:
https://testerhome.com/topics/20491

搭建前准备

首先是搭建 Tcloud 的前后端,我用的是虚拟服务器,系统版本是:Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018,作者并不建议在 windows 上搭建,因为似乎没有人成功过。

搭建后端

首先我们要在服务器上搭建后端,下面是 github 的链接:
https://github.com/bigbaser/TcloudServer
然后问题来了,在一个不起眼的地方,有一个 docker 部署 Tcloud 的文章,当你真的要搭建 Tcloud 的时候,请点击该文章。
https://github.com/bigbaser/TcloudServer/blob/master/deploy/docs/Docker%E9%83%A8%E7%BD%B2.md
当你经过一波三折又骨折的搭建,你终于可以在 9001 端口上可以访问 konga 了,我的地址是:http://172.20.71.211:9001/#
(这是内网地址你无法访问,需要替换为你的 IP 地址)


这里要注意 kong.json 这个文件的导入,我是进去 QQ 群问群主要了这个文件才导入成功的,自带的文件似乎有问题。搭建 konga 成功并不代表你成功搭建了 Tcloud,你还需要按照指示创建数据库,当然首先你得能够在 3306 端口访问到数据库,然后再 去执行脚本去创建,这需要你本地拥有连接 mysql 数据库的软件,本人使用的是 mysql 官方提供的 workBranch,免费下载安装使用的。

另外,下面链接是我写的,关于 Tcloud 云真机的命令,因为启动镜像这些操作都需要敲命令,不熟悉的同学可能会一脸懵逼:
https://testerhome.com/topics/20975

搭建前端

前端使用的是 npm 技术,如果你对 nodejs 不熟悉,那么搭建起来可能会十分痛苦。因为本人即便已经搭建过 N 多 nodejs 程序,比如 appium、stf 等等,在搭建 Tcloud 前端还是会遇到种种问题。在这里,给大家最简单直接的帮助,我使用的 nodejs 版本是:v8.16.2,使用的 npm 版本是 6.4.1,请大家最好和我一样使用相同的版本!

如果遇到权限不足问题

在命令后面加 --unsafe-perm 这是通用的解决方案
本人成功搭建后,就可以进入到 Tcloud 平台了,地址是:http://172.20.71.211:8080/#/login
注意,启动起来需要一定的时间,官网提供的命令并不能持久化的部署,因为一旦你连服务器的客户端断开,服务端也就断开了,所以需要使用特殊的命令,在 Tcloud-server 目录下执行一个命令才能持久启动:npm run dev >> log.log 2>&1 & ,本人目前也是遇到过一阵子服务就挂掉的情况,有解决办法的同学请告知一声。
当你搭建完成 2 个平台的时候,这时候,Tcloud 平台就基本成型了,里面的很多功能可以开始使用,比如测试中心里的项目,项目里有需求,缺陷,用例,接口测试用例等功能,还有一些小工具。

真机

但是,真正的远程真机才是本平台的亮点,没有远程真机,根本称不上 “云测” 平台,所以我们首先就得考虑搭建 “云测” 服务,首先我们要弄清楚一点,Tcloud 并没有自带的云测功能,它基本是调用 stf 的 API 做,所以搭建 stf 才是下一步的重点,搭建不起来,你前面的努力也就都白费了。本人先是用 ubuntu14.04 搭建,后来用 16.04,因为种种原因,比如依赖包过期,都一一失败了,最后群里的同学给了我希望,使用 centOS7,所以首先,我们得去网上下载 centOS7 的镜像,另外 stf 需要安装在实体机上,我是把一台 windows PC 机格式化后安装的,而且使用了 Rufus 软件,把一个 U 盘进行格式化之后,把镜像导入进去,才能够安装到电脑里。如果你使用的虚拟机来搭建也是可以的!
总之,要成功搭建 stf 首先有关键要素,一个是 centOS7 作为 stf 服务器,一个是 mac 电脑和一台 iphone, mac 系统上一定要有 xcode10.1 版本,xcode10.1 可以先百度一下,怎么下载,因为文件有 6GB 那么大,而且如果你是通过 U 盘拷贝文件,你的 U 盘需要使用 MAC 系统的格式化工具,格式到特定的格式,才能从 windows 上把下载好的 xcode 文件拷过去,为此我把我的 U 盘给弄的彻底挂了,哀悼一下我用了 4 年的 U 盘。

stf 服务器 ,android 真机搭建

stf 服务器搭建的最关键要素就是 cent7OS,然后就按照传统的教程,下载 nodejs,npm,然后执行 npm install stf 来进行安装。

stf 接入到 Tcloud

stf 接入到 Tcloud 在很多帖子中都没有提及。首先要访问 Tcloud 的数据库,访问 config 表,修改 ID 6、8、9 的三行的 content 的值(如下图)

我的值的范例如下 (特别告诉大家,6,8,9 的值是依次为下面 3 个值,如果你配对第一个,后面错了,那么设备的操作可能就不行了):
{"URL":"http://172.21.40.146:7100/api/v1/devices,headers:{Authorization:Bearer" 2bc0a7c72add4000ae430321a1d2c7121f7c64b966e4473782e1ce4f151c232e"}}
{"URL":"http://172.21.40.146:7100/api/v1/user/accessTokens/,headers:{Authorization:Bearer" 2bc0a7c72add4000ae430321a1d2c7121f7c64b966e4473782e1ce4f151c232e"}}
{"URL":"http://172.21.40.146:7100/api/v1/user/devices/,headers:{Authorization:Bearer" 2bc0a7c72add4000ae430321a1d2c7121f7c64b966e4473782e1ce4f151c232e"}}
上面的值,请修改正确的 IP 地址,修改正确的授权值,授权 的密钥在 STF 里如下图的地方生成。

最关键的就是这些字符串容不下任何的错误,本人在这里卡了一天,就是因为少了一个空格!

另外,我们需要去修改前端文件的值:
vim /work/Tcloud-master/config/prod.env.js
添加一行:STF_URL:'"http://172.21.40.146:7100"'

iOS 环境搭建

目前的官方 stf 是不支持 iOS 设备的,需要使用大神提供的特殊 stf 版本,链接为:https://testerhome.com/topics/19548
在 mac 本机搭建下面链接的 stf:https://github.com/mrx1203/stf.gitstf 的缺陷就是手机连接界面被改造过,不好看,所以 mac 机器的 stf 并不适合做服务器,而应该使用文章中提到的,使用 linux 机器做服务器,mac 机器应该作为一个 provider 接入到服务器中,mac 作为服务器启动的命令是:,这个
stf local --wda-path /Users/lxm/work/WebDriverAgent --wda-port 8100 --public-ip 172.21.40.43

iOS 远程真机接入

远程真机的命令真的是搞死人,因为帖子上并没有很清楚的写命令,花了我 3 天时间调试命令,弄的我怀疑人生,本人找到了作者,才最终写对命令,使得 Mac 真机对接上了 linux 服务器。因为要正确的对接,linux 服务器和 mac 的 iOS provider 的命令都一定要一个字不差的写对,下面就是我两台服务器的启动命令,也是这篇文章最精华所在:
Linux 服务器命令:
stf local --public-ip 172.21.40.146 --allow-remote --bind-dev-pub tcp://172.21.40.146:7114 --bind-dev-pull tcp://172.21.40.146:7116 --bind-dev-dealer tcp://172.21.40.146:7115 --wda-port 8100 --storage-port 7102
iOS provider 命令:
stf ios-provider --name "mac081" --connect-sub tcp://172.21.40.146:7114 --connect-push tcp://172.21.40.146:7116 --storage-url http://172.21.40.146:7102 --public-ip 172.21.40.43 --heartbeat-interval 20000 —wda-path /Users/lxm/work/WebDriverAgent --wda-port 8100

搭建完成

搭建完成之后,在 Tcloud 里的云真机就能够正常使用了。

后记

搭建完成,可能你的云测旅途只是刚刚开始!接下来,我们就要去熟悉代码,还有打通 Tcloud 平台的其他任督二脉。前面我遇到的很多问题,其实通过查看代码就可以完成,但是我已经指出来我所遇到的大部分问题,所以,你不了解代码,完成整个搭建也不是不可能!
Tcloud 交流群 839084842,欢迎大家一起加入讨论关于 Tcloud
另外,关于搭建 stf 的 iOS 版本,请加群 768710274 和作者联系,在 Tcloud 群里问 stf 问题大概率不会有好的回答

后记一

随着接入的 iOS 设备越来越多,在 xcode 编译 wda 包,可能有一些包执行 test 之后是会报错,但是报错并不意味着你的构建是失败的,WDA 的包构建成功与否的标准,就是在 stf 中是否出现了设备。
本人猜想报错的原因可能某些测试代码在特定 iOS 版本上运行会报错,但是测试代码出错并不代表是 wda 出错,这点大家记住啦!

后记二

如何在 mac 上接入多台 iphone,我们使用 USB HUB 就可以解决这个问题,本人购买的是 1 接 4 的 USB HUB,淘宝搜索《优越者 usb3.0 扩展器转接头 type-c 笔记本台式电脑外接口 hub 一拖四多功能电源集线器 usp 拓展坞延长线转换分线器》

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复

npm run dev 只是开发调试模式
线上部署使用 npm run build,会新建 dist 目录,把文件打好包,访问目录下的 index.html 即可
npm run XXX 具体操作是在 package.json 中的脚本定义,比如:

"scripts": {
  "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  "start": "npm run dev",
  "build": "node build/build.js",
  "test": "node build/build-test.js"
},
共收到 11 条回复 时间 点赞


stf 接入后,使用设备打开是空白页,有遇到过吗

代表 Tcloud 来给你点赞,棒棒的~

xcode10.1 搭建 stf 有问题吧,要用更低的版本,楼主没遇到吗

黑山老妖 回复

xcode10.1 不是用来搭建 stf ,,而是用来打 WDA 的包的。。。。。。大佬你确定你表达没有问题吗?

😅 你用的啥版本?我试了 xcode9.4,貌似 ios 手机支持到 11 的版本。貌似 xcode10.1 会更好?

黑山老妖 回复

反正我用 xcode10.1 成功了, 我强烈建议你也用 xcode10.1,其他我没有试过,不知道会有什么结果

npm run dev 只是开发调试模式
线上部署使用 npm run build,会新建 dist 目录,把文件打好包,访问目录下的 index.html 即可
npm run XXX 具体操作是在 package.json 中的脚本定义,比如:

"scripts": {
  "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  "start": "npm run dev",
  "build": "node build/build.js",
  "test": "node build/build-test.js"
},
环境搭一半就放弃 关闭了讨论 12月16日 14:37
环境搭一半就放弃 关闭了讨论 12月16日 14:37
环境搭一半就放弃 重新开启了讨论 12月16日 14:37

请问一下如果接入 SSO 的话需要改动哪些地方?

我也是遇到这样的问题,按照作者配置 config 的方法,应该是 stf 没有 accessTokens 这个接口,作者是不是自己重写了这个接口?

kong.json 这个文件分享一下 拜托

grizz 回复

嗯,谢谢作者来搭救~我也是第一次接触这个框架

9楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册