Jmeter+Maven+jenkins介面和效能可持續整合測試
話說無時無刻都覺得有很多東西需要學習,但是我所奉行的理念的就是每天都進步一點,不斷完善不斷提高!!!!話不多說,進入正題:其實在本文最重要的應該就是jmeter的指令碼和pom.xml檔案
一、首先當然是在Jmeter的工具裡面編寫好自己的指令碼,除錯執行成功。本文就以專案測試中的兩個指令碼為例。
二、新建MAVEN工程,我用的是Eclipse
1、在src/test目錄下新建jmeter目錄,然後把自己的測試指令碼丟進去
2、在在src/test目錄下新建resources目錄,然後把測試模板丟進去。
在Jmeter3.2中自帶的模板是下圖的兩個,apache-jmeter-3.2\extras
但是基於自帶的模板太簡單了,需要去網上下載比較好用的模板,我這裡下載的就是這兩個,反正喜歡哪個就把哪個丟進去。
3、編寫pom.xml檔案
我這裡列舉比較重要的幾點
(1)新增jmeter-maven-plugin依賴,這樣才能在eclipse裡面執行Jmeter的指令碼,而不依賴與Jmeter這個工具本身;
(2)由於jmeter-maven-plugin這個外掛生成的測試結果的格式是jtl的,我們需要轉換成html的,更直觀,而且能在jenkins中直接顯示;
(3)在本人構建專案的過程中,遇到一個比較大的坑就是html頁面顯示出來的資料有一些是NaN的
這個問題確實困擾了我很久,在網上搜到的辦法都是關於ant的。相對於Maven的資料相對就很少了。後來才發現需要用XSLT2.0,在pom.xml中新增依賴就可以了
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion >
<groupId>zdt</groupId>
<artifactId>zdt-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>zdt-test</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jmeter.result.jtl.dir>${project.build.directory}\jmeter\results</jmeter.result.jtl.dir>
<jmeter.result.html.dir>${project.build.directory}\jmeter\html</jmeter.result.html.dir>
<jmeter.result.html.dir1>${project.build.directory}\jmeter\html1</jmeter.result.html.dir1>
<ReportName>TestReport</ReportName>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-maven-plugin</artifactId>
<version>2.2.0</version>
<configuration>
<resultsFileFormat>xml</resultsFileFormat>
<ignoreResultFailures>true</ignoreResultFailures>
<testResultsTimestamp>false</testResultsTimestamp>
</configuration>
<executions>
<execution>
<id>jmeter-tests</id>
<phase>verify</phase>
<goals>
<goal>jmeter</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0-beta-3</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>transform</goal>
</goals>
</execution>
</executions>
<configuration>
<transformationSets>
<transformationSet>
<dir>${jmeter.result.jtl.dir}</dir>
<stylesheet>src\test\resources\jmeter-results-report-loadtest.xsl</stylesheet>
<outputDir>${jmeter.result.html.dir}</outputDir>
<fileMappers>
<fileMapper
implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
<targetExtension>html</targetExtension>
</fileMapper>
</fileMappers>
</transformationSet>
<transformationSet>
<dir>${jmeter.result.jtl.dir}</dir>
<stylesheet>src\test\resources\jmeter.results.shanhe.me.xsl</stylesheet>
<outputDir>${jmeter.result.html.dir1}</outputDir>
<fileMappers>
<fileMapper
implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
<targetExtension>html</targetExtension>
</fileMapper>
</fileMappers>
</transformationSet>
</transformationSets>
</configuration>
<!-- using XSLT 2.0 -->
<dependencies>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>saxon</artifactId>
<version>8.7</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
至此專案的執行應該不存在問題了。在Eclipse中執行之後就會有測試結果。
results、html、html1三個檔案中存在的就是jtl、HTML、HTML格式的測試結果。html中得測試結果更偏向於效能測試,html1中的測試結果更多的是顯示一些介面資訊,適用於介面測試。
三、在Jenkins進行自動化構建並展示測試結果
在jenkins進行構建之前首先需要裝幾個外掛
Maven Integration plugin Maven外掛;
Git plugin GIT 外掛;
Performance plugin 效能報告外掛;
HTML Publisher plugin HTTP report外掛;
前面兩個外掛是因為專案本身是Maven專案,程式碼統一傳在git上;後面兩個外掛只是為了展示測試報告。
1、建立一個Maven專案
2、選擇存放程式碼的位置。git伺服器的URL地址
build中填寫pom.xml路徑
至此應該可以構建成功了。
檢視構建日誌
3、但是我們還需要一些步驟來做測試前準備和測試後報告展示
測試前準備:pre steps
在下一次測試前刪除上一次的測試結果,這裡可以執行各種型別的指令碼,因為我們的伺服器是linux的,所以這裡選的是shell指令碼
測試後測試結果展示:
(1)jenkins設定展示jtl的測試結果
展示的效果:
(2)jenkins設定展示成html
展示的效果:
scenario1 HTML Report:
scenario1 HTML Report1:(這個需要修改jmeter.properties檔案,把需要的欄位改為true,否則顯示不出來)