开源测试平台横向测评系列『流马』篇:流马部署

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【简介篇】• 项目概述:技术栈、工作原理• 项目功能简介:功能特点【部署篇】• 部署规划• 依赖环境部署(JDK、MySQ、NGINX、Git、NodeJS、Python3)• 代码打包:克隆项目、前端代码打包、后端代码打包• 项目部署:前端部署、后端部署、执行引擎部署

前言

我是从今年5月份第一次接触流马这个平台。第一次听到这个名字的时候,就觉得挺有趣的,猜测其名字应该是取自诸葛亮的“木牛流马”,后来和作者证实了一下,确实如此。当初诸葛亮发明木牛流马是为了提高运输效率,而流马测试平台是为了提高测试效率,可以说这个名字取得“恰到好处”。

本文一万两千字左右,我写了好多天,可能是我耗时最久的一篇文章。其实写文章不是最难的,难的是边学习、边摸索、边踩坑、边解决问题、边写文章记录、边总结。所以写得还算是比较用心的,整体来说也比较详细。读起来可能会有点长,大家可以先关注收藏、后期有时间、空下来了再照着文章内容仔细研究。内容大致分为以下四个部分:

简介篇

  • 项目概述:技术栈、工作原理
  • 项目功能简介:功能特点

部署篇

  • 部署规划
  • 依赖环境部署(JDK、MySQ、NGINX、Git、NodeJS、Python3)
  • 代码打包:克隆项目、前端代码打包、后端代码打包
  • 项目部署:前端部署、后端部署、执行引擎部署

【简介篇】

以下项目概述及功能介绍内容来自官网及GitHub项目介绍

一、项目概述

流马是一款低代码自动化测试平台,旨在采用最简单的架构统一支持API/WebUI/AppUI的自动化测试。平台采用低代码设计模式,将传统测试脚本以配置化实现,从而让代码能力稍弱的用户快速上手自动化测试。同时平台也支持通过简单的代码编写实现自定义组件,使用户可以灵活实现自己的需求。

项目分为平台端和引擎端,采用分布式执行设计,可以将测试执行的节点(即引擎)注册在任意环境的任意一台机器上,从而突破资源及网络限制。同时,通过将引擎启动在本地PC上,方便用户快速调试测试用例,实时查看执行过程,带来传统脚本编写一致的便捷。

官网:http://www.liumatest.cn/

代码地址: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测试

  1. 支持单接口测试和链路测试。
  2. 支持接口统一管理,支持swagger导入。
  3. 支持一键生成字段校验的接口健壮性用例。
  4. 支持全局变量、关联、断言、内置函数、自定义函数。
  5. 支持前后置脚本、失败继续、超时时间、等待/条件/循环等逻辑控制器。
  6. 支持环境与用例解耦,多种方式匹配域名,让一套用例可以在多个环境上执行。

2.WebUI测试

  1. 支持关键字驱动,零代码编写用例。
  2. 支持UI元素统一管理,Excel模板批量导入。
  3. 支持自定义关键字,封装公共的操作步骤,提升用例可读性。
  4. 支持本地引擎执行,实时查看执行过程。
  5. 支持与API用例在同一用例集合顺序执行。

3.AppUI测试(1.1版本上线)

  1. 支持WebUI同等用例编写和执行能力
  2. 支持安卓和苹果系统
  3. 支持持真机管理、投屏和在线操作
  4. 支持控件元素在线获取,一键保存元素
  5. 支持实时查看执行过程

【部署篇】

一、部署说明

1.部署说明

官方部署文档地址:https://docs.qq.com/doc/p/c989fa8bf467eca1a1e0fa59b32ceab017407168,共提供了两种部署方式,一种是容器部署,一种是常规部署。容器部署的好处是简单、快捷,常规部署方式的好处是相对于容器来说、出现问题容易排查,缺点是步骤较为繁琐。两种方式各有优劣,根据自己的喜好自由选择即可。本文采用的是常规部署方式。

2.部署规划

机器/系统

部署环境

说明

192.168.1.123,CentOS7

JDK8

MySQL8

Nginx

CentOS7内网服务器:

  • 用于运行后台Java服务+前端
  • Nginx用于代理转发
  • MySQL为后台存储数据库

192.168.1.131,Windows10

Git

JDK8

Maven

IDEA编辑器

NodeJS

个人Windows10办公电脑:

  • Git用于克隆前后台以及引擎代码代码到本地
  • IDEA编辑器用于修改配置文件
  • Maven自动下载依赖包、打包程序
  • NodeJS编译打包前端程序

192.168.1.188,Windows7

Python3

Selenium

Chrome

ChromeDriver

同一内网下的其他Windows主机:

  • Python3为执行引擎环境
  • Selenium为Web自动化测试工具
  • Chrome谷歌浏览器
  • ChromeDriver谷歌浏览器驱动程序

关于执行引擎机,也可以继续使用个人办公电脑作为执行引擎机,考虑到个人电脑经常会关机重启,就需要来回启动执行引擎,比较麻烦,所以我就选了一台本地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)验证引擎是否添加成功

引擎启动成功后,即可在流马平台环境中心-引擎管理中查看引擎在线情况。一台服务器可以启动多个引擎,一般默认有四个系统引擎,启动后互不影响。


以上就是流马的介绍篇和部署篇,由于字数和篇幅限制,就介绍到这里。下一篇文章将介绍流马《使用篇》和《总结篇》。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
45 1
|
17天前
|
缓存 自然语言处理 并行计算
基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程
本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。
331 1
|
18天前
|
编解码 人工智能 自然语言处理
迈向多语言医疗大模型:大规模预训练语料、开源模型与全面基准测试
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据,无需标准化。其核心创新包括任意分辨率编码和动态压缩器模块,适用于从微小图标到长时间视频的多种应用场景。Oryx 在长上下文检索和空间感知数据方面表现出色,并且已开源,为多模态研究提供了强大工具。然而,选择合适的分辨率和压缩率仍需谨慎,以平衡处理效率和识别精度。论文地址:https://www.nature.com/articles/s41467-024-52417-z
40 2
|
4天前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
28天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
44 2
|
10天前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
31 0
|
13天前
|
NoSQL 测试技术 Go
自动化测试在 Go 开源库中的应用与实践
本文介绍了 Go 语言的自动化测试及其在 `go mongox` 库中的实践。Go 语言通过 `testing` 库和 `go test` 命令提供了简洁高效的测试框架,支持单元测试、集成测试和基准测试。`go mongox` 库通过单元测试和集成测试确保与 MongoDB 交互的正确性和稳定性,使用 Docker Compose 快速搭建测试环境。文章还探讨了表驱动测试、覆盖率检查和 Mock 工具的使用,强调了自动化测试在开源库中的重要性。
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
57 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
237 7
Jmeter实现WebSocket协议的接口测试方法

热门文章

最新文章