Java 手把手教你基于 JMeter 开发一个自动化测试平台 (1)

luty · August 05, 2020 · Last by zwm replied at October 23, 2020 · 4916 hits

现今的测试行业不停的发展,今天测试人员会代码,已经从一个高阶能力变成了一项基本技能。市场要求测试工程师,或多或少都会一些代码。但是光说不练可不行,如果只是单纯的理论知识很难打动人,但如果你实际开发过一个测试平台,那就不一样了。GitHub 打开看一看,胜过了千言万语。

所以,想要工资要的好,测试平台搞一搞。

但开发一个好的测试平台绝非易事,一个好的工具平台,涉及到前后端开发、架构设计、数据库设计、框架选型等综合技能。

首先我们来看一下,想要基于 JMeter 开发一个测试平台,你需要积累的技术栈。当然这里大家不需要争论开发语言和框架,这是一种可行的方案,不是唯一性方案。

我们将能力拆分成 6 个方面来看,分别是测试相关、JMeter 相关前端开发、后端开发、中间件和运行时环境。

  • 测试相关:

这本身就是我们出发的本源,想要做好测试平台,那肯定需要对测试有深入的理解。那么这里我们又可以再细分一下,需要具备能力的三个方向,功能测试,性能测试和接口测试。

这三种是目前最主要的测试场景,在动手开发测试平台之前,我们自然是要对这几方面的测试知识有深入理解。

  • JMeter 相关:

JMeter 是目前使用最广泛的测试引擎,而且还是一个开源的项目,这也是我们为什么将 JMeter 选做了测试平台开发的核心。

既然 JMeter 作为 C 位出现,那自然是要对其本身进行学习和研究,这里建议对这三方面来学习,首先是常用组件的功能和使用,也就是先要熟悉 JMeter 。其次是学习核心类库,这样可以深入理解 JMeter 的内在逻辑。最后要再学习一下 JMeter 的插件体系,便于对其进行功能扩展。

  • 前端开发:

前端和后端主要是针对于开发的角度,很简单,想要做出一个测试平台,那么一定是需要有一个可以让用户去使用的界面的,那么这里就需要使用到前端的技术 。Vue.js 是现在最炙手可热的前端技术框架了,而且还是咱们中国人主导的开源技术,无数大公司都选择 Vue.js ,找工作时会用 Vue.js 帮助极大,那有什么理由不选择它呢?ElementUI 也类似,是由饿了吗开源的前端组件库。

NPM 是 NodeJS 包管理工具,因为前端项目都会使用到,所以这里应该要对其有一些基本的理解,不需要深入去学习 NodeJS,可以用 NPM 就差不多了。

  • 后端开发:

后端的选择上我相信大家会有自己的意见,所以这里我给出的建议是我自己熟悉的 SpringBoot+Maven,这个组合虽然说不是那么是新潮时髦,但是绝对的值得信赖。而且还要说的是虽然这几年 Java 的热度似乎没有 Python 之类的那么高,但是在真正招聘市场中,Java 依然是第一大的开发语言。而作为 Java 的开发者不搞一搞 SpringBoot,不会用用 Maven,那还能算 Java 程序员吗?

  • 中间件:

开发一个整体的测试平台,那一定需要用到几个中间件,大家的程序不可能都是自己的代码来实现,所以根据目标需求,我们大致应该会用到几种中级件。

MySQL 作为主数据库没什么问题,开源免费,稳定耐用,和 Java 组合完美。

Kafka 我们作为消息队列,可以实现高并发下服务间的解耦和削峰,适合用在分布式性能测试时结果数据的汇总上。

  • 运行时环境:

开发测试平台相关能力的最后就是运行时环境,也就是为我们的程序运行发布做准备。

那这里肯定首先要熟悉 Linux,基本的 Linux 使用,常用命令还是要懂的。

其次现在的开发基本都逐渐的容器化了,我们这里也需要在自己的开发中向着容器靠拢,来提升自身的含金量。所以呢,我们就需要学习一些容器的技术和知识。

这里面包括了 Docker,先了解一些基础。Dockerfile,Docker Compose 也要学习,以便来进行容器的打包。

最后呢,Kubernetes 也需要学习一下,因为现在其实直接使用 Docker 的情况越来越少了,很多情况下使用容器都是在 Kubernetes 平台下来使用的,所以不会 Kubernetes 也会很麻烦。

开源精神

不要被前面的能力基础吓倒,如果说一切都从头自己来写,那难度确实太大了,而且软件行业不也有那么句话嘛:“不要重复造轮子”。
那么我们的策略是什么呢?我们以一个合适的开源项目来作为基础,边学边做,可以更快的学习。在巨人的肩膀上,可以让我们看的更远。
这里我们选中的是一个开源测试平台的开源项目 Metersphere,我们就以他为基础来进行延伸。
选择的过程就不提了,直接来说一下为什么选择 Metersphere:

  • 项目结构规整,前后端清晰,看起来不会太差
  • 技术栈方面前端 Vue+ElementUI,后端 SpringBoot,都比较不错,很有学习价值。
  • 文档比较清晰,这个不要忽视,节省了很多单纯读代码的时间

开发环境搭建

首先我们需要准备一些基础环境:

  • JDK1.8:后端是 Java 项目,JDK 是必备的
  • Maven:项目后端部分使用 Maven 来做项目管理,我用的 IDE(IntelliJ) 里面有 Maven,如果 IDE 不带的话,要提前配置好 Maven
  • MySQL5.7+:项目的数据库,请提前安装好
  • Git:下载代码需要用到
  • NPM:前端项目需要使用,只要安装好 NodeJS 就可以了,NPM 也就装好了。如果对 NodeJS 安装推荐使用 NVM,这样可以管理 Node 的版本。   

以上的基础环境准备我们就不浪费篇幅来介绍了,大家都可以自行百度解决。

下载代码

项目的 GitHub 地址:https://github.com/metersphere/metersphere/

到 GitHub 上下载最新的代码即可

git clone git@github.com:metersphere/metersphere.git

配置开发环境(后端部分)

数据库配置

创建开发数据库

如果大家不会安装和初始化配置 MySQL,请自己百度一下即可。
登录进 MySQL 中,执行命令

mysql> CREATE DATABASE `metersphere_dev` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
配置数据库

MeterSphere 对数据库部分配置项有要求,这里要修改 MySQL 的配置文件 my.cnf  ,这个文件根据你的系统会有所不同,我用的是 Mac,默认并没有 /etc/my.cnf,所我就新建一个文件,直接把下面的配置贴过去。

[mysqld]
default-storage-engine=INNODB
lower_case_table_names=1
table_open_cache=128
max_connections=2000
max_connect_errors=6000
innodb_file_per_table=1
innodb_buffer_pool_size=1G
max_allowed_packet=64M
transaction_isolation=READ-COMMITTED
innodb_flush_method=O_DIRECT
innodb_lock_wait_timeout=1800
innodb_flush_log_at_trx_commit=0
sync_binlog=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
skip-name-resolve

修改数据库配置后需要重启一下数据库服务,不同的操作系统重启方式会不太一样,以我自己的 Mac 为例,可以通过下面的命令重启数据库服务

mysql.server restart
# metersphere-server 服务启动时会自动在配置的库中创建所需的表结构及初始化数据。

创建项目配置文件

项目使用的是 Springboot,我们查看一下项目的 backend/src/main/java/io.metersphere/Application.java 可以看到,在启动时会去加载一个配置文件。

那么我们就来创建一下这个配置文件,不然也没法启动,创建 /opt/metersphere/conf/metersphere.properties ,复制下面的配置文件。

如果没有对应的文件夹,请对应的创建。

这了要注意一下,比如我的 Mac 默认没有 /opt ,在创建好文件夹后要把文件夹的 owner 修改一下,保证程序可以正常读写。

# 数据库配置
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.bootstrap-servers={KAFKA_IP}:19092
kafka.log.topic=JMETER_LOGS

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

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

JMeter 配置文件

metersphere-server 服务依赖的 Jmeter 核心类库需要加载 Jmeter 配置文件,默认加载 /opt/jmeter 下的配置文件

开发者需要先创建好对应文件夹,并将工程目录中 backend/src/main/resources/jmeter/bin 目录下的配置文件拷贝到 /opt/jmeter/bin 目录

运行后端服务

在 IDE 中编辑启动配置。

在其中添加 Spring Boot 启动项,直接启动 Spring Boot 项目即可

之后就可以点击启动

看到项目已经可以成功启动了

我们也再进入一下刚刚新建的数据库,可以看到表都已经自动创建成功了。

配置开发环境(前端部分)

初始化项目

在 IDE 里打开 Terminal

进入 metersphere-server/frontend/ 目录,执行以下命令安装相关前端组件

npm install

启动前端服务

进入到 metersphere-server/frontend/ 目录,执行以下命令启动前端服务

npm run serve

稍作等待

到这里,我们就已经完成了开发环境的构建,已经可以在本地调试自己的代码,打开浏览器访问 http://localhost:8080  就可以先体验一下了。

默认的用户名: admin  密码: metersphere

本次的介绍就先到这里,下一次我会在已经搭建好的开发环境中,演示一些小 Demo 的开发过程,感兴趣的同学可以继续关注。

共收到 21 条回复 时间 点赞

楼主,我没太看懂,这个和自动化测试的关系是?

不管是不是测试,先搭个平台再说。

看了半天 原来是推销 metersphere

上联:“想要工资要的好,测试平台搞一搞”
下联:“光有平台没业务,领导劝你找后路”

刚关注到这个开源的测试平台,期待深入解析👍

不讲平台架构 光讲应用都是耍流氓 自己照着文档也能搞

最近也在把 metersphere 代码当做学习样本,在练习开发平台中

自动化测试应该是后面在平台里实现的功能吧

好的,谢谢,期待楼主后续

把人带歪了啊,这么想搞测试平台,去做开发不好么?😅

luty #11 · August 10, 2020 Author

现在好多公司都在做自己自动化测试的平台,这里已这样一个开源项目为例来给大家分享下

luty #12 · August 10, 2020 Author
Mr_Peace 回复

你好,刚又更新了一篇 https://testerhome.com/topics/25063

luty #13 · August 10, 2020 Author
seven qa 回复

你好,刚又更新了一篇 https://testerhome.com/topics/25063 ,欢迎看下是否合你胃口哈

luty #14 · August 10, 2020 Author
cool 回复

现在不是流行测试开发岗位吗😜

测开不是搭平台

期待后续

MarvinWu 回复

有这水平还当个 jb 测试

ZOO 回复

哈哈哈哈,如果真的是自己从头开发这个平台,开发能力真的是不虚大部分业务开发了。

期待 jemeter 开放 API 这一块的文章

我真是求你们别搞没人用,套一层 jmeter 皮就叫测试平台的东西了
太误人子弟了真的。

zwm 回复

像上楼回复的一样,你熟练掌握 vue、springboot 框架还能自己写一个系统。这个专业水平做什么不好,做一个出力不讨好的测试平台?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up