Metersphere 源码启动并做性能测试(一)

一、背景

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

二、本地启动

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

2.1 基本架构

首先了解一下基础的架构:
Metersphere 源码启动并做性能测试(一)_第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/

  • JDK11: https://juejin.cn/post/6877951505710710791
  • Maven: https://cloud.tencent.com/developer/article/1680711 (推荐安装3.6以上的版本)
  • Mysql 5.7 以上 。
  • Redis :https://blog.csdn.net/realize_dream/article/details/106227622
  • zk和kafka : 本人是通过docker进行安装的,直接百度搜索下网上有很多方案,这里不再多说。
  • docker : https://zhuanlan.zhihu.com/p/91116621
  • idea: 本地安装开发工具,这里不再说明,相信你既然想本地启动代码,肯定是有开发经验的。

2.2.2 拉取项目

  • 先把代码跑起来:

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

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

Metersphere 源码启动并做性能测试(一)_第2张图片

Metersphere 源码启动并做性能测试(一)_第3张图片

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

Metersphere 源码启动并做性能测试(一)_第4张图片
找到代码中启动类,创建对应的文件目录。内容如下(参考官网): 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

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

  • 项目介绍

Metersphere 源码启动并做性能测试(一)_第5张图片

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

  • 错误一:

Metersphere 源码启动并做性能测试(一)_第6张图片
类似这样的,找不到某个类,这种错误大多都是因为依赖的问题。找到对应的类,看看是哪个依赖没有依赖进来。
解决方案统一都为:

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

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

  • 错误三:

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

2.2.4 后端启动成功

Metersphere 源码启动并做性能测试(一)_第8张图片
看到这个日志,说明我们后台服务已经起来了,接下来我们启动前端。

2.2.5 前端启动成功

前端服务启动是需要在对应项目下面启动的。执行 npm run serve (没安装npm的 自行看上面的安装。)
Metersphere 源码启动并做性能测试(一)_第9张图片
执行之后,我们会看到正在编译的日志信息…
Metersphere 源码启动并做性能测试(一)_第10张图片

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

2.2.6 访问http://localhost8080

Metersphere 源码启动并做性能测试(一)_第11张图片
注意:这里发现首页图片加载失败,F12之后,也没有找到对应的路径,这里解决方案:把整个项目给package一下,然后在进行启动就好了

Metersphere 源码启动并做性能测试(一)_第12张图片

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

三、执行性能测试

3.1 启动准备

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

Metersphere 源码启动并做性能测试(一)_第13张图片

3.1.1. 性能测试路径

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

3.2 拉取Node-Controller项目

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

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

Metersphere 源码启动并做性能测试(一)_第15张图片
Metersphere 源码启动并做性能测试(一)_第16张图片

然后 mven clean install 一下

3.3 拉取Data-Streaming

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

Metersphere 源码启动并做性能测试(一)_第17张图片

所以这个服务主要是看自己的kafka是否启动。
我本地是通过docker镜像起来的kafka
Metersphere 源码启动并做性能测试(一)_第18张图片
修改自己的metersphere.properties文件即可
Metersphere 源码启动并做性能测试(一)_第19张图片

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

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

Noce-Controller
Metersphere 源码启动并做性能测试(一)_第20张图片

Data-Streaming
Metersphere 源码启动并做性能测试(一)_第21张图片

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

3.4.1 配置压测资源池

Metersphere 源码启动并做性能测试(一)_第22张图片
Metersphere 源码启动并做性能测试(一)_第23张图片
添加自己的本地的node-controller服务的地址和端口。

3.5 开始性能测试

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

3.5.1 创建性能测试

Metersphere 源码启动并做性能测试(一)_第24张图片
这边有两个:通过JMX和引用接口自动化场景
我们直接引用接口那边模拟百度的请求。

Metersphere 源码启动并做性能测试(一)_第25张图片

(方式二)还可以直接在接口自动化那边一键转化成性能测试。这个功能很赞!!!
Metersphere 源码启动并做性能测试(一)_第26张图片

3.5.2 配置压力配置

Metersphere 源码启动并做性能测试(一)_第27张图片
简单说明了下配置
其他的参数说明参考官网:https://metersphere.io/docs/v2.x/user_manual/load_test/load_test/

3.5.3 保存执行

Metersphere 源码启动并做性能测试(一)_第28张图片
Metersphere 源码启动并做性能测试(一)_第29张图片
Metersphere 源码启动并做性能测试(一)_第30张图片
看状态已经完成,然后我们查看报告
Metersphere 源码启动并做性能测试(一)_第31张图片
可以看到成功执行。 报告页面的功能还是很多的,值得研究一下,可以参考官网:https://metersphere.io/docs/v2.x/user_manual/load_test/test_report/

四、 放在最后

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

你可能感兴趣的:(metersphere,jenkins,运维)