最近在实现 Jmeter+Maven+Jenkins+Git 接口自动化,研究不到两周,实现了 Jmeter+Maven+Jenkins+Git 接口自动化 的整体流程。 仅以此博客简单记录下自己实现的过程。
一. 职责、角色明确
Jmeter: 执行者,录制接口测试脚本,运行脚本,得到结果,生成报告,统计数据;
Maven,Git :管理者, Maven 主要负责项目的依赖管理,Git 主要负责项目的代码管理;
Jenkins:调度者,持续集成(CI)工具;构建、部署自动化;可以持续编译,运行代码;运行UT或集成测试;将运行结果发送至邮件,或展示成报告。
二. 接口自动化意义
基本上来说,有这么几点好处:提供测试效率; 完成手工测试复杂,但对自动化测试很简单的事 ; 反复执行; 提高维持测试覆盖度;日常巡检;
三. 环境准备
想要全部实现,首先需要确保环境是ok的。jdk,jmeter,maven,git,jenkins 都需要是ok的。
3.1. java环境:java包安装,配置环境变量
cmd中 输入 java -version,显示java版本即安装成功
Java下载地址连接:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html
3.2 Jmeter安装
Jmeter下载:http://jmeter.apache.org/download_jmeter.cgi
jmeter下载压缩包后,解压,配置环境变量。
即可使用 验证cmd,输入jmeter -v,显示jmeter版本,jmeter可正常使用。
3.3 Maven
maven 下载链接:http://maven.apache.org/download.cgi
选择 二进制zip存档链接,下载解压,安装;
配置环境变量,MAVEN_HOME;将%MAVEN_HOME%in添加到Path变量下
验证:cmd中输入 mvn -v
maven运行,需要安装maven IDE插件--eclipse:下载安装链接: https://www.runoob.com/eclipse/eclipse-install.html,安装neon版本。 (具体安装,不再详述)
3.4 git
git 下载: http://git-scm.com/downloads
git安装完成后,在菜单git-git bash,点击,显示一个类似命令行窗口的东西,说明git安装成功。
其中git 安装完毕后,需要进行ssh连接,才能使用。 稍微,git的ssh 认证单独写一篇。
3.5 Jenkins, 如果公司有运维,一般是运维在服务器上安装Jenkins,然后给相关人员 公司jenkins地址链接,同时每个人的用户名与密码。
当然,没有运维,自己电脑上也可以安装本地jenkins,进行自动化的构建。
下面进入本篇的正题:接口自动化 整体流程。。 自动化流程 -----key
一、使用jmeter 进行接口脚本准备,脚本运行通过,保存脚本jmx,导出。
二、使用eclipse 创建Maven项目 eclipse打开--file---New--other,
Select a wizard,选择Maven--Maven project,点击next。
界面进入New Maven Project,选择 第二个:User default Workspace location:使用本地默认的工作空间
默认使用第2 个,点击next。界面进入New Maven project,Catalog,Filter 选择 Artifact Id: maven-archetype-webapp,版本1.0,点击next、
其中Group Id:组Id,针对一个项目的普遍唯一识别符。是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构,相当于我们日常使用的包名,例如:org.hhh,最好是填写公司或者组织名称 com.company Artifact Id:要新建的项目的名字,项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称 Version:版本号,默认0.0.1-SNAPSHOT。 package:输入group、artifact,会自动生成package,目录+名字=完整路径。输入group,artifact,点击next,生成maven项目 注意:group id+artifact id+version必须是一个唯一的名字,不要和任何别的jar包全名一模一样,否则会引发冲突。
使用eclipse,创建maven项目、成功。
使用eclipse 创建maven项目,只会自动生成src/main/resources 和target/classes, target/test-classes,需要自己手动添加其他目录,并且指定项目的source以及编译后的输出目录。 使用eclipse运行接口测试脚本,选择project 右击----run as ------maven build,然后再弹出的对话框Goals 写上verify,--run。运行后会有测试结果文件,显示BUILD SUCCESS,即为运行成功。
二)、Maven项目约定
Maven中使用项目约定,它约定Java源代码放在哪个目录,约定编译的class文件放在哪个目录,约定资源或配置文件放在哪个目录,每一种文件的存放目录都有着明确的约定,下面是Maven的项目约定结构图:
MavenProject(项目根目录)
|----src —— 源代码目录 |
|----main ---- 开发使用
|----java —— 存放项目的.java文件
|----resources —— 存放项目资源文件,如spring、hibernate配置文件 | |
|----webapp ---如果是web项目则需要该目录,存放WEB-INF目录、web.xml、jsp、html、js等文件 |
|----test -----测试 主用
|----java —— 存放所有测试.java文件,如JUnit测试类
|----resources —— 存放项目测试用的资源文件,如spring, hibernate配置文件
|----target —— 项目输出目录,存放经过编译的class文件和打包部署的jar包等
|----pom.xml —— 定义项目的对象模型,同时标识该项目是一个Maven项目
三)、本地构建Maven项目
1.在src下手动新建test目录,src/test目录下新建jmeter文件夹,把准备好的jmeter接口测试的jmx脚本复制到这个文件夹下
2.在src/test目录下创建resources文件夹,并把测试模板(E:apache-jmeter-5.1apache-jmeter-5.1extras的如下文件)复制到这个resources文件下
文件1:jmeter-results-detail-report_21.xsl
文件2:jmeter-results-report_21.xsl
3.将下面五个文件从jmeter/bin目录复制到 src/test/jmeter文件夹
文件1 :jmeter.properties
文件2:saveservice.properties
文件3:system.properties
文件4:upgrade.properties
文件5:user.properties
四)、关键点:pom.xml 配置文件 -------构建 Maven项目中最重要的一个文件
pom 配置文件,maven项目生成时 ,pom文件中是有一部分内容的。 我们主要是在pom 文件中增加各种插件
4.1 测试报告---html地址配置。properties 增加在dependencies依赖之前
<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>
其中需要注意,多个报告时, html 与 html1, dir 与dir1。 如果设置一样,生成报告 可能会存在 报告一致的情况。
其他插件增加在 dependencies依赖 build finalName 后
测试报告configuration中的 transformationSets配置
<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>
核心插件jmeter -maven-plugin --------核心插件
<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-maven-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<resultsFileFormat>xml</resultsFileFormat>
<ignoreResultFailures>true</ignoreResultFailures>
<ignoreResultErrors>false</ignoreResultErrors>
<testResultsTimestamp>false</testResultsTimestamp>
<resultsDirectory>${jmeter.result.jtl.dir}</resultsDirectory>
</configuration>
<executions>
<execution> <id>jmeter-tests</id>
<phase>verify</phase>
</plugin>
<goals>
<goal>jmeter</goal>
</goals>
</execution>
</executions>
此核心插件:用来执行jmx脚本,版本号特别注意。 上一页与本页是 该核心插件。其中配置解释 resultsFileFormat:设置jmeter生成结果文件格式; ignoreResultFailures:设置忽略失败是否停止运行; ignoreResultErrors:设置忽略错误是否停止运行 testResultsTimestamp:设置结果是否有时间戳 resultsDirectory: 指定jtl 生成目录。
脚本所在文件夹
<executions>
<execution>
<id>jmeter-tests</id>
<phase>verify</phase>
<goals>
<goal>jmeter</goal>
</goals>
</execution>
</executions>
插件 xml-maven-plugin, 配置文件中: (该插件:根据xsl模板把jtl文件转换成html)
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0.2</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>transform</goal>
</goals>
</execution>
</executions>
<configuration>
xml 插件的configuration 中配置两个报告 transformationSet ,每个报告中包括dir,stylesheet,outputDir,报告配置如下
<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>
注意:多个报告时,报告的stylesheet、outputDir 必须不能一致。stylesteet 是指定的报告样式,可以自己网上下载样式,放置jmeter 相关文件中,这里写上;也可以使用jmeter 包中现有的 报告样式; 另外,jmeter的配置文件,其实可以进行修改 代码,来获得自己想要的报告样式;
最后一个插件,XSLT插件 (忘记这个插件是什么作用了)
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>saxon</artifactId>
<version>8.7</version>
</dependency>
基本以上,是所有的pom 中需要配置的插件。 代码需要自己输入,粘贴会出现 缩进等问题
五)、eclipse运行接口测试脚本
运行接口测试脚本
选择project 右击----run as ------maven build,然后再弹出的对话框Goals 写上verify,--run。
运行后会有测试结果文件。运行,console中等待运行完毕,显示build success,即运行成功。
脚本构建成功,在target中生成报告,target中 jmeter/html 中是生成的报告。
如果有多维度报告,jmeter会存在多个html。
注意问题:如果需要生成多个报告,pom.xml文件中html的transformationSet 中,stylesheet 配置两个报告模板,生成html报表文件路径outputDir 不能重复,一个dir,一个dir1 到此,jmeter + maven项目,本地已经构建成功。可成功生成报告。
三、Jenkins 本地下载安装
https://jenkins.io/download/ 官网下载安装;
坑一:jenkins中新建项目 没有一个 “创建一个Maven项目”的选项
解决:需要安装Maven 项目插件:Maven Integration.
系统管理---管理插件--可选插件,搜索框中输入插件名Maven Integration,搜索到,点击安装,安装完毕重启,重启ok。
jenkins 构建maven本地项目
Maven项目本地调试通过,在cmd中切换到maven 项目 的pom.xml 所在路径, 执行mvn clean install ,显示BUILD SUCCESS----执行成功
jenkins中 Manage Jenkins, Glogal Tool Configuration, 配置jdk,
其中,install automatically ,如果想使用本地jdk,可以不勾选。
写上本地jdk 版本号,jdk 本地安装路径 maven 使用本地maven的话,同样不勾选,install automatically ,写上本地maven 版本号,本地maven 安装路径。
配置完成,点击应用。 (本地jenkins,JDK,maven需要自己配置。 公司服务器,jenkins 基础服务运维负责)
Jenkins 本地构建
jenkins新建项目----maven项目,构建Maven项目,
General:输入简单的描述 源码管理:None
Pre Steps:Execute Windows batch command
命令: (cmd 命令窗口框中的命令一致,即可。)
cd C:MavenMavenProject estOne
mvn clean install
Build
Root POM: C:MavenMavenProject estOnepom.xml
点击:应用。
即可 应用,构建的时候,起作用。
点击构建,点击build 下的本次构建的进度条,--console output,查看日志,日志最后Finish success,即构建成功。 构建失败,同样可以在日志中查看错误。
二)、Jenkins Html测试报告
系统管理---- 插件管理-- 可选插件,下载HTML Publisher。 (本地jenkins需要,公司jenkins,运维)
构建项目,构建后操作-----Publish HTML reports 构建后操作-----Publish HTML reports,
HTML directory to archive: targetjmeterhtml (jenkins本地项目可使用路径,一般连接公司jenkins时,默认所在位置:当前项目目录,所以直接输入当前目录后路径即可)
index page:index.html
Report title: 测试报告
三)Jenkins 邮件通知
Email Extension Plugin 插件
系统管理---系统设置,在系统设置中找到Jenkins Locaction 填好JenkinsURL 跟系统管理员的邮件地址,注意必填。
邮件通知--点击高级配置 QQ邮箱smtp服务器地址:**smtp.qq.com** (qq邮箱要登陆邮箱→设置→账户 开启SMTP服务) 使用SMTP认证,勾选。
jenkins 邮件通知输入,
用户名:输入自己的QQ
密码:Q邮箱的话,是你开启smtp服务后他会给你密码的,而不是你的QQ邮箱密码了。
端口号:465 勾选通发送测试邮件测试配置 ,Test configuration 点击,测试是否配置成功。 如果email 显示成功,则测试 邮件发送成功。
注意:邮件端口号:一定 465,其他,邮件通知发送不成功。
四、 Jmeter + Maven + Jenkins + Git
本地代码放置git上,代码同步;
源码管理,选择Git,输入git 上该项目http地址,输入git用户名、密码
需要配置--general、源码管理、构建触发器、Build、Post Steps、构建设置(E-mail Notification)、 构建后操作(html报告,邮件Edirtable Email Notification)--- 搞定。
使用 git中代码,Pre Steps 就不需要输入命令。 ---build 中 pom + goals 命令就可以了 (使用公司服务jenkins,一般jenkins各种系统配置运维会配置。个人拿到自己的账号、密码,登录成功,就可以构建自己的自动化项目了)
Build中,root Pom 输入maven 项目 ./pom.xml Goals and options :clean verify
Post Steps
构建三个选择---可根据需要设置
构建设置:邮箱设置,多个邮箱,英文空格为间隔。选择第一、第三 ------(可根据自己实际需要进行设置) 每一次不稳定的构建、每一次失败的构建--都需发送邮件
构建后操作 构建后 HTML 报告,报告路径:target/jmeter/html index page:多个jmx 脚本,多个报告时,以英文逗号隔开 Report title:jenkins运行完毕脚本后,显示的报告title
构建后邮件设置
构建后邮件-Editable Email Notification
勾选 Project Recipient List :xxxxxxx@xxxx.com xxxxxxxxx@qq.com (邮件接收人,多个接收人时可空格/逗号 隔开)
Project Reply-To List : $DEFAULT_REPLYTO
Content Type :HTML(text/html) ---- 邮件 中内容格式
Default Subject : $DEFAULT_SUBJECT
Default Content : $DEFAULT_CONTENT
Advanced Setting:点击 (高级配置)
Pre-send Script :$DEFAULT_PRESEND_SCRIPT
Post-send Script: $DEFAULT_POSTSEND_SCRIPT
Triggers , 勾选 Always, send to --勾选 Recipient List, 高级--点击
展开中: Recipient List :收件人
Reply-To List: $PROJECT_DEFAULT_REPLYTO (回复列表)
Content Type:HTML(text/html)
Subject: 【接口测试报告】$PROJECT_NAME - $BUILD_STATUS - Build #$BUILD_NUMBER!
subject--邮件标题
Content:邮件中内容,是一段 html 代码。
点击应用。。
到目前为止,jmeter + maven +jenkins +git,项目已全部增加。
jenkins中点击testone,进入;
点击左侧--立即构建,下面显示构建进度条 进度条走完,变成 蓝色球:构建成功;
变成灰色球,构建失败;
构建过程中,点击 该次构建,进入本次构建详情页, 构建详情页中,左侧有控制台输出,点击进入可查看 构建日志 构建完毕,收件人邮箱收到 本次构建结果。