Jenkins+maven+jmeter接口可持续集成自动化测试
Posted 程序员技术前沿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins+maven+jmeter接口可持续集成自动化测试相关的知识,希望对你有一定的参考价值。
说到接口我们都能想到jmeter这个工具,但是我们如何借助jenkins来做可持续集成自动化的测试呢?下面就是我对jenkins、maven、jmeter做的可持续化集成环境搭建的学习心得。
一,jmeter脚本录制
这一步就是录制Jmeter脚本,确保脚本能正确运行。
二,建立一个maven工程
1,打开eclipse,点击File->New->Project->Maven Project
2,创建maven工程后,在工程目录下新建所需的文件夹
--Src/test/resources --存放报告模板文件
--src/main/
--src/test/jmeter --存放jmeter脚本文件跟一些接口调用的参数
--target/jmeter/bin --target存放结果的根目录
--target/jmeter/html
--target/jmeter/html1
--target/jmeter/lib
--target/jmeter/logs
--target/jmeter/results
--target/maven-archiver
--target/surefire
3,编辑pom.xml文件
[plain] view plain copy
<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/maven-v4_0_0.xsd">
<modelversion>4.0.0</modelversion>
<groupid>testDemo</groupid>
<artifactid>bluemoon</artifactid>
<version>1.11</version>
<name>bluemoon Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>servlet-api</artifactid>
<version>3.0-alpha-1</version>
</dependency>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>5.1.13</version>
</dependency>
<!-- <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_jdbc</artifactId>
<version>2.11</version> </dependency> <dependency> <groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId> <version>10.2.0.5</version> </dependency> -->
<!-- MySql 5.5 Connector -->
</dependencies>
<properties>
<jmeter.result.jtl.dir>${project.build.directory}jmeter esults</jmeter.result.jtl.dir>
<jmeter.result.html.dir>${project.build.directory}jmeterhtml</jmeter.result.html.dir>
<jmeter.result.html.dir1>${project.build.directory}jmeterhtml1</jmeter.result.html.dir1>
<reportname>TestReport</reportname>
</properties>
<pluginrepositories>
<pluginrepository>
<id>Codehaus repository</id>
<url>http://repository.codehaus.org/</url>
<releases>
<enabled>true</enabled>
<updatepolicy>always</updatepolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatepolicy>always</updatepolicy>
</snapshots>
</pluginrepository>
</pluginrepositories>
<build>
<finalname>bluemoon</finalname>
<plugins>
<plugin>
<groupid>com.lazerycode.jmeter</groupid>
<artifactid>jmeter-maven-plugin</artifactid>
<version>1.10.0</version>
<configuration>
<resultsfileformat>xml</resultsfileformat>
<ignoreresultfailures>true</ignoreresultfailures>
<testresultstimestamp>flase</testresultstimestamp>
</configuration>
<executions>
<execution>
<id>test</id>
<phase>verify</phase>
<goals>
<goal>jmeter</goal>
</goals>
<!-- <configuration> <resultsFileFormat>csv</resultsFileFormat> </configuration> -->
</execution>
</executions>
</plugin>
<!-- <plugin> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_jdbc</artifactId>
<version>2.11</version> </plugin> -->
<plugin>
<artifactid>maven-compiler-plugin</artifactid>
<configuration>
<source>1.6
<target>1.6</target>
<encoding>UTF-8</encoding>
<compilerarguments>
<extdirs>src estjmeterlib</extdirs>
</compilerarguments>
</configuration>
</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 est esourcesjmeter-results-detail-report_21.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 est esourcesjmeter.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>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-dependency-plugin</artifactid>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputdirectory>${project.build.directory}/jmeter/lib</outputdirectory>
<overwritereleases>false</overwritereleases>
<overwritesnapshots>false</overwritesnapshots>
<overwriteifnewer>true</overwriteifnewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-jar-plugin</artifactid>
<configuration>
<archive>
<manifest>
<addclasspath>true</addclasspath>
<classpathprefix>lib/</classpathprefix>
<mainclass>theMainClass</mainclass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<defaultgoal>clean</defaultgoal>
</build>
</project>
4,调试工程,确保工程能正常运行
三,安装jenkins跟一些必要的插件
1,下载对应windows安装的jenkins
2,安装好jenkins后本地启动jenkins,进入插件管理界面,国内由于被墙了,所以需要配置一下。系统管理->管理插件->
http://localhost:8080/restart重启,再次进入插件管理界面这时可选插件界面就会有内容了
3,需要安装的插件
Maven Integration plugin Maven插件
Performance plugin 性能报告插件
HTML Publisher plugin HTTP report插件
Git plugin GIT 插件
4,插件安装好后,就可以新建一个项目了,这里我们选择构建一个maven项目,名称为bluemoon
Build选项中输入pom.xml文件路径
添加构建后操作,增加一个Publish HTML reports,html directory to archive为转译后html文件的保存路径,
index pages 为转译后的文件名称,report title 为jenkins中显示的标题
构建后操作还可以添加邮件服务模块,就是构建成功后会发送邮件通知,这里就不举例了。
5,点击应用,保存。这时就可以点击立即构建来触发构建功能了
6,Console putput可以查看输入日志,方便构建时查看哪里出现的问题
7,构建成功后,我们就可以查看脚本运行后的结果,点击performace或function来查看
这里可以看到生成的html在jenkins使用html publisher查看报告时,发现显示不美观,不全的现象,很多东西显示不了
。
在查看官方文档后,这原来是安全问题所导致的。
Jenkins安全默认是将以下功能都关闭了
1、javascript2、html上的内置插件3、内置css或从其它站的css4、从其它站的图处5、AJAX
我的网页使用的是css,所以显示不全。
解决这个问题可以在jenkins系统管理中输入以下脚本运行,就可以解决这个问题了
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
四,最终效果
五,遇到的其他一些问题
1、当我们jmeter脚本中要运用jdbc来连接数据库时,此时是需要jdbc驱动的,这里解决的办法就是在dependecy中增
加依赖,然后再把这个依赖包拷贝到target的lib库中,这样用于引用jdbc的jar包就放到了lib中,也就解决了找不到jdbc
驱动的问题
[plain] view plain copy
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>5.1.13</version>
</dependency>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-dependency-plugin</artifactid>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputdirectory>${project.build.directory}/jmeter/lib</outputdirectory>
<overwritereleases>false</overwritereleases>
<overwritesnapshots>false</overwritesnapshots>
<overwriteifnewer>true</overwriteifnewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-jar-plugin</artifactid>
<configuration>
<archive>
<manifest>
<addclasspath>true</addclasspath>
<classpathprefix>lib/</classpathprefix>
<mainclass>theMainClass</mainclass>
</manifest>
</archive>
</configuration>
</plugin>
2、如下图中,报告中有写图标是没有显示出来的,造成这个问题的原因是我们用jenkins持续集成时把把代码拷到target工程中没有把相应的图标拷贝过去,那么我们只
要把这个图标拷贝过去不就可以解决了吗?答案是肯定的。
这里我在pom文件中添加了一个插件,代码如下:
[plain] view plain copy
<plugin>
<artifactid>maven-resources-plugin</artifactid>
<executions>
<execution>
<id>copy-resources</id>
<phase>compile</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputdirectory>${project.build.directory}/jmeter/html</outputdirectory>
<resources>
<resource>
<!-- basedir标识所有工程 -->
<directory>${basedir}/src/test/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
以上是关于Jenkins+maven+jmeter接口可持续集成自动化测试的主要内容,如果未能解决你的问题,请参考以下文章
Jmeter+Maven+Jenkins+Git接口自动化流程
Jenkins+Ant+Jmeter接口自动化测试(持续构建)
jenkins+ant+jmeter接口自动化测试(持续构建)
搭建持续集成接口测试平台(jenkins+ant+jmeter)