前言
我是从今年5月份第一次接触流马这个平台。第一次听到这个名字的时候,就觉得挺有趣的,猜测其名字应该是取自诸葛亮的“木牛流马”,后来和作者证实了一下,确实如此。当初诸葛亮发明木牛流马是为了提高运输效率,而流马测试平台是为了提高测试效率,可以说这个名字取得“恰到好处”。
本文一万两千字左右,我写了好多天,可能是我耗时最久的一篇文章。其实写文章不是最难的,难的是边学习、边摸索、边踩坑、边解决问题、边写文章记录、边总结。所以写得还算是比较用心的,整体来说也比较详细。读起来可能会有点长,大家可以先关注收藏、后期有时间、空下来了再照着文章内容仔细研究。内容大致分为以下四个部分:
【简介篇】
- 项目概述:技术栈、工作原理
- 项目功能简介:功能特点
【部署篇】
- 部署规划
- 依赖环境部署(JDK、MySQ、NGINX、Git、NodeJS、Python3)
- 代码打包:克隆项目、前端代码打包、后端代码打包
- 项目部署:前端部署、后端部署、执行引擎部署
【简介篇】
以下项目概述及功能介绍内容来自官网及GitHub项目介绍
一、项目概述
流马是一款低代码自动化测试平台,旨在采用最简单的架构统一支持API/WebUI/AppUI的自动化测试。平台采用低代码设计模式,将传统测试脚本以配置化实现,从而让代码能力稍弱的用户快速上手自动化测试。同时平台也支持通过简单的代码编写实现自定义组件,使用户可以灵活实现自己的需求。
项目分为平台端和引擎端,采用分布式执行设计,可以将测试执行的节点(即引擎)注册在任意环境的任意一台机器上,从而突破资源及网络限制。同时,通过将引擎启动在本地PC上,方便用户快速调试测试用例,实时查看执行过程,带来传统脚本编写一致的便捷。
代码地址:https://github.com/Chras-fu/Liuma-platform
部署文档:https://docs.qq.com/doc/p/c989fa8bf467eca1a1e0fa59b32ceab017407168
使用手册:https://docs.qq.com/doc/p/1e36932d41b40df896c1627a004068df9a28fc3f
平台技术栈:前端VUE+ElementUI,后台Java+SpringBoot,测试引擎Python。
二、功能介绍
1.API测试
- 支持单接口测试和链路测试。
- 支持接口统一管理,支持swagger导入。
- 支持一键生成字段校验的接口健壮性用例。
- 支持全局变量、关联、断言、内置函数、自定义函数。
- 支持前后置脚本、失败继续、超时时间、等待/条件/循环等逻辑控制器。
- 支持环境与用例解耦,多种方式匹配域名,让一套用例可以在多个环境上执行。
2.WebUI测试
- 支持关键字驱动,零代码编写用例。
- 支持UI元素统一管理,Excel模板批量导入。
- 支持自定义关键字,封装公共的操作步骤,提升用例可读性。
- 支持本地引擎执行,实时查看执行过程。
- 支持与API用例在同一用例集合顺序执行。
3.AppUI测试(1.1版本上线)
- 支持WebUI同等用例编写和执行能力
- 支持安卓和苹果系统
- 支持持真机管理、投屏和在线操作
- 支持控件元素在线获取,一键保存元素
- 支持实时查看执行过程
【部署篇】
一、部署说明
1.部署说明
官方部署文档地址:https://docs.qq.com/doc/p/c989fa8bf467eca1a1e0fa59b32ceab017407168,共提供了两种部署方式,一种是容器部署,一种是常规部署。容器部署的好处是简单、快捷,常规部署方式的好处是相对于容器来说、出现问题容易排查,缺点是步骤较为繁琐。两种方式各有优劣,根据自己的喜好自由选择即可。本文采用的是常规部署方式。
2.部署规划
机器/系统 |
部署环境 |
说明 |
192.168.1.123,CentOS7 |
JDK8 MySQL8 Nginx |
CentOS7内网服务器:
|
192.168.1.131,Windows10 |
Git JDK8 Maven IDEA编辑器 NodeJS |
个人Windows10办公电脑:
|
192.168.1.188,Windows7 |
Python3 Selenium Chrome ChromeDriver |
同一内网下的其他Windows主机:
|
关于执行引擎机,也可以继续使用个人办公电脑作为执行引擎机,考虑到个人电脑经常会关机重启,就需要来回启动执行引擎,比较麻烦,所以我就选了一台本地Windows主机。当然也可以部署在Linux系统上,不过对于UI自动化测试而言,没有可视化的界面展示,调试起来相对麻烦一些。
二、依赖环境部署
1.安装Java1.8
CentOS服务器和个人Windows电脑分别需要安装JDK。CentOS下,推荐脚本部署方式:
安装脚本下载:https://share.weiyun.com/6JMLvSyK
JDK包下载地址:https://share.weiyun.com/mKDxXd1x
source jdk_install.sh # 通过source命令安装,省去配置环境变量步骤
2.安装mysql
1)安装mysql
CentOS下安装,本次通过docker进行快速安装,如服务器或其他内网机器已安装mysql,直连即可,可以忽略此步。注意要使用8.0+版本的mysql,我用的是5.7.33版本,启动时候就会报错不支持。
docker run -d--restart always --name mysql -eMYSQL_ROOT_PASSWORD=123456-p3307:3306 mysql:8.0.28
2)登录mysql
进入mysql容器
docker exec -it mymysql sh
连接mysql
mysql -uroot-p# 登录mysql,根据提示输入密码123456
2)创建数据库
进入mysql命令行执行:
mysql> create database liuma character set utf8 collate utf8_general_ci;
3.安装nginx
CentOS下安装,推荐脚本部署方式
nginx安装脚本下载地址:https://share.weiyun.com/HLuVRTO2
nginx安装包下载地址:https://share.weiyun.com/uhffdijl
将其下载下来,上传到服务器,执行以下命令安装:
source nginx_install.sh
4.安装git
Windows下安装,用于拉取项目代码,下载后双击、按照提示一步步安装。
下载地址:https://share.weiyun.com/NJBlZGmE
5.安装node.js
Windows下安装,用于安装前端依赖、打包编译。
下载地址:https://share.weiyun.com/2PpWyXkz,下载下来后双击安装即可。
更换淘宝镜像源
1.临时更换
npm--registry https://registry.npm.taobao.org install node-sass(要安装的模块)
2.永久更换
npm config set registry https://registry.npm.taobao.org npm config get registry # 查看是否更换成功
3.通过cnpm使用
npm install -g cnpm --registry=https://registry.npm.taobao.org
6.安装python3
CentOS或Windows下安装均可,执行机选用哪个系统就安装在哪个系统下。如果是Linux系统,可以参考之前的文章《Linux下一键安装Python3&更改镜像源&虚拟环境管理技巧》,如果是Windows系统,则在Windows系统下安装python3.
三、代码打包
1.克隆项目代码
git clone https://github.com/Chras-fu/Liuma-platform.git # 克隆平台代码
git clone https://github.com/Chras-fu/Liuma-engine.git # 克隆引擎代码
平台代码目录:
- LiuMa-backend:后台代码
- LiuMa-frontent:前端代码
2.打包前端代码
进入前端文件目录,安装相关依赖并执行构建
npm install # 安装相关依赖npm run build # 构建
出现"Build complete."提示代表构建成功:
构建成功后,目录下会生成dist文件目录,可以将其打包成.zip格式并上传至服务器,然后再解压
3.打包后端代码
1)安装依赖包
用IDEA打开liuma-platform/LiuMa-backend,使用maven安装依赖
2)修改配置
① 数据库配置
文件位置:liuma-platform/LiuMa-backend/src/main/resources/application.properties,配置如下所示:
- username:数据库用户名;
- password:数据库密码;
- url:连接数据库的URL地址;
# databasespring.datasource.password=123456spring.datasource.username=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3307/liuma?serverTimezone=UTC&characterEncoding=utf-8
注意事项:
- 项目部署的服务器与数据库处于同一主机时可使用127.0.0.1,如不在同一主机下,需改为该主机的IP地址;
- 3307为前面docker部署mysql时映射的端口号,按照你自己的数据库端口号配置即可;
② 邮件配置
文件位置:liuma-platform/LiuMa-backend/src/main/resources/application.properties,配置如下所示:
# aliyun 阿里云# 阿里云邮件key,改成你自己的aliyun.email.accessKey = xxxxxxx # 阿里云邮件secret,改成你自己的aliyun.email.accessSecret = xxxxxxx # 发送人邮箱地址,改成你自己的aliyun.email.runnerSenderAddress = xxxxxxx aliyun.email.runnerSenderName = 执行通知机器人
③ 七牛云配置
文件位置:liuma-platform/LiuMa-backend/src/main/resources/application.properties,配置如下所示:
# qiniuyun 七牛云# 七牛云ak,改成你自己的qiniu.cloud.ak = xxxxxxx # 七牛云sk,改成你自己的qiniu.cloud.sk = xxxxxxx # 七牛云空间名,改成你自己的qiniu.cloud.bucket = xxxxxxx # 七牛云加速域名,改成你自己的qiniu.cloud.downloadUrl = xxxxxxx qiniu.cloud.uploadUrl = xxxxxxx
3)maven打包
提示“BUILD SUCCESS”即表示打包成功,目录下会多出一个LiuMa-1.0.3.jar的jar包(我目前拉的最新代码,打包出来的是1.0.3,还有个LiuMa-1.0.0.jar包是两个月前打包的)
四、项目部署
1.平台部署
1)上传打包后的前端文件
将前端打包后的文件夹dist上传到:nginx安装目录/usr/local/nginx/html/下
2)上传打包后的后端文件
可以在/home目录下新建一个文件夹liuma,用于存放前面打包的jar包文件:LiuMa-1.0.3.jar,执行命令,后台启动服务:
nohup java -jar LiuMa-1.0.3.jar > logs.log 2>&1 &
启动后,可以查看logs.log日志文件,看看是否启动成功,以及是否成功连接到数据库,连接成功后自动创建相关数据表:
3)配置Nginx
① 新建nginx_liuma.conf
在nginx的/usr/local/nginx/conf目录下新建nginx_liuma.conf,nginx用于配置server的代理转发,详细配置如下:
#user nobody;worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8888; server_name 192.168.1.122; location / { index index.html index.htm; root /usr/local/nginx/html/dist; } location /autotest { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Origin ""; } location /openapi { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Origin ""; } access_log /usr/local/nginx/html/wwwlogs/access.log; } }
② 测试配置
nginx -t-c /usr/local/nginx/conf/nginx_liuma.conf
测试过程中可能会出现失败提示"nginx: [emerg] open() "/usr/local/nginx/html/wwwlogs/access.log" failed (2: No such file or directory)",原因是html目录下没有wwwlogs/access.log这个文件路径,直接新建一个wwwlogs目录和access.log文件即可。
③ 指定配置文件启动nginx
nginx -c /usr/local/nginx/conf/nginx_liuma.conf
4)验证部署情况
访问前端:http://192.168.1.122:8888/,管理员账号:LMadmin,密码:Liuma@123456
登录后的页面如下所示:
5)问题排查
因为流马是前后端分离项目,所以前端能访问并不代表后端也是正常的。如果登录遇到502,则是后台服务器没启起来,多半是数据库的问题,可以通过以下方式排查:
- 数据库版本,建议用8.x版本,5.7版本不支持
- 查看后端配置文件application.properties中数据库配置是否正确
- 可以通过前面提到的logs.log日志查看,也可以查看数据库是否自动创建相关数据表
- 检查数据库端口及Nginx反向代理的端口在防火墙中是否放开
另外,如果前端页面访问不了,很可能是防火墙没开放权限,需要在防火墙中放开上述配置文件中配置的8888端口:
firewall-cmd --permanent--add-port=8888/tcp firewall-cmd --reload
如果是前后端服务是部署在云服务器,需要在安全组中放开8888端口。
2.测试引擎部署
测试引擎可以理解为接口测试和UI自动化测试的运行环境。测试引擎可以选择部署在Linux系统,也可以选择使用个人Windows电脑,最好处于同一局域网下。当然如果服务端是部署在云服务上,有公网IP地址,Windows是个人办公电脑也可以,只要引擎电脑能要连上部署后端服务的那台服务器就行。以下是引擎部署过程:
1)上传代码
前面已经通过“git clone https://github.com/Chras-fu/Liuma-engine.git”克隆好了引擎代码,直接上传到对应的服务器即可,比如我选用的是Windows作为引擎,那么直接拷贝到Windows即可。
2)安装依赖
前面依赖环境部署已经安装好了Python3,创建并激活了虚拟环境,下面直接进入项目所在目录liuma-engine,安装依赖即可。
pip install -r requirements.txt
3)下载Chrome驱动
对照引擎机的Chrome浏览器版本,下载对应驱动,存放在/browser目录下
4)添加引擎
① 注册引擎
流马平台环境中心-引擎管理-注册引擎,输入引擎名称,名称任意,自己能识别即可,如:engine-192.168.1.188,确认后,会弹出一个提示框,复制里面的引擎code和引擎秘钥,后面会用到。
② 配置引擎服务器
编辑liuma-engine/config目录下的配置文件config.ini,进行配置,几个重要配置如下:
- url:后台服务所在的URL;
- engine-code:前面注册引擎成功后,提示框中的引擎code;
- engine-secret:前面注册引擎成功后,提示框中的引擎秘钥;
- options:如果引擎机是Linux系统,则改为headless,即无头模式,如果是Windows则保持默认的normal;
- path:如果引擎机是Linux系统,则改为chromedriver,如果是Windows则保持默认的chromedriver.exe;
- token:后面注册成功后会自动生成,可以不用管;
[Platform] url = http://192.168.1.122:8888 enable-proxy =falseenable-stderr =true[Engine] engine-code = 9d4358f0c8a34a2ab7e4c297949149fa engine-secret = 86a2f8f8bd654e03a60da9f19cdec017 [Header] content-type = application/json;charset=utf-8 token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjI2Mjk4OTQsImVuZ2luZVNlY3JldCI6IjVhM2ZhYzdlYzJiODQ4NDlhYzJhNjY4ZGRlNjRhMDk0IiwiaWF0IjoxNjYyMDI1MDk0LCJlbmdpbmVJZCI6ImU3ZWMzOTllZDdkZDRkMmFiZWIxNGNiNTE2NGNiNGVkIn0._LVsCKIauFxV4IKAUNgYS1lVbD5twO_2E39QCOufKH8 [WebDriver] options = normal path = chromedriver.exe [PlatformProxy] url = http://0.0.0.0:80 username = **** password = ****
5)启动引擎
python startup.py
6)验证引擎是否添加成功
引擎启动成功后,即可在流马平台环境中心-引擎管理中查看引擎在线情况。一台服务器可以启动多个引擎,一般默认有四个系统引擎,启动后互不影响。
以上就是流马的介绍篇和部署篇,由于字数和篇幅限制,就介绍到这里。下一篇文章将介绍流马《使用篇》和《总结篇》。