Jenkins+maven+jmeter接口可持续集成自动化测试

2 篇文章 0 订阅
1 篇文章 0 订阅

   说到接口我们都能想到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文件

<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>interface.test</groupId>
	<artifactId>vet</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<name>vet</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\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>
	<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>vet2</finalName>
		<plugins>
			<plugin>
				<groupId>com.lazerycode.jmeter</groupId>
				<artifactId>jmeter-maven-plugin</artifactId>
				<version>2.1.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.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
					<compilerArguments>
						<extdirs>src\test\jmeter\lib</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\test\resources\jmeter-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\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>
			</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>
			
			<!-- 把resources文件夹下面的文件拷贝到jmeter/html目录下 -->
			 <plugin>
			<artifactId>maven-resources-plugin</artifactId>
			<executions>
				<execution>
					<id>copy-resources-html</id>
					<phase>compile</phase>
					<goals>
						<goal>copy-resources</goal>
					</goals>
					<configuration>
						<!-- test可以在环境变量中定义,也可以将下面写成绝对地址 -->
						<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>	
				
		<!-- 把resources文件夹下面的文件拷贝到jmeter/lib/ext目录下 -->
		<plugin>
			<artifactId>maven-resources-plugin</artifactId>
			<executions>
				<execution>
					<id>copy-resources-lib</id>
					<phase>compile</phase>
					<goals>
						<goal>copy-resources</goal>
					</goals>
					<configuration>
						<!-- test可以在环境变量中定义,也可以将下面写成绝对地址 -->
						<outputDirectory>${project.build.directory}/jmeter/lib/ext</outputDirectory>
						<resources>
							<resource>
								<!-- basedir标识所有工程 -->
								<directory>${basedir}/src/test/lib</directory>
								<filtering>false</filtering>
							</resource>
						</resources>
					</configuration>
				</execution>
			</executions>
		</plugin>			
				
		</plugins>	
		<defaultGoal>clean</defaultGoal>
	</build>
</project>

4,调试工程,确保工程能正常运行

三,安装jenkins跟一些必要的插件

1,下载对应windows安装的jenkins

 

2,安装好jenkins后本地启动jenkins,进入插件管理界面,国内由于被墙了,所以需要配置一下。系统管理->管理插件->

高级->升级站点 中输入:http://updates.jenkins-ci.org/update-center.json 提交保存后,在地址栏输入

http://localhost:8080/restart重启,再次进入插件管理界面这时可选插件界面就会有内容了

 

3,需要安装的插件

Maven Integration plugin        Maven插件

Performance plugin 性能报告插件

HTML Publisher plugin HTTP report插件

Git plugin GIT 插件

 

4,插件安装好后,就可以新建一个项目了,这里我们选择构建一个maven项目,名称为bluemoon

 

选择Git,输入Git服务器的URL地址,用户名跟密码

 

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、javascript 2、html上的内置插件 3、内置css或从其它站的css 4、从其它站的图处 5、AJAX

我的网页使用的是css,所以显示不全。

解决这个问题可以在jenkins系统管理中输入以下脚本运行,就可以解决这个问题了

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

 

四,最终效果

 

五,遇到的其他一些问题

 

1、当我们jmeter脚本中要运用jdbc来连接数据库时,此时是需要jdbc驱动的,这里解决的办法就是在dependecy中增

加依赖,然后再把这个依赖包拷贝到target的lib库中,这样用于引用jdbc的jar包就放到了lib中,也就解决了找不到jdbc

驱动的问题

<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工程中没有把相应的图标拷贝过去,那么我们只

要把这个图标拷贝过去不就可以解决了吗?答案是肯定的。

把这两个图标文件一起放到工程中的src/test/resources目录下,再在pox中添加以下插件即可

这里我在pom文件中添加了一个插件,代码如下:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>compile</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <!-- test可以在环境变量中定义,也可以将下面写成绝对地址 -->
                <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>

 

后面还遇到过其他坑,你如拷贝jar包后与原jar包md5不一致的问题,还有我们查看生成的html报告时不会出现没有Request跟Response内容的问题。具体的方法可以看我的另一篇文章,因为不想码字了所以直接放上连接:https://testerhome.com/topics/9010

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值