手把手教你基於 JMeter 開發一個自動化測試平臺 (1)
現今的測試行業不停的發展,今天測試人員會程式碼,已經從一個高階能力變成了一項基本技能。市場要求測試工程師,或多或少都會一些程式碼。但是光說不練可不行,如果只是單純的理論知識很難打動人,但如果你實際開發過一個測試平臺,那就不一樣了。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 的開發過程,感興趣的同學可以繼續關注。
相關文章
- 手把手教你基於 JMeter 開發一個自動化測試平臺 (2)JMeter
- 自動化測試平臺
- 基於Pytest豆瓣自動化測試【1】
- 求一個開源的自動化測試平臺 最好是 vue+python 開發的VuePython
- UI 自動化測試平臺UI
- 基於 HttpRunner 的介面自動化測試平臺宣講 (已落地)HTTP
- 基於 RF 的 WEB 版自動管理測試平臺Web
- Django 介面自動化測試平臺Django
- [opendx] 基於 appium 的移動端 UI 自動化測試平臺-介紹篇APPUI
- 《手把手教你》系列基礎篇(五)-java+ selenium自動化測試- 建立首個自動化指令碼(詳細教程)Java指令碼
- 一個基於多介面的業務自動化測試框架框架
- 從業務測試需求痛點到自動化測試平臺設計開發
- API自動化測試平臺,高效實現對API的自動化測試API
- 自動化測試平臺設計與實現(一)
- 測試開發技能:JMeter高階教程——效能測試與自動化雲監控JMeter
- 從0-1搭建一個自動化部署平臺
- 測試開發基礎,教你做一個完整功能的Web平臺之環境準備Web
- 測試開發基礎,教你做一個完整功能的Web平臺之登入認證Web
- 🔥《手把手教你》系列基礎篇之 1-python+ selenium 自動化測試 - 環境搭建(詳細)Python
- 請問大家,自動化測試可以實現一個指令碼測試全部平臺嗎?指令碼
- 基於 HttpRunner + Django + Vue + Element UI 的介面自動化測試平臺,生產可用HTTPDjangoVueUI
- JMeter 介面自動化測試(手工轉自動化指令碼)JMeter指令碼
- 開源免費的自動化測試平臺推薦
- API自動化測試平臺,支援場景化的API測試API
- Linux下搭建介面自動化測試平臺Linux
- 基於Python豆瓣自動化測試【2】Python
- 基於 Htte 的 API 自動化測試API
- 一種基於 cypress 的 UI 自動化測試框架UI框架
- 手把手教你搭建Windows 搭建Prometheus + Grafana + Jmeter視覺化監控平臺WindowsPrometheusGrafanaJMeter視覺化
- Apifox(1)比postman更優秀的介面自動化測試平臺APIPostman
- JMeter做WEB和API自動化測試JMeterWebAPI
- Jmeter+Ant+Python 介面自動化測試JMeterPython
- 測試開發之自動化篇-自動化測試框架設計框架
- 優化自動化測試流程,使用 flask 開發一個 toy jenkins工具優化FlaskJenkins
- 試著使用 jmeter 實現介面自動化測試JMeter
- 《手把手教你》系列基礎篇之(二)-java+ selenium自動化測試-環境搭建(下)基於Maven(詳細教程)JavaMaven
- GAutoNext 全平臺遊戲自動化測試利器遊戲
- 手把手教你利用開源專案搭建一個屬於自已的電商平臺