手把手教你基於 JMeter 開發一個自動化測試平臺 (1)

luty發表於2020-08-05

現今的測試行業不停的發展,今天測試人員會程式碼,已經從一個高階能力變成了一項基本技能。市場要求測試工程師,或多或少都會一些程式碼。但是光說不練可不行,如果只是單純的理論知識很難打動人,但如果你實際開發過一個測試平臺,那就不一樣了。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 的開發過程,感興趣的同學可以繼續關注。

相關文章