詳解使用Git和Jmeter-Maven-Plugin管理Jmeter腳本的接口測(cè)試方案
上一篇文章中講解了如何使用jmeter進(jìn)行接口測(cè)試以及落地的方案,詳情參考:
??干貨!Jmeter落地接口測(cè)試的實(shí)現(xiàn)方案。???
本文我們來(lái)繼續(xù)這一話題,深入講解如何通過(guò)git和jmeter-maven-plugin來(lái)管理jmeter腳本,以及其如何在接口持續(xù)集成測(cè)試中進(jìn)行應(yīng)用。
總體策略
- 使用公司的gitlab管理jmeter腳本(maven工程),大家每次本地編輯腳本后都需要提交更新的腳本到gitlab。
- 每個(gè)人只更新維護(hù)自己的腳本(避免引起沖突)。
- 腳本提交前要確保腳本執(zhí)行的正確性。
- 只在主干工作,沒(méi)有涉及到分支。
- 后續(xù)使用jmeter-maven-plugin對(duì)jmx執(zhí)行進(jìn)行管理,這樣方便了jmx接口測(cè)試腳本在持續(xù)集成中的應(yīng)用(腳本編寫人員無(wú)須關(guān)注)
接下來(lái)會(huì)對(duì)git基礎(chǔ)概念和jmeter-maven-plugin進(jìn)行基礎(chǔ)介紹:
Git基礎(chǔ)概念
這部分講解非常實(shí)用簡(jiǎn)單,即使大家是git小白,看了這篇文章也會(huì)快速上手git!
Git 工作區(qū)、暫存區(qū)和版本庫(kù)概念:
工作區(qū):就是在電腦里能看到的目錄,下圖中的workspace。
暫存區(qū):英文叫 stage 或 index。一般存放在 .git 目錄下的 index 文件(.git/index)中,所以我們把暫存區(qū)有時(shí)也叫作索引(index),下圖中的staging area。
版本庫(kù):工作區(qū)有一個(gè)隱藏目錄 .git,這個(gè)不算工作區(qū),而是 Git 的版本庫(kù)。
對(duì)應(yīng)下圖中的local repository(本地)和remote repository(遠(yuǎn)程,通常指github、gitlab)
重點(diǎn)!重點(diǎn)!重點(diǎn)!對(duì)于git的各種命令使用記住上面這個(gè)圖就可以了?。?!
核心命令
- clone(克?。? 從遠(yuǎn)程倉(cāng)庫(kù)中克隆代碼到本地倉(cāng)庫(kù)。
- checkout (檢出):從本地倉(cāng)庫(kù)中檢出一個(gè)倉(cāng)庫(kù)分支然后進(jìn)行修訂。
- add(添加): 在提交前先將代碼提交到暫存區(qū)。
- commit(提交): 提交到本地倉(cāng)庫(kù)。本地倉(cāng)庫(kù)中保存修改的各個(gè)歷史版本。
- fetch (抓取) : 從遠(yuǎn)程庫(kù),抓取到本地倉(cāng)庫(kù),不進(jìn)行任何的合并動(dòng)作,一般操作比較少。
- pull (拉取) : 從遠(yuǎn)程庫(kù)拉到本地庫(kù),自動(dòng)進(jìn)行合并(merge),然后放到工作區(qū),相當(dāng)于 fetch+merge。
- push(推送) : 修改完成后,需要和團(tuán)隊(duì)成員共享代碼時(shí),將代碼推送到遠(yuǎn)程倉(cāng)庫(kù)。
初始化
git init初始化倉(cāng)庫(kù)。
備注:使用git clone 無(wú)須初始化倉(cāng)庫(kù)。
提交代碼到倉(cāng)庫(kù)
- git add [file1] [file2] ... 添加一個(gè)或多個(gè)文件到暫存區(qū)。
- git add [dir] 添加指定目錄到暫存區(qū),包括子目錄。
- git add . 添加當(dāng)前目錄下的所有文件到暫存區(qū),提交新文件(new)和被修改(modified)文件,不包括被刪除(deleted)文件。
- git add -u 提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new)。
- git add -A 提交所有變化。
- git commit -m '初始化項(xiàng)目版本' 提交暫存區(qū)到本地倉(cāng)庫(kù)中:
- git commit -a 參數(shù)a設(shè)置修改文件后不需要執(zhí)行 git add 命令,直接來(lái)提交。
修改
- git status 查看倉(cāng)庫(kù)當(dāng)前的狀態(tài),顯示有變更的文件。
- git diff 比較文件的不同,即暫存區(qū)和工作區(qū)的差異。
- git diff <分支名1> <分支名2> :比較兩個(gè)分支上最后 commit 的內(nèi)容的差別。
- git diff --cached 或 git diff --staged:顯示暫存區(qū)(已a(bǔ)dd但未commit文件)和最后一次commit(HEAD)之間的所有不相同文件的增刪改。
- git diff HEAD:顯示工作目錄(已track但未add文件)和暫存區(qū)(已a(bǔ)dd但未commit文件)與最后一次commit之間的所有不相同文件的增刪改。
- git reset 回退版本。
- git rm 刪除工作區(qū)文件。
- git mv 移動(dòng)或重命名工作區(qū)文件。
提交日志
- git log 查看歷史提交記錄。
- git blame <file> 以列表形式查看指定文件的歷史修改記錄。
遠(yuǎn)程操作
- git remote 遠(yuǎn)程倉(cāng)庫(kù)操作。
- git fetch 從遠(yuǎn)程獲取代碼庫(kù)。
- git pull 下載遠(yuǎn)程代碼并合并。
- git push 上傳遠(yuǎn)程代碼并合并。
Git 分支管理
- git branch 查看分支。
- git branch aa 添加分支aa。
- git checkout aa 切換到aa分支。
- git branch -d aa 刪除aa分支。
- git branch -d aa 合并完后就可以刪除分支。
jmeter-maven-plugin管理jmx文件
jmeter-maven-plugin實(shí)現(xiàn)了在maven項(xiàng)目中運(yùn)行jmx文件進(jìn)而批量執(zhí)行jmeter腳本并生成測(cè)試報(bào)告的需求,這樣在持續(xù)繼承中運(yùn)行jmx腳本就非常方便了,pom.xml內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>JmeterAPI</artifactId>
<version>1.0-SNAPSHOT</version>
-<build>
-<plugins>
-<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-maven-plugin</artifactId>
<version>3.4.0</version>
-<executions>
<!-- Generate JMeter configuration -->
-<execution>
<id>configuration</id>
-<goals>
<goal>configure</goal>
</goals>
</execution>
<!-- Run JMeter tests -->
-<execution>
<id>jmeter-tests</id>
-<goals>
<goal>jmeter</goal>
</goals>
</execution>
<!-- Fail build on errors in test -->
-<execution>
<id>jmeter-check-results</id>
-<goals>
<goal>results</goal>
</goals>
</execution>
</executions>
-<configuration>
<generateReports>true</generateReports>
-<testFilesExcluded>
<excludeJMeterTestFile>Demo.jmx</excludeJMeterTestFile>
<ignoreResultFailures>true</ignoreResultFailures>
</testFilesExcluded>
</configuration>
</plugin>
</plugins>
</build>
使用該插件核心有以下三點(diǎn):
- 使用jmeter-maven-plugin,我們需要把所有的用例放在/src/test/jmeter目錄下。
- 運(yùn)行腳本通過(guò)mvn clean verify。
- 生成的日志和報(bào)告在工程目錄 \target\jmeter,一個(gè)jmx腳本會(huì)生成一個(gè)報(bào)告。
在pom.xml中,如果你想忽略某個(gè)jmx文件的運(yùn)行,可以如下設(shè)置:
<excludeJMeterTestFile>Demo.jmx</excludeJMeterTestFile>
默認(rèn)如果jmx執(zhí)行過(guò)程中有錯(cuò)誤,則會(huì)停止運(yùn)行,pom中配置<ignoreResultFailures>true</ignoreResultFailures>則可以避免這個(gè)問(wèn)題。
還有很多關(guān)于jmeter-maven-plugin的使用技巧等待大家自行探索,非常簡(jiǎn)單,參考:
https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki 完全可以輕松搞定!
Git管理腳本的具體應(yīng)用
具體執(zhí)行步驟:
本機(jī)安裝git環(huán)境,下載git bash并默認(rèn)安裝即可,官方鏈接如下:
https://git-scm.com/downloads。
在git bash中可以使用linux命令進(jìn)行相關(guān)操作,創(chuàng)建一個(gè)目錄
執(zhí)行命令 git init,初始化git工程
執(zhí)行命令 git pull 下載遠(yuǎn)程項(xiàng)目到本地(我們前一章節(jié)講解的使用了jmeter-maven-plugin的maven項(xiàng)目)
進(jìn)入工程目錄。
/JmeterScript/YourAPIProject/src/test/jmeter
通過(guò)jmeter編寫接口用例,然后把本地jmx用例拷貝到目錄
/JmeterScript/YourAPIProject/src/test/jmeter中,這樣就實(shí)現(xiàn)了git 與maven項(xiàng)目的文件關(guān)聯(lián)。
先后執(zhí)行命令:
git add 具體業(yè)務(wù).jmx (只提交自己的jmx文件即可)
git commit –m “提交信息”
備注:首次提交需要執(zhí)行命令。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
執(zhí)行命令git push origin master 把腳本上傳到gitlab(完成了腳本的上傳工作)。
備注:如果只有自己維護(hù)代碼大家只需要執(zhí)行push 操作更新gitlab腳本即可;如果涉及多人共享,需要先執(zhí)行g(shù)it pull origin master,從gitlab獲取最新代碼,然后在進(jìn)行編輯,最后提交。
運(yùn)行jmx腳本
我們可以定時(shí)構(gòu)建使用了jmeter-maven-plugin的maven項(xiàng)目。
- 運(yùn)行腳本通過(guò)mvn clean verify。
- 生成的日志和報(bào)告在工程目錄 \target\jmeter。
- 分析日志和報(bào)告,判斷接口的執(zhí)行情況,這里需要寫一些代碼對(duì)生成的報(bào)告進(jìn)行解析 ,在此就不詳細(xì)介紹了。
總結(jié)
文章寫了很多,但是總結(jié)起來(lái)其實(shí)很簡(jiǎn)單,主要包括以下四點(diǎn):
- 把jmx放在maven的工程里,通過(guò)jmeter-maven-plugin管理jmx的運(yùn)行策略。
- maven工程放到gitlab中,通過(guò)git上傳下載工程文件。
- 本地的jmx文件,通過(guò)git上傳到gitlab中。
- 通過(guò)構(gòu)建maven工程運(yùn)行jmx文件。