自动化工具 Metersphere 源码启动并做性能测试(一)

灬囖 · 2023年01月29日 · 最后由 曦枫落 回复于 2023年11月25日 · 8454 次阅读

一、背景

最近了解到在 github 上比较🔥的一个一站式开源测试平台https://github.com/metersphere/metersphere,一看还是 JAVA 写的,并且还是开源的,看了下官网文档,覆盖测试管理、接口测试、UI 测试和性能测试等众多功能,所以就想本地跑起来试试。

二、本地启动

查看官网的文档,有很详细的步骤,如果第一次启动一定要仔细看清楚了。
https://metersphere.io/docs/v2.x/dev_manual/

2.1 基本架构

首先了解一下基础的架构:

组件说明

  • Frontend: MeterSphere 的前端工程, 基于 Vue.js 进行开发。
  • Backend: MeterSphere 的后端工程, 基于 Spring Boot 进行开发, 为 MeterSphere 的功能主体。
  • Chrome Plugin: 浏览器插件, 录制 Web 访问请求生成 JMeter 脚本并导入到 MeterSphere 中用于接口测试及性能测试。
  • Jenkins Plugin: Jenkins 插件,在 Jenkins 中安装该插件后可将 Jenkins 任务中添加 MeterSphere 构建环节,用户在该构建环节中配置 MeterSphere 平台的认证信息后,可选择指定项目下的接口/性能测试进行触发执行。
  • Node Controller: 为性能测试提供独立节点类型的测试资源池, 接收来自系统的性能测试任务, 动态的启动 JMeter 容器完成性能测试。
  • MySQL: MeterSphere 项目的主要数据均存储在 MySQL。
  • Redis: MeterSphere 项目登录用户的 Session 存储在 Redis。
  • Kafka: 接收 JMeter 产生的接口测试或者性能测试的结果数据。
  • Prometheus: 收集压力机及被测系统的监控数据。
  • Data Streaming: 从 Kafka 中获取接口测试或者性能测试结果数据进行处理后存入 MySQL 数据库。
  • Docker Engine: 为 Node Controller 提供 JMeter 容器运行环境。

整体看下来,前端是 Vue,后端是 SpringBoot, 数据库是 Mysql,缓存 Redis 等。

2.2 环境准备&启动项目

2.2.1 本地启动 MS 项目需要准备的环境。

参考官网:https://metersphere.io/docs/v2.x/dev_manual/

2.2.2 拉取项目

  • 先把代码跑起来:

metersphere :(主要应用启动,包含前后端代码)
ms-jmeter-core:(主要核心依赖)

  • 代码拉取下来之后,更改自己的 maven 环境和 jdk 环境信息,metersphere 和 ms-jmeter-core 都需要配置。

  • ms-jmeter-core 打包: mvn clean install
  • 启动项目之前 我们需要配置基础的配置


找到代码中启动类,创建对应的文件目录。内容如下(参考官网): windows 需要更改指定路径。

# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/metersphere_dev?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

# kafka 配置,node-controller 以及 data-streaming 服务需要使用 kafka 进行测试结果的收集和处理
kafka.partitions=1
kafka.replicas=1
kafka.topic=JMETER_METRICS
kafka.test.topic=JMETER_TESTS
kafka.bootstrap-servers={KAFKA_IP}:19092
kafka.log.topic=JMETER_LOGS
kafka.report.topic=JMETER_REPORT

# node-controller 所使用的 jmeter 镜像版本 
jmeter.image=registry.fit2cloud.com/metersphere/jmeter-master:0.0.6

# TCP Mock 端口范围
tcp.mock.port=10000-10010

# Redis 配置
spring.redis.host={REDIS_IP}
spring.redis.port=6379
spring.redis.password=Password123@redis

# 启动模式,lcoal 表示以本地开发模式启动
run.mode=local

修改以上配置为自己本地的配置即可。

  • 项目介绍

2.2.3 启动时经常发生的错误:

  • 错误一:


类似这样的,找不到某个类,这种错误大多都是因为依赖的问题。找到对应的类,看看是哪个依赖没有依赖进来。
解决方案统一都为:

  1. 重新 mvn clean install 这个 ms-jmeter-core 项目。(大多数都是因为依赖的问题,注意版本要对应。)
  2. 如果还不行,清理一下 idea 的缓存,File->Invaildate Caches....
  • 错误二:


也是找不到对应的类,但是这个类看路径是 xpack 里面,xpack 是啥?这个是 MS 企业版的包,需要支付 RMB 才行呢。不过现在 MS 好像有活动,可以免费申请企业版的使用: https://www.fit2cloud.com/metersphere/enterprise.html
这种解决方案很简单:直接注释掉对应的依赖即可。然后注释相对应的引用。

  • 错误三:

还有就是启动项目的时候,出现依赖 bean 的问题,这种问题截图没保存,就简单描述一下吧。
问题:启动项目的时候,出现 bean 依赖的问题,找不到对应的 bean 注入,或者调用某个方法,找不到对应的类.
解决:这种问题相信大多数有经验的开发人员会经常遇到,遇到问题,找到对应的类,排查问题,解决问题,因为问题不统一,所以不在明确怎么解决。需要这种问题的,善用百度。

2.2.4 后端启动成功


看到这个日志,说明我们后台服务已经起来了,接下来我们启动前端。

2.2.5 前端启动成功

前端服务启动是需要在对应项目下面启动的。执行 npm run serve(没安装 npm 的 自行看上面的安装。)


执行之后,我们会看到正在编译的日志信息...

看到以上信息,表示已经启动成功了,接下来我们浏览器访问下。

2.2.6 访问http://localhost8080


注意:这里发现首页图片加载失败,F12 之后,也没有找到对应的路径,这里解决方案:把整个项目给 package 一下,然后在进行启动就好了

至此,本地启动成功,可以愉快的开始测试之旅啦 ~~

三、执行性能测试

3.1 启动准备

  1. 根据官方提供的这个图来看。做性能测试需要准备 node-controller 和 Data-streaming

3.1.1. 性能测试路径

Metersphere 发起压力测试->Node-controller 拉起 Jmeter 执行性能测试->kafka->Data-Streaming 从 kafka 获取数据进行计算->存放到 Mysql 中。

3.2 拉取 Node-Controller 项目

作为压测服务:需要拉起 jmeter 进行性能测试
项目地址:https://github.com/metersphere/node-controller.git


需要修改一下自己 Jmeter 路径。
还需要注意自己本地做性能测试的话需要安装 docker 环境的。因为 node-controller 是通过 docker 拉起 jmeter 容器做的性能测试。
如果拉取不成功检查自己的网路是否通外网。或者自己先去 docker pull 一下镜像。



然后 mven clean install 一下

3.3 拉取 Data-Streaming

作为数据解析服务: 从 kafka 获取数据计算之后放入到 mysql 中。
项目地址:https://github.com/metersphere/data-streaming.git

所以这个服务主要是看自己的 kafka 是否启动。
我本地是通过 docker 镜像起来的 kafka


修改自己的 metersphere.properties 文件即可

上面操作都完成之后 也记着 mvn clean install

3.4 分别启动 Noce-Controller 和 Data-Streaming

Noce-Controller

Data-Streaming

看到以上信息说明启动成功。
然后我们在启动 metersphere 的 backend 和 frontend

3.4.1 配置压测资源池






添加自己的本地的 node-controller 服务的地址和端口。

3.5 开始性能测试

上面所有工作都完成之后,我们开始进行性能测试。

3.5.1 创建性能测试


这边有两个:通过 JMX 和引用接口自动化场景
我们直接引用接口那边模拟百度的请求。

(方式二)还可以直接在接口自动化那边一键转化成性能测试。这个功能很赞!!!


3.5.2 配置压力配置


简单说明了下配置
其他的参数说明参考官网:https://metersphere.io/docs/v2.x/user_manual/load_test/load_test/

3.5.3 保存执行







看状态已经完成,然后我们查看报告


可以看到成功执行。 报告页面的功能还是很多的,值得研究一下,可以参考官网:https://metersphere.io/docs/v2.x/user_manual/load_test/test_report/

四、 放在最后

以上就是本地启动并且执行性能的简单分享,如果有误,欢迎指正。
最后,在我们研究新东西的过程中难免会发生各种问题,这个时候善用文档,善用百度。
看到 Metersphere 的官网文档上东西还是挺全面的,希望有心的小伙伴多多研究一下,会解决 80% 的问题的。
https://metersphere.io/docs/v2.x/faq/installation/
如果是在解决不了,有社区群,可以到里面去咨询。

最佳回复

感谢大佬,终于有人写这个安装教程了。

共收到 8 条回复 时间 点赞

感谢大佬,终于有人写这个安装教程了。

迷龙 回复

欢迎实践讨论~😀

仅楼主可见
伍个一 回复

启动是什么版本的呢?卡在哪一步了呢?

从楼主的工程结构来看,这是 v2.3 之前的老版本了,该更新了。

请问下,如果是本地文件启动,配置文件放哪里?

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