现今的测试行业不停的发展,今天测试人员会代码,已经从一个高阶能力变成了一项基本技能。市场要求测试工程师,或多或少都会一些代码。但是光说不练可不行,如果只是单纯的理论知识很难打动人,但如果你实际开发过一个测试平台,那就不一样了。GitHub 打开看一看,胜过了千言万语。
所以,想要工资要的好,测试平台搞一搞。
但开发一个好的测试平台绝非易事,一个好的工具平台,涉及到前后端开发、架构设计、数据库设计、框架选型等综合技能。
首先我们来看一下,想要基于 JMeter 开发一个测试平台,你需要积累的技术栈。当然这里大家不需要争论开发语言和框架,这是一种可行的方案,不是唯一性方案。
我们将能力拆分成 6 个方面来看,分别是测试相关、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:
以上的基础环境准备我们就不浪费篇幅来介绍了,大家都可以自行百度解决。
项目的 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
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 的开发过程,感兴趣的同学可以继续关注。