上一篇文章中,我們?cè)敿?xì)介紹了構(gòu)建 Apifox Cli 的 Docker 鏡像的步驟,并通過簡單的示例演示了如何利用 GitLab 的 CI/CD 功能,將構(gòu)建好的鏡像利用在自動(dòng)化測試作業(yè)中。在今天的文章中,我們將重點(diǎn)討論如何構(gòu)建 JMeter 的 Docker 鏡像,并演示如何在 GitLab 的 CI/CD 作業(yè)中利用該鏡像進(jìn)行自動(dòng)化壓力測試。
測試接口
測試接口依舊采用上篇文章使用的接口,詳見https://blog.csdn.net/jiajw0426/article/details/137612529
使用如下命令生成測試數(shù)據(jù),為了演示我們會(huì)把腳本卸載執(zhí)行自動(dòng)化測試之前
curl -X POST -H "Content-Type: application/json" \
-d '{"name": "John", "age": 30}' \
http://192.168.3.52:9999/users
使用如下命令檢查數(shù)據(jù)是否生成成功
curl http://192.168.3.52:9999/users
構(gòu)建JmeterDocker鏡像
如果可以上網(wǎng)可以通過命令從網(wǎng)上下載Jmeter
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.6.3.tgz
我們基于 OpenJDK 17 鏡像構(gòu)建,設(shè)定工作目錄為 /jmeter,然后從本地復(fù)制 JMeter 的壓縮包至工作目錄,并解壓。接著,將 JMeter 的 bin 目錄添加至 PATH 環(huán)境變量中。你也可以選擇復(fù)制自定義的 JMeter 配置文件到相應(yīng)目錄。最后,可選地指定了默認(rèn)的啟動(dòng)命令為 jmeter。
# 使用 JDK 鏡像作為基礎(chǔ)鏡像
FROM openjdk:17
# 設(shè)置工作目錄
WORKDIR /jmeter
# 本地復(fù)制JMeter
COPY apache-jmeter-5.6.3.tgz /jmeter/
RUN tar -xzf apache-jmeter-5.6.3.tgz && \
rm apache-jmeter-5.6.3.tgz
# 將 JMeter 的 bin 目錄添加到 PATH
ENV PATH="/jmeter/apache-jmeter-5.6.3/bin:${PATH}"
# 復(fù)制自定義的 JMeter 配置文件(如果有的話)
# COPY jmeter.properties /jmeter/apache-jmeter-5.6.3/bin/jmeter.properties
# 指定默認(rèn)的啟動(dòng)命令(可選)
# CMD ["jmeter"]
使用如下命令構(gòu)建Docker鏡像
docker build -t docker.mvcode.cn:8083/jmeter:5.6.3
然后使用命令上傳到鏡像庫
docker push docker.mvcode.cn:8083/jmeter:5.6.3
然后使用如下命令測試Jmeter命令是否可以正常使用
docker run --rm docker.mvcode.cn:8083/jmeter:5.6.3 jmeter -v
編寫測試用例
測試用例非常簡單,就是多線程并發(fā)請(qǐng)求用戶查詢接口,驗(yàn)證查詢結(jié)果返回結(jié)果是否正確。我們使用Jmeter工具編寫測試用例。
設(shè)置環(huán)境變量
這里定義了一些用戶變量,包括主機(jī)名(Host)、端口號(hào)(Port)、線程數(shù)(ThreadCount)和循環(huán)次數(shù)(LoopCount)。為了在后續(xù)的測試中靈活地修改,通過${__P(name,default)}方式從系統(tǒng)變量中獲取,在Jemter中執(zhí)行就使用默認(rèn)值。既滿足編寫測試用例,有方便自動(dòng)執(zhí)行。
定義線程組
在這個(gè)測試用例中,線程數(shù)由之前定義的 ThreadCount 變量控制,每個(gè)線程將循環(huán)執(zhí)行指定LoopCount 次數(shù)的請(qǐng)求。
用戶查詢請(qǐng)求
JSON斷言
使用$.[?(@.name == 'John' && @.age == 30)]
對(duì)結(jié)果進(jìn)行斷言。
本地執(zhí)行測試
執(zhí)行測試成功可以導(dǎo)出到文件。
定義Gitlab Job
將導(dǎo)出文件jmeter.jmx
上傳到testcases目錄、
修改測試腳本
修改test.js腳本,如上圖所示。首先添加如下內(nèi)容,通過我們構(gòu)建的devtools
鏡像,添加用于測試的數(shù)據(jù)。devtools
鏡像的構(gòu)建步驟參照基于Docker構(gòu)建CI/CD工具鏈(一)構(gòu)建基礎(chǔ)工具鏡像
docker run --rm \
docker.mvcode.cn:8083/devtools:1.0.0 \
curl -X POST -H "Content-Type: application/json" \
-d '{"name": "John", "age": 30}' \
http://192.168.3.52:9999/users
添加執(zhí)行Jmeter測試用的腳本如下
docker run --rm -v ${APP_ROOT}:/app -w /app \
docker.mvcode.cn:8083/jmeter:5.6.3 jmeter \
-n -j /app/test_jmeter.log \
-l /app/replort_jmeter.log \
-o /app/report \
-JServerHost=192.168.3.52 \
-JServerPort=9999 \
-JThreadCount=5 \
-t ./testcases/jmeter.jmx -e -f
這是一個(gè) Docker 命令,用于在容器中運(yùn)行 JMeter 測試。以下是命令的各部分解釋:
-
docker run
: 運(yùn)行 Docker 容器的命令。 -
--rm
: 在容器停止后自動(dòng)刪除容器,確保容器退出后不會(huì)留下殘留文件。 -
-v ${APP_ROOT}:/app
: 將本地${APP_ROOT}
目錄(宿主機(jī)上的目錄)掛載到容器內(nèi)的/app
目錄,實(shí)現(xiàn)文件的共享和數(shù)據(jù)持久化。 -
-w /app
: 指定容器的工作目錄為/app
,即在容器內(nèi)運(yùn)行命令時(shí)的默認(rèn)工作目錄為/app
。 -
docker.mvcode.cn:8083/jmeter:5.6.3
: 指定要運(yùn)行的 Docker 鏡像的名稱和版本,這里是 JMeter 版本為 5.6.3 的鏡像,來自docker.mvcode.cn:8083
倉庫。 -
jmeter
: 要在容器中執(zhí)行的命令,這里是運(yùn)行 JMeter。 -
-n
: 非 GUI 模式運(yùn)行 JMeter。 -
-j /app/test_jmeter.log
: 指定 JMeter 的日志文件路徑。 -
-l /app/replort_jmeter.log
: 指定測試結(jié)果的日志文件路徑。 -
-o /app/report
: 指定生成 HTML 報(bào)告的目錄。 -
-JServerHost=192.168.3.52
: 設(shè)置 JMeter 測試時(shí)使用的服務(wù)器主機(jī)地址。 -
-JServerPort=9999
: 設(shè)置 JMeter 測試時(shí)使用的服務(wù)器端口。 -
-JThreadCount=5
: 設(shè)置 JMeter 測試時(shí)的線程數(shù)。你可以設(shè)置LoopCount設(shè)置循環(huán)次數(shù)。 -
-t ./testcases/jmeter.jmx
: 指定要運(yùn)行的 JMeter 測試計(jì)劃文件的路徑。 -
-e
: 生成 JMeter 測試報(bào)告時(shí)包括所有樣本數(shù)據(jù)。 -
-f
: 在生成 JMeter 測試報(bào)告時(shí)強(qiáng)制覆蓋已存在的報(bào)告文件。
綜上所述,該命令的作用是在 Docker 容器中運(yùn)行 JMeter 測試,并生成相應(yīng)的日志文件和測試報(bào)告。其他參數(shù)可以參照J(rèn)Meter官方文檔。
執(zhí)行CI/CD JOB
執(zhí)行測試完成后,你在宿主機(jī)上可以看到生成測試報(bào)告。如何收集測試報(bào)告我們會(huì)通過一篇專門的文章講述。文章來源:http://www.zghlxwxcb.cn/news/detail-853798.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-853798.html
到了這里,關(guān)于基于Docker構(gòu)建CI/CD工具鏈(七)使用Jmeter進(jìn)行自動(dòng)化壓測的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!