一、背景

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

二、本地启动

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

2.1 基本架构

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

组件说明

整体看下来,前端是 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:(主要核心依赖)


找到代码中启动类,创建对应的文件目录。内容如下(参考官网): 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/
如果是在解决不了,有社区群,可以到里面去咨询。


↙↙↙阅读原文可查看相关链接,并与作者交流