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

luty · 2020年08月05日 · 最后由 zwm 回复于 2020年10月23日 · 7516 次阅读

现今的测试行业不停的发展,今天测试人员会代码,已经从一个高阶能力变成了一项基本技能。市场要求测试工程师,或多或少都会一些代码。但是光说不练可不行,如果只是单纯的理论知识很难打动人,但如果你实际开发过一个测试平台,那就不一样了。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 · 2020年08月10日 Author

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

luty #11 · 2020年08月10日 Author
Mr_Peace 回复

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

luty #13 · 2020年08月10日 Author
seven qa 回复

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

luty #9 · 2020年08月10日 Author
cool 回复

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

测开不是搭平台

期待后续

MarvinWu 回复

有这水平还当个 jb 测试

ZOO 回复

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

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

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

zwm 回复

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

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